关于跨域的what,why,how

1.跨域是什么鬼?

前台调用后台的接口,若是不是同一个域,就会产生跨域问题前端

2.为何会产生跨域问题?

1. 浏览器限制

浏览器出于安全考虑,发现请求是跨域的时候,会作一些校验,校验不经过,就会有跨域问题

2. 发出的请求不是本域的

发出的请求,不是本域的,协议,域名,端口,任何一个不同,浏览器都会认为是跨域

3. 发出的是XHR(XMLHttpRequest)请求

若是发出的不是XHR请求,即便不是本域的,浏览器不会认为是跨域

3.如何解决跨域问题?

1.让浏览器不作校验

命令行参数启动:经过命令行参数启动浏览器(--disable-web-security), 浏览器不会检查

MacOS命令行:
open -n /Applications/Google Chrome.app/ --args --disable-web-security —user-data-dir=/Users/你电脑的名字/MyChromeDevUserData/web

2.jsonp自己

jsonp是用动态建立的script标签对进行请求  /get?callback=123

为何jsonp能够解决跨域问题?

发出的请求不是xhr类型,type是script类型,浏览器不作校验

callback的内容,就是函数名,返回的数据,是做为函数的参数

jsonp的缺点:

-服务器须要改动代码
-只支持get方法
-发送的不是xhr请求

3.跨域自己

跨域资源共享CORS:在响应头增长指定的字段,容许对方调用json

Access-Control-Allow-Origin
            "*" 容许全部域跨域调用
            "http://www.sanjieke.cn" 容许这个域跨域调用
        
Access-Control-Allow-Method
            "*" 容许全部的方法
            "GET" 指定容许的方法
            
带cookie的跨域,origin必须是全匹配,不能是*号,须要增长Access-Control-Allow-Credentials为true,前端也须要设置xhr.withCredentials = true 带上cookie


带自定义头的跨域,增长Access-Control-Allow-Headers,值为自定义头

更详细的解读 https://segmentfault.com/a/11...segmentfault

相关文章
相关标签/搜索