跨域问题
1,什么是跨域问题?
跨域是指跨域名的访问
跨域原因说明 | 示例 |
---|---|
域名不同 | www.jd.com 与 www.taobao.com |
域名相同,端口不同 | www.jd.com:8080 与 www.jd.com:8081 |
二级域名不同 | item.jd.com 与 miaosha.jd.com |
注意:如果域名和端口都相同,但是请求路径不同,不属于跨域
2,为什么又跨域问题?
一个页面发起的ajax请求,只能是于当前页同域名的路径
跨域问题是针对ajax的一种限制
3,解决跨域问题
三种方案:
3.1.jsonp
最早的解决方案,利用script标签可以跨域的原理实现
限制:
需要服务的支持
只能发起GETi请求
3.2.nginx反向代理
思路是:利用nainx反向代理把跨域为不跨域,支持各种请求方式
缺点:需要在nginx进行额外配置,语义不清晰
3.3.CORS
规范化的跨域请求解决方案,安全可靠。
优势:
在服务端进行控制是否允许跨域,可自定义规则
支持各种请求方式
缺点:
会产生额外的请求
4,cors解决跨域
4.1.什么是CORS
CORS是一个W3C的标准,全称是“跨域资源共享”
4.2.CORS原理
浏览器会将ajax请求分为两类,其处理方案略有差异:简单请求,特殊请求
4.2.1.简单请求
只要满足以下两大条件就是简单请求
4.2.1.1.请求方式是以下三种方法之一:
HEAD
GET
POST
4.2.1.2.HTTP的头信息不超过以下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:
4.2.2.特殊请求
不符合简单请求的条件,会被判定为特殊请求,列如请求方式为PUT