cors是一个服务端和客户端协作声明的方式来确保请求的安全性。
- 服务端在HTTP请求头增加一些列的请求头信息(例如Access-Control-Allow-Orign等),说明哪些域的请求可以接受,或哪些类型的请求可以接受。
- 客户端在发起请求时,也必须在请求头中声明自己的源(Orign),否则服务器将不予处理。如果客户端不作声明,请求可能会被浏览器阻止,到不了服务器端。HTTP请求到达服务器之后会与服务端声明的域进行比较,只有同域的请求才做处理。
客户端代码:
//原声js ajax请求
var xhr = new XMLHttpRequest();
xhr.open("post", "http://b.example.com/Test.ashx", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
//关键步骤:***在请求头声明请求源***
xhr.setRequestHeader("Origin", "http://a.example.com");
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
var responseText = xhr.responseText;
console.info(responseText);
}
}
xhr.send();
服务端代码:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
// 声明接受所有域的请求
context.Response.AddHeader("Access-Control-Allow-Origin", "*");
context.Response.Write("Hello World");
}
public bool IsReusable
{
get
{
return false;
}
}
}