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

n17*_*911 16 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请求.

谢谢.

Ade*_*IMM 25

当您尝试将https服务调用为http时有时会发生这种情况,例如当您对以下内容执行请求时:

' http://example.com/api/v2/tickets '

应该是:

'http s ://example.com/api/v2/tickets'


sid*_*ker 19

您的代码触发您的浏览器发送CORS预检OPTIONS请求,并且服务器通过3xx重定向进行响应.它需要响应2xx成功消息.

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

至于在这种情况下所发生的一切,重要的是要知道浏览器在以下情况下执行CORS预检:

  • 所述请求的方法是什么以外GET,HEADPOST
  • 你设置比其他自定义请求头Accept,Accept-Language,Content-Language,Content-Type,DPR,Downlink,Save-Data,Viewport-Width,或者Width
  • Content-Type请求头具有比以外的值application/x-www-form-urlencoded,multipart/form-datatext/plain

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

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

  • 感谢您的回答。我会听从你的建议。我的应用程序需要将 Content-Type application/json 发送到服务器,以便触发预检。我无法改变这一点。 (2认同)
  • 我知道已经过去很多年了,但这对我今天很有帮助。我的问题是缺少尾部斜杠。谢谢你! (2认同)
  • 我选择从所有网址中完全删除尾部斜杠。由于这个预检 CORS 错误,我遭受了相当大的痛苦。我会发现有些页面有错误,而其他页面则没有。多么地狱般的经历啊!就这样持续了几个星期! (2认同)
  • *Content-Type 请求标头的值不是* [...] 它并不那么简单(没有双关语):https://twitter.com/jub0bs/status/1432025056234835980 (2认同)

Ниг*_*дан 15

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

然后删除 url 末尾的“/”

例如改变

url: "https://facebook/api/login/"
Run Code Online (Sandbox Code Playgroud)

进入

url: "https://facebook/api/login" (without '/')
Run Code Online (Sandbox Code Playgroud)

或相反亦然

  • 仅当您希望端点对所有人开放时才执行此操作。您可以通过添加以下内容来允许您自己的域(和子域): SetEnvIf Origin "^(.*\.domain\.com)$" ORIGIN_SUB_DOMAIN=$1 标头设置 Access-Control-Allow-Origin "%{ORIGIN_SUB_DOMAIN}e “ env=ORIGIN_SUB_DOMAIN (2认同)

小智 5

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