Page 176 - AngularJS权威教程
P. 176
156 第 16 章 XHR 实践
Content-Type;
application/x-www-form-urlencoded;
multipart/form-data;
text/plain。
我们把这类请求归类为简单请求,因为浏览器可以不需要使用CORS就发送这类请求。简单
请求不要求浏览器和服务器之间有任何的特殊通信。
一个使用$http服务的简单CORS请求和其他简单请求看起来是下面这样的:
$http
.get("https://api.github.com")
.success(function(data) {
// 数据
});
16.3.4 非简单请求
不符合简单请求标准的请求被称为非简单请求。如果想要支持PUT或DELETE方法,又或者
想给请求设置特殊的内容类型,就需要发送非简单请求。
尽管这些请求在客户端开发者看来没什么不同,但浏览器会以不同的方式处理它们。
浏览器实际上会发送两个请求:预请求和请求。浏览器首先会向服务器发送预请求来获得发
送请求的许可,只有许可通过了,浏览器才会发送真正的请求。
浏览器处理CORS的过程是透明的。
同简单请求一样,浏览器会给预请求和请求都加上Origin头。
预请求
浏览器发送的预请求是OPTIONS类型的,预请求中包含以下头信息:
Access-Control-Request-Method
这个头是请求所使用的HTTP方法,会始终包含在请求中。
Access-Control-Request-Headers (可选)
这个头的值是一个以逗号分隔的非简单头列表,列表中的每个头都会包含在这个请求中。
服务器必须接受这个请求,然后检查HTTP方法和头的合法性。如果通过了检查,服务器会
在响应中添加下面这个头:
Access-Control-Allow-Origin
这个头的值必须和请求的来源相同,或者是*符号,以允许接受来自任何来源的请求。
Access-Control-Allow-Methods
这是一个可以接受的HTTP方法列表,对在客户端缓存响应结果很有帮助,并且未来发送的
请求可以不必总是发送预请求。