跨域资源共享(CORS)
介绍
跨域资源共享(CORS)
全程为(Cross-Origin Resource Sharing)
是一种基于 HTTP
头部的机制,允许服务器通过设置 HTTP
头部来控制哪些源可以访问其资源,从而解决同源策略
带来的限制问题。
CORS
是一种标准化的方法,能让服务器安全地暴露其资源给不同的源。
不同的请求方式,会对服务器造成不同程度的影响,比如 GET 方法
通常只是获取一些服务器数据,而 POST 方法
可能会修改服务的数据。
针对不用的请求 CORS 规定了三种不同的交互方式,分别是:
- 简单请求
- 预检请求
- 附带身份凭证的请求
简单请求
简单请求
不会触发 CORS 预检请求
。满足以下条件的请求即为简单请求:
-
请求方法属于下面的一种
- GET
- POST
- HEAD
-
请求头只包含以下安全的属性:
- Accept
- Accept Language
- Content-Language
- Content-Type
- DPR
- Downlink
- Save-Data
- Viewport-Width
- Width
-
Content-Type 的值只有以下三种:
- text/plain
- application/x-www-form-urlencoded
- multipart/form-data
下面是一些例子:
// 简单请求
fetch("http://crossdomain.com/api/news");
// 不是简单请求 请求方法不满足
fetch("http://crossdomain.com/api/news", {
method: "PUT",
});
// 不是简单请求 有额外的请求头
fetch("http://crossdomain.com/api/news", {
headers: {
a: "1",
},
});
// 简单请求 POST请求方法 content-type默认为application/x-www-form-urlencoded
fetch("http://crossdomain.com/api/news", {
method: "POST",
});
// 不是简单请求
fetch("http://crossdomain.com/api/news", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
});