一、什么是跨域
浏览器同源策略
协议、域名、端口有一个不同就是不同源,不同源下请求无法获取资源,这就是跨域
解决跨域
-
通过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
- 使用代理服务器跨域