CORS跨域资源共享

后端来设置一个响应头  access-control-allow-origin: 'http://www.xxx.com'

                        浏览器先发出请求到服务器  返回的过程中 判断是否是同源的   

                        如果不是同源的会去看响应报文的响应头是否有 access-control-allow-origin: * / 当前页面的域名

                        w3c标准里面提出的


 

                         浏览器将 CORS 请求分成两类:简单请求和非简单请求,只要同时满足下面两个条件就属于简单请求 

                        ( 1 ) 请求的方法只能是 HEAD,GET,POST 

                        ( 2 ) HTTP 的头信息不超出以下几种字段

                            Accept

                            Accept-Language

                            Content-Language

                            Last-Event-ID

                            Content-Type:只限于三个值 application/x-www-form-urlencoded、multipart/form-data、text/plain

                            只要不满足以上两个条件就属于非简单请求,浏览器对于非简单请求会进行一次预检.

 

                        对于简单请求 只需要设置 Allow-Control-Access-Origin相应头就可以

                    非简单请求

                        预检请求

                        非简单请求指的是对服务器有特殊要求,比如请求方法为 PUT 或 DELETE,或者 Content-Type 字段的类型是 application/json。

                        非简单请求的 CORS 请求会在通信之前,增减一次 HTTP 查询的请求,成为 “预检”。

                        浏览器会先询问服务器,当前网页所在的域名是否在服务器许可的名单之中,

                        以及可以使用哪些 HTTP 请求和头部字段。如果通过服务器的校验,才会发起正式的 XMLHttpRequest 请求,否则就报错


 

                    非简单请求的响应头里面必须含有以下字段:

 

                        Allow-Control-Access-Origin 必需,表示可以请求的源。

                        Access-Control-Allow-Methods 必需,表示支持的所有方法,以逗号分隔

                        Access-Control-Allow-Headers 如果浏览器请求包括 Access-Control-Req方法,以逗号分隔

                        Access-Control-Allow-Headers 如果浏览器请求包括 Access-Control-Request-Headers 字段,则 Access-Control-Allow-Headers 字段是必需的。它也是一个逗号分隔的字符串,表明服务器支持的所有头信息字段。

上一篇:fetch--post--json请求报错


下一篇:基于workerman做最简单的访问route实现简单的mvc框架之三(原创) 解决跨域访问