跨域请求从发送到被拦截的过程?
面试时被问到这个问题。
我的回答是浏览器接受到服务器的响应后,会检查当前源是否在Access-Control-Allow-Origin字段内,或者这个字段是不是*号。如果两个条件都不满足就给拦截掉。虽然是收到了响应,但不做之后的处理。
但是面试官说是错的,让我在仔细看看。
我百度了一圈,没有发现其他的说法
请问跨域请求从发送到被拦截的详细过程??
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
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
,它也是一定时间内浏览器就不会再发送预检请求了,直接根据上一次的预检结果做出应答。这种情况下实际上并没有发送请求给服务器。