CROS请求

来源:互联网 发布:用js怎么写身高和体重 编辑:程序博客网 时间:2024/05/21 06:59
1.简单请求:GET POST HEAD
HEAD 返回的仅仅是头部(可以用于指导某个url返回的数据类型)
Origin: 表示请求是来自哪一台主机.
Access-Control-Allow-Origin: *  |  www.baidu.com 
表示允许哪一台主机进行跨域请求.*时所有主机均可以跨站请求.
2.预请求:OPTION

“预请求”要求必须先发送一个 OPTION 请求给目的站点,来查明这个跨站请求对于目的站点是不是安全可接受的。这样做,

是因为跨站请求可能会对目的站点的数据造成破坏。 当请求具备以下条件,就会被当成预请求处理:

①.请求以 GET, HEAD 或者 POST 以外的方法发起请求。或者,使用 POST

但请求数据为

application/x-www-form-urlencoded, multipart/form-data 或者 text/plain 
以外的数据类型。

比如说,用 POST 发送数据类型为 application/xml 或者 text/xml 的 XML 数据的请求。

Accept-ContentType:application/json
  此时请求数据为json,所以会发送一次预请求.

②.使用自定义请求头(比如添加诸如 X-PINGOTHER
$.ajax(url:"http://google.com",type:"get", beforeSend: function(XMLHttpRequest) {               XMLHttpRequest.setRequestHeader("X-PINGOTHER","pingpong");        }   )
            此时会有两个请求头一起被发送            
Access-Control-Request-Method: POSTAccess-Control-Request-Headers: X-PINGOTHER
服务端应该允许该请求头:X-PINGOTHER
Access-Control-Allow-Headers: X-PINGOTHER
3.跨站时发送cookie信息:需要将一个标志位withCredentials设置为true.
var ajax = new XMLHttpRequest();ajax.open('POST',"http://google.com",true);ajax.withCredentials = true;ajax.send;

但是,如果服务器端的响应中,如果没有返回

Access-Control-Allow-Credentials: true
的响应头,那么浏览器将不会把响应结果传递给发出请求的脚本程序,以保证信息的安全。

响应头:

Access-Control-Allow-Credentials:true
特别注意: 
给一个带有withCredentials的请求发送响应的时候,服务器端必须指定允许请求的域名,不能使用'*'.
如果响应头是这样的:
Access-Control-Allow-Origin: * 

,则响应会失败.

4.检测XHR是否支持CORS:

var xhr = new XMLHttpRequest();if (“withCredentials” in xhr){alert("支持 withCredentials cookie CORS")}
0 0