从Site-A加载的JavaScript向Site-B发POST请求是否会触发CORS违规?
SOP/CORS策略场景疑问解答
第一个疑问解答
你的判断不完全准确,分两种情况说明:
- 如果是属于简单请求范畴的POST请求(满足请求头仅包含安全头、
Content-Type仅为application/x-www-form-urlencoded/multipart/form-data/text/plain三个值之一等条件):请求本身会正常发送到company-two.com的服务器,服务端也会正常处理请求,只是浏览器会校验响应的CORS头,校验不通过时会拦截响应内容,不让前端JavaScript读取返回结果,同时控制台抛出跨域错误,这种情况属于「请求发送成功但前端拿不到返回」,不是完全的请求失败。 - 如果是属于非简单请求范畴的POST请求(比如
Content-Type为application/json、携带自定义请求头等):浏览器会先发送OPTIONS预检请求,预检校验不通过的情况下,才不会发送实际的POST请求。
第二个疑问解答
你的判断也不完全准确:
- 对于简单POST请求:只要company-two.com的响应头正确配置
Access-Control-Allow-Origin: https://company-one.com(注意必须匹配请求源的完整协议+域名,端口不同也要对应配置),前端就可以正常读取响应内容。如果请求携带身份凭证(Cookie等),还需要额外配置Access-Control-Allow-Credentials: true,同时前端请求要开启withCredentials属性。 - 对于非简单POST请求:仅配置
Access-Control-Allow-Origin不够,还需要对OPTIONS预检请求的响应额外配置对应的Access-Control-Allow-Methods(允许POST方法)、Access-Control-Allow-Headers(允许请求携带的自定义头)等头信息,预检通过后实际POST请求才能正常拿到响应结果。
内容的提问来源于stack exchange,提问作者blue
相关产品推荐
相关产品推荐

