什么是CORS?什么是预检请求?
CORS是跨源资源共享的意思。
现在开发的过程中前后端分离,可能会出现浏览器发送给不同域名的服务器的需求。
这里涉及到一个名称:域名。域名包括协议,域名,端口号。三者完全相同就是同源。
不同源说明是跨域,那么会有限制:
1.服务器不能接受跨域的ajax请求
2.服务器不能接受cookie,localStorage,SessionStorage等
3.服务器不能访问非同源的dom
CORS的原理就浏览器和服务器对HTTP的协议头做一些约定和限制。
例如:
举例:
上面的注释说的很清楚了。
另外跨域中分普通请求和非普通请求(prelight)。
如何区分它们呢?
满足一下要求的就是普通请求:
- 请求的方法只能是
GET
,POST
,HEAD
的一种 - 请求的header的只能是
Accept
,Accept-Language
,Content-Language
,Content-Type
这些字段,不能超出这些字段 - 对于请求的header的
Content-Type
字段,只能是以下值text/plain
multipart/form-data
application/x-www-form-urlencoded
都满足以上条件的就是简单请求,否则就是非简单请求。
为什么这么操作呢?因为普通请求大多数是一些表格查询,计算不复杂,而且form是可以直接命令发给服务器,不需要通过ajax。
非普通请求则会有大量计算,如果预检不通过,就不需要进行大量的计算。
大家觉得内容简单,可以移步另一篇作者的博文,写的非常详细:你知道什么是预检请求吗? - 掘金 (juejin.cn)
人前不露怯,
远足不露财,
内外当整洁,
自奉须俭约。