一、浏览器的同源策略
二、CORS
Cross-Orign Resource Sharing
Cors是一套机制,用于浏览器校验跨域请求
它的基本理念是:
只要服务器明确表示允许,则校验通过
服务器明确拒绝或没有表示,则校验不通过
使用CORS方案的前提, 必须保证服务器是「自己人」
三、简单请求与预检请求
CORS将请求分为两类:
1. 简单请求
- 请求方法为
GET、HEAD、POST - 头部字段满足CORS安全规范,详情(简单理解为不修改请求头)
- 请求头的Content-Type为
text/plain,multipart/form-data,application/x-www-form-urlencoded
fetch('https://douyin.com');
fetch('https://douyin.com', {
method: 'POST',
body: JSON.stringify({ a: 1, b: 2 }),
});
2. 预检请求
其他请求为预检请求
fetch('https://douyin.com', {
headers: {
a: 1
}
});
fetch('https://douyin.com', {
method: 'POST',
headers: {
'Content-type': 'applican/json'
},
body: JSON.stringify({ a: 1, b: 2 }),
});
四、处理方法
1. 简单请求
简单请求会在请求时携带Origin头,代表当前页面的域是什么,源是什么。如果服务器允许访问,则在响应时添加Access-Control-Allow-Origin头,携带与当前页面相同的域即可,或者*允许所有的源进行访问。
2. 预检请求
首先发送一个预检请求,携带Origin头表示当前域,Access-Control-Allow-Methods头表示待请求的方法,Access-Control-Request-Headers表示修改了哪些头,然后服务器自行判断是否通过,如果服务器允许通过的话则返回Access-Control-Allow-Origin,Access-Control-Allow-Methods,Access-Control-Allow-Headers,设置允许的域、请求方法与改变的头。然后发送真实请求。