什么是CORS?什么是预检请求?

发布时间 2023-07-27 11:07:28作者: IT知识生产小店铺

CORS是跨源资源共享的意思。

现在开发的过程中前后端分离,可能会出现浏览器发送给不同域名的服务器的需求。

这里涉及到一个名称:域名。域名包括协议,域名,端口号。三者完全相同就是同源。

不同源说明是跨域,那么会有限制:

1.服务器不能接受跨域的ajax请求

2.服务器不能接受cookie,localStorage,SessionStorage等

3.服务器不能访问非同源的dom

 

CORS的原理就浏览器和服务器对HTTP的协议头做一些约定和限制。

例如:

 举例:

 上面的注释说的很清楚了。

 

另外跨域中分普通请求和非普通请求(prelight)。

如何区分它们呢?

满足一下要求的就是普通请求:

  • 请求的方法只能是GET, POST, HEAD的一种
  • 请求的header的只能是AcceptAccept-Language, Content-LanguageContent-Type这些字段,不能超出这些字段
  • 对于请求的header的Content-Type字段,只能是以下值
    • text/plain
    • multipart/form-data
    • application/x-www-form-urlencoded

都满足以上条件的就是简单请求,否则就是非简单请求。

普通请求会被直接发送给服务端,而非简单请求,会提前发送预检请求,当预检请求通过了,才发送真实请求。
为什么这么操作呢?因为普通请求大多数是一些表格查询,计算不复杂,而且form是可以直接命令发给服务器,不需要通过ajax。
非普通请求则会有大量计算,如果预检不通过,就不需要进行大量的计算。
 
大家觉得内容简单,可以移步另一篇作者的博文,写的非常详细:你知道什么是预检请求吗? - 掘金 (juejin.cn)