关于跨域

348 阅读2分钟

一、什么是跨域

浏览器同源策略
协议、域名、端口有一个不同就是不同源,不同源下请求无法获取资源,这就是跨域

解决跨域

  • 通过form表单 antion='www.baidu.com'

  • a 标签跨域

  • JSONP跨域
    是利用script标签来跨域

      <script src='https://bilibili.com'></script>
    
  • CORS 跨域资源共享
    后端允许跨域,在http协议内增加若干首部字段

      Access-Control-Origin: *
    

CORS 又分为两种

预检请求

此规则规定,处于跨域环境并在下面几个条件下,浏览器会发送两个请求给服务器;
举例说明:假设客户端需要发起 PUT 请求

1.首先,客户端要发送 OPTIONS 请求 给服务器。
2.在服务器内部,需要对 OPTIONS 请求 ,做出一些 设定 ,告诉客户端 是否允许访问 。
3.客户端确认服务器允许该方法,最终发送 PUT 请求;否则,抛出错误,服务器拒绝访问此方法。

这种设定保证了服务器的 安全性,服务器可控制客户端访问的内容 !!!

触发预请求有三种情况:

1.使用了某些方法,比如说 PUT, DELETE 等。
2.Fetch 规范规定了对 CORS安全的首部字段集合,人为设置会触发预请求。
3.Content-Type的值不是text/plain ,multipart/form-data,application/x-www-form-urlencoded

HTTP访问控制CORS MDN文档
参考文章

不预检请求

此规则规定,在跨域产生的条件下,某些请求和方法,不需要预请求,只发送一个请求就行了。
1.简单的请求比如说:GET, POST, HEAD 这三个方法。
2.允许人为设置的字段为 Fetch 规范定义的 对 CORS 安全的首部字段集合。该集合为:

Accept  
Accept-Language  
Content-Language  
Content-Type (需要注意额外的限制)  
DPR  
Downlink  
Save-Data  
Viewport-Width  
Width  

3.Content-Type 的值仅限于下列三者之一:

text/plain  
multipart/form-data  
application/x-www-form-urlencoded  
  • 使用代理服务器跨域