什么时候会发生跨域?
不同源
同源
同源指的是协议、域名、端口号全部相同。同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能都可能会受到影响。Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现
(域名要相同,二级域名也会跨域)
针对非同源的情况制定了一些限制条件,
- 无法读取不同源的cookie、LocalStorage、indexDB。
- 无法获得不同源的DOM。
- 不能向不同源的服务器发送Ajax请求。
解决方案
cors
CORS是W3C制定的跨站资源分享标准,可以让AJAX实现跨域访问,定义了在必须访问跨域资源时浏览器与服务器该如何沟通。CORS背后的基本思想,就是使用自定义的HTTP头部让浏览器和服务器进行沟通,从而决定请求或响应应该成功还是失败。
交互
- 每次访问接口之前必须先握手(添加origin头部,包含协议 域名 端口)
Origin: http://www.xxxx.com
- 服务器是否接受这个请求,在Access-Control-Allow-Origin头部中发回相同的源信息(如果是公共资源,可以发“*”)。例如:
Access-Control-Allow-Origin: http://www.example.com
缺点:即使非常简单的请求,也会发送2个接口调用,第一次握手,允许之后才会发送第二次调用
代理(nginx)
前段nginx配置添加一下代理的pass
location ~* ^/api/
{
proxy_pass http://xxx;
}
在后端项目中定一下上游服务
upstream xxx {
server 127.0.0.1:8800;
}
server {
listen 8800;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
...
网友评论