We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
我发现我请求一个接口,却发送了两次请求。第一次被称为预检。
预检,实在CORS跨域的时候才有的东西。
CORS里面有简单请求和复杂请求。复杂请求可以理解成是可能会对服务产生副作用,浏览器为了安全考虑就会限制发起跨源的请求。get post都无效。但是OPTIONS可以响应。这个OPTIONS就是预检。
CORS
get
post
OPTIONS
"预检"请求实际上是对服务端的一种权限请求,只有当"预检"请求成功返回,实际请求才开始执行。
所以,才会出现请求了两次的现象。
这个直接看MDN,是最有保障的。
我使用的Axios,在请求头中加入了config.headers.Authorization来传递token。 然后定义了config.headers.post['Content-Type'] = 'application/json';
Axios
config.headers.Authorization
token
config.headers.post['Content-Type'] = 'application/json';
入MDN上说,我这个肯定是复杂请求了。
我的个人项目,每次请求都有两次:
这次是预检
这次是返回数据
disable cache
但是在我看掘金的请求的时候,也是Content-Type: application/json,就没有看见OPTIONS预检这一项呢? 就是下图:
Content-Type: application/json
难道掘金不是复杂请求吗?而且我看网站,都没有看见OPTIONS预检。是因为大家都给设置了Access-Control-Max-Age,减少了预检吗?
Access-Control-Max-Age
不是的,是因为控制台没有勾选Disable cache 强制不缓存。勾选Disable cache 再看,就能看到预检的请求了。
Disable cache
显示OPTIONS预检跟disable cache有关,那OPTIONS预检,算缓存?为啥开了缓存以后,就不显示了,而不是显示强缓存呢?
后端设置Access-Control-Max-Age来控制浏览器在多长时间内(单位s)无需在请求时发送预检请求,从而减少不必要的预检请求。
CORS跨域时,为何会出现一次动作,两次请求? 我自己的提问:关于CORS是复杂请求却没有预检的问题
The text was updated successfully, but these errors were encountered:
No branches or pull requests
什么是预检
我发现我请求一个接口,却发送了两次请求。第一次被称为预检。
预检,实在CORS跨域的时候才有的东西。
CORS
里面有简单请求和复杂请求。复杂请求可以理解成是可能会对服务产生副作用,浏览器为了安全考虑就会限制发起跨源的请求。get
post
都无效。但是OPTIONS
可以响应。这个OPTIONS
就是预检。所以,才会出现请求了两次的现象。
简单请求和复杂请求
这个直接看MDN,是最有保障的。
一个例子
我使用的
Axios
,在请求头中加入了config.headers.Authorization
来传递token
。然后定义了
config.headers.post['Content-Type'] = 'application/json';
入MDN上说,我这个肯定是复杂请求了。
我的个人项目,每次请求都有两次:

这次是预检

这次是返回数据

和
disable cache
也有关系但是在我看掘金的请求的时候,也是

Content-Type: application/json
,就没有看见OPTIONS
预检这一项呢?就是下图:
难道掘金不是复杂请求吗?而且我看网站,都没有看见
OPTIONS
预检。是因为大家都给设置了Access-Control-Max-Age
,减少了预检吗?不是的,是因为控制台没有勾选
Disable cache
强制不缓存。勾选Disable cache
再看,就能看到预检的请求了。目前还存在的疑问
显示
OPTIONS
预检跟disable cache
有关,那OPTIONS
预检,算缓存?为啥开了缓存以后,就不显示了,而不是显示强缓存呢?减少预检
参考
CORS跨域时,为何会出现一次动作,两次请求?
我自己的提问:关于CORS是复杂请求却没有预检的问题
The text was updated successfully, but these errors were encountered: