问题 如何在CORS中解决'预检无效(重定向)'


我已按照此步骤设置我的服务器以启用CORS。 https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api

但现在在我的浏览器开发控制台中,我看到此错误消息:

XMLHttpRequest无法加载 https://开头serveraddress / ABC。回应   预检无效(重定向)

你知道我该怎么做才能修好它?我在HTTPS中发出CORS请求。我认为这导致'预检无效(重定向)'失败。但我不知道为什么或什么是重定向OPTIONS请求。

谢谢。


10530
2018-02-10 21:15


起源



答案:


您的代码导致您的浏览器发送 CORS预检OPTIONS请求 这是一个重定向。

在这种情况下,浏览器目前拒绝遵循重定向,因为CORS规范以前需要浏览器才能这样做。该限制实际上不再符合规范,但浏览器需要更新其实现以匹配规范更改。

您可以调整代码以避免触发浏览器发送OPTIONS请求。

至于这种情况的全部情况,首先要注意的是,浏览器在以下情况下进行CORS预检:

  • 请求方法不是GET,HEAD或POST
  • 你已经设置了自定义请求标题 AcceptAccept-LanguageContent-LanguageContent-TypeDPRDownlinkSave-DataViewport-Width, 要么 Width
  • Content-Type 请求标头具有除以外的值 application/x-www-form-urlencodedmultipart/form-data, 要么 text/plain

如果您无法更改代码以避免浏览器需要进行预检,那么另一个选项是:

  1. 检查响应并查看服务器在OPTIONS之后重定向到的URL。
  2. 更改代码以直接向其他URL发出请求。

见答案 预检和重定向的CORS请求:不允许。解决方法? 有关可能的解决方法的详细信息

同样如上所述,对于不遵循CORS预检重定向的浏览器的限制不再在规范中,但浏览器需要更新其实现以匹配规范更改。


13
2018-02-11 05:51



感谢您的回答。我会听从你的建议。我的应用程序需要将Content-Type application / json发送到服务器,这就是触发飞行前的原因。我无法改变这一点。 - n179911
好的,但请注意 对此的修复已落入Blink / Chromium来源 但是将在Chrome 57中发布,目标是在3月中旬发布一段时间。但同时如果你想测试它,你可以下载 当前版本的Chrome Beta,已经有了变化。 - sideshowbarker


答案:


您的代码导致您的浏览器发送 CORS预检OPTIONS请求 这是一个重定向。

在这种情况下,浏览器目前拒绝遵循重定向,因为CORS规范以前需要浏览器才能这样做。该限制实际上不再符合规范,但浏览器需要更新其实现以匹配规范更改。

您可以调整代码以避免触发浏览器发送OPTIONS请求。

至于这种情况的全部情况,首先要注意的是,浏览器在以下情况下进行CORS预检:

  • 请求方法不是GET,HEAD或POST
  • 你已经设置了自定义请求标题 AcceptAccept-LanguageContent-LanguageContent-TypeDPRDownlinkSave-DataViewport-Width, 要么 Width
  • Content-Type 请求标头具有除以外的值 application/x-www-form-urlencodedmultipart/form-data, 要么 text/plain

如果您无法更改代码以避免浏览器需要进行预检,那么另一个选项是:

  1. 检查响应并查看服务器在OPTIONS之后重定向到的URL。
  2. 更改代码以直接向其他URL发出请求。

见答案 预检和重定向的CORS请求:不允许。解决方法? 有关可能的解决方法的详细信息

同样如上所述,对于不遵循CORS预检重定向的浏览器的限制不再在规范中,但浏览器需要更新其实现以匹配规范更改。


13
2018-02-11 05:51



感谢您的回答。我会听从你的建议。我的应用程序需要将Content-Type application / json发送到服务器,这就是触发飞行前的原因。我无法改变这一点。 - n179911
好的,但请注意 对此的修复已落入Blink / Chromium来源 但是将在Chrome 57中发布,目标是在3月中旬发布一段时间。但同时如果你想测试它,你可以下载 当前版本的Chrome Beta,已经有了变化。 - sideshowbarker