浏览器策略
出于安全的考虑,浏览器只允许向协议
、域名
、端口
完全相同的服务器发送请求。同源策略是一种约定,也是浏览器最基本的核心安全功能。
协议
、域名
、端口
只要有一个不同,浏览器就会拒绝该请求。
解决办法
JSONP
JSONP利用的是script标签不受同源策略限制来加载script代码,但这种方法也是很有局限性的,首先,script标签只能发送get请求,其次,该方法只能返回一个函数的调用,需要提前定义好函数,然后把函数参数通过传参的方式传给后端,后端解析好参数参数值后,将形参数据拼接到一个函数的调用并返回一个函数的执行。
JSONP唯一的优势就是支持所有的老式浏览器。
cors(cross original resource sharing)跨域资源共享
跨域资源共享是W3C标准,该标准允许非同源的浏览器与服务器之间进行通信,克服了ajax只能只能使用同源的限制
首先
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能。万恶的IE除外,IE浏览器不能低于IE10。
实现CORS的关键是服务器,只要服务器实现了CORS接口,就可以实现跨源通信。
CORS请求分为简单请求和复杂请求,复杂请求之前,浏览器会发送一个预检请求(option)
只要满足以下条件,均为简单请求
- 请求方法是以下三种方法之一:
- HEAD
- GET
- POST
- HTTP的头信息不超出以下几种字段:
- Accept
- Accept-Language
- Content-Language
- Last-Event-ID
- Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
其他都是非简单请求(复杂请求)
非简单请求是那种对服务器有特殊要求的请求,比如请求方法是PUT
或DELETE
,或者Content-Type
字段的类型是application/json
。
浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的XMLHttpRequest
请求,否则就报错。