最近做一个项目时,涉及到了preflight 预检这个机制。产生了一个疑惑:
浏览器为什么非要通过预检来和服务器确认请求是否可用呢?而不是直接将请求发送给服务器端?请求是否会对服务器造
成影响这个已经不属于浏览器端的范畴了,那么为什么浏览器中却会去规定要先发送一个预请求?如此做的意义是什么
呢? 有了解相关知识的前辈吗?可以分享一下相关的例子吗?。先在此谢过大家。
最近做一个项目时,涉及到了preflight 预检这个机制。产生了一个疑惑:
浏览器为什么非要通过预检来和服务器确认请求是否可用呢?而不是直接将请求发送给服务器端?请求是否会对服务器造
成影响这个已经不属于浏览器端的范畴了,那么为什么浏览器中却会去规定要先发送一个预请求?如此做的意义是什么
呢? 有了解相关知识的前辈吗?可以分享一下相关的例子吗?。先在此谢过大家。
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
浏览器为什么要这么做? 因为规范/标准规定
引用一段规范
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站有权限访问哪些资源。另外,规范要求,
对那些可能对服务器数据产生副作用
的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。划红线的是可以避免的问题