1. 同源策略
☐ 两个url是否同源,取决于三个方面:协议 + 域名 + 端口 都相同的url,就算做同源的。
☐ 如果两个url不同源,则不会相互访问对方的资源。
☐ 浏览器是遵守同源策略。(postman,apipost测试工具不用遵守同源策略)
2. Access-Control-Allow-Origin
☐ Access-Control-Allow-Origin响应头,用于指定哪个外域url可以访问当前服务的资源
☐ 比如:Access-Control-Allow-Origin: http://www.star.com表示只允许来自www.star.com的请求访问资源
3. Access-Control-Allow-Headers
默认情况下,CORS仅支持客户端向服务器发送如下9个请求头:
☐ Accept
☐ Accept-Language
☐ Content-Type(值仅限于 text/plain、multipart/form-data、application/x-www-form-urlencoded)
☐ DPR
☐ Downlink
☐ Save-Data
☐ Viewport-Width
☐ Width
☐ Content-Language
如果客户端向服务器发送了额外的请求头信息,则需要在服务器端通过Access-Control-Allow-Headers对额外的请求头进行声明,否则请求会失败
4. Access-Control-Allow-Methods
默认情况下,CORS仅支持客户端发起GET、POST、HEAD请求
如果客户端通过PUT、DELETE等方式请求服务器的资源,则需要在服务器端通过Access-Control-Allow-Methods对额外的请求方式进行声明,否则请求会失败
5. 简单请求
同时满足以下三个条件的请求,就是简单请求
☐ 请求方式:GET、POST、HEAD
☐ 请求头:Accept、Accept-Language、Content-Language、DPR、Downlink、Save-Data、Viewport-Width、Width、Content-Type
☐ Content-Type的取值:text/plain、multipart/form-data、application/x-www-form-urlencoded
6. 复杂请求
只要不是简单请求,那就是一个复杂请求
7. 预检请求
预检请求出现的条件:
☐ 请求是一个复杂请求
☐ 请求是一个跨域请求
只要满足以上两个条件,那么就会出现预检请求
预检请求的意义:
☐ 如果一个请求不被服务器允许跨域,而该请求仍然会产生副作用(比如数据入库,修改数据库数据等等),不被服务器允许跨域的请求,仅仅是限制浏览器无法读取服务器的响应数据,而该请求是仍然背会服务器正常处理的。
☐ 在浏览器与服务器正式通信之前,浏览器会先发送OPTION请求进行预检,以获知服务器是否允许跨域。只有得到服务器允许跨域的答复后,浏览器才会发送真正的(携带请求数据的)请求。以防止一个不被允许跨域的请求对服务器产生副作用。