如何解决预检无效(重定向)'预检请求不允许重定向或'重定向

时间:2017-02-10 21:15:38

标签: asp.net .net iis cors preflight

我已按照此步骤设置我的服务器以启用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请求。

谢谢。

4 个答案:

答案 0 :(得分:14)

您的代码正在触发您的浏览器发送CORS preflight OPTIONS request,并且服务器正在使用3xx重定向进行响应。它需要使用2xx成功消息进行响应。

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

就这种情况所做的一切而言,重要的是要知道浏览器在以下情况下进行CORS预检:

  • 请求方法不是GETHEADPOST
  • 您设置的自定义请求标题不是AcceptAccept-LanguageContent-LanguageContent-TypeDPRDownlink,{{ 1}},Save-DataViewport-Width
  • Width请求标头的值不是Content-Typeapplication/x-www-form-urlencodedmultipart/form-data

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

  1. 检查响应并查看服务器在text/plain之后重定向到的URL。
  2. 更改您的代码,直接将请求发送到其他网址。

答案 1 :(得分:2)

有时,当您尝试将HTTPS服务称为http

时,就会发生这种情况
for example when u perform a request on 'http://example.com/api/v2/tickets' 
which should be 'https://example.com/api/v2/tickets' 

答案 2 :(得分:2)

首先确保您在标题中有“Access-Control-Allow-Origin”:“*”

然后只需删除网址末尾的“/”

例如:

url: "https://facebook/api/login/"

到 ->

url: "https://facebook/api/login" (without '/')

答案 3 :(得分:2)

就我而言,我不必将请求标头设置为“Access-Control-Allow-Origin”:“*”。网址必须以“/”结尾