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请求进行预检,以获知服务器是否允许跨域。只有得到服务器允许跨域的答复后,浏览器才会发送真正的(携带请求数据的)请求。以防止一个不被允许跨域的请求对服务器产生副作用。