请教大家一个跨域相关的问题,cors 的 preflight 请求可以避免什么样的问题?

最近做一个项目时,涉及到了preflight 预检这个机制。产生了一个疑惑:

浏览器为什么非要通过预检来和服务器确认请求是否可用呢?而不是直接将请求发送给服务器端?请求是否会对服务器造

成影响这个已经不属于浏览器端的范畴了,那么为什么浏览器中却会去规定要先发送一个预请求?如此做的意义是什么

呢? 有了解相关知识的前辈吗?可以分享一下相关的例子吗?。先在此谢过大家。

阅读 2.8k
2 个回答

浏览器为什么要这么做? 因为规范/标准规定
引用一段规范
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站有权限访问哪些资源。另外,规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。

划红线的是可以避免的问题

探测以下允不允许这些报头,该地址支持什么method,有没有触发同源保护等等,否则贸贸然请求过去,万一不行,很浪费资源和时间。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题