跨域请求从发送到被拦截的过程?

发布于 2022-09-13 00:57:15 字数 205 浏览 22 评论 0

面试时被问到这个问题。

我的回答是浏览器接受到服务器的响应后,会检查当前源是否在Access-Control-Allow-Origin字段内,或者这个字段是不是*号。如果两个条件都不满足就给拦截掉。虽然是收到了响应,但不做之后的处理。

但是面试官说是错的,让我在仔细看看。

我百度了一圈,没有发现其他的说法

请问跨域请求从发送到被拦截的详细过程??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一杯敬自由 2022-09-20 00:57:15

emmm...面试结束之后其实你可以当场就直接问面试官的。

核心说出来了,但细节有些问题。但也不能说是错,只是没答全。

第一个问题是浏览器发现 AJAX 是跨域请求后,会先发一个谓词为 OPTIONS 的请求给服务器,这个请求叫“预检请求”(Preflighted);预检通过后才会二次发送原本真正的请求。关键词是有两个请求,这点你要答出。

注:并非所有跨域 AJAX 请求都一定会有预检请求,哪些有哪些没有你可以自行搜索。

第二个问题是预检并不只检查 Access-Control-Allow-Origin(源),还要检查比如说 Access-Control-Allow-Methods(谓词)、Access-Control-Allow-Headers(标头)、Access-Control-Allow-Credentials(授权)等等,有一个不符合就预检失败了。

如果还要展开说的话可以再说说 Access-Control-Max-Age,类似缓存的 Cache-Control: max-age,它也是一定时间内浏览器就不会再发送预检请求了,直接根据上一次的预检结果做出应答。这种情况下实际上并没有发送请求给服务器。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文