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方法列表,对在客户端缓存响应结果很有帮助,并且未来发送的
             请求可以不必总是发送预请求。
   171   172   173   174   175   176   177   178   179   180   181