跨域解决方案

2019-07-26  本文已影响0人  swoft_

什么时候会发生跨域?

不同源

同源

同源指的是协议、域名、端口号全部相同。同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能都可能会受到影响。Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现
(域名要相同,二级域名也会跨域)
针对非同源的情况制定了一些限制条件,

  1. 无法读取不同源的cookie、LocalStorage、indexDB。
  2. 无法获得不同源的DOM。
  3. 不能向不同源的服务器发送Ajax请求。

解决方案

cors

CORS是W3C制定的跨站资源分享标准,可以让AJAX实现跨域访问,定义了在必须访问跨域资源时浏览器与服务器该如何沟通。CORS背后的基本思想,就是使用自定义的HTTP头部让浏览器和服务器进行沟通,从而决定请求或响应应该成功还是失败。

交互

  1. 每次访问接口之前必须先握手(添加origin头部,包含协议 域名 端口)
Origin: http://www.xxxx.com
  1. 服务器是否接受这个请求,在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;
    }
  ...
上一篇 下一篇

猜你喜欢

热点阅读