我已按照此步骤设置我的服务器以启用 CORS。https://learn.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api https://learn.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api
但现在在我的浏览器开发控制台中,我看到以下错误消息:
XMLHttpRequest 无法加载https://服务器地址/abc https://serveraddress/abc。回应
预检无效(重定向)
你知道我能做什么来解决它吗?我正在 HTTPS 中发出 CORS 请求。我认为这导致了“预检无效(重定向)”失败。但我不知道为什么或是什么重定向了 OPTIONS 请求。
谢谢。
简短回答:确保代码中的请求 URL 没有缺少尾部斜杠。
缺少尾部斜杠问题是问题中引用的错误的最常见原因。
但这不是only原因——只是最常见的。请阅读以获得更多详情。
当您看到此错误时,这意味着您的代码正在触发浏览器发送CORS 预检OPTIONS request https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests,并且服务器响应3xx
重定向。为了避免错误,您的请求需要获得2xx
相反,成功响应。
您也许可以调整代码以避免触发浏览器发送OPTIONS
要求。
就本例中发生的情况而言,了解浏览器在以下情况下执行 CORS 预检非常重要:
- 请求方法不是
GET
, HEAD
, or POST
- 您设置了除以下之外的自定义请求标头
Accept
, Accept-Language
, Content-Language
, Content-Type
, DPR
, Downlink
, Save-Data
, Viewport-Width
, or Width
- the
Content-Type
请求标头的值不是application/x-www-form-urlencoded
, multipart/form-data
, or text/plain
如果您无法更改代码以避免浏览器执行预检,另一个选择是:
- 检查中的 URL
Location
响应中的响应头OPTIONS
要求。
- 更改您的代码以直接向其他 URL 发出请求。
网址之间的差异可能就像路径中的尾部斜杠一样简单 - 例如,您可能需要更改代码中的网址以添加尾部斜杠 - 例如,http://localhost/api/auth/login/
(注意结尾的斜杠)而不是http://localhost/api/auth/login
(没有尾部斜杠)——或者您可能需要删除尾部斜杠。
您可以使用浏览器开发工具中的网络窗格来检查对OPTIONS
请求并在值中查找重定向 URLLocation
响应头。
但是,在某些情况下,以下所有情况均成立:
- 你无法避免飞行前检查
OPTIONS
- 您无法对请求 URL 进行任何调整
- 您无法将请求 URL 替换为完全不同的 URL
具有这些条件的常见情况是,当您尝试使用某些需要 OAuth 或 SSO 工作流程的第三方端点时,该工作流程不打算从前端代码中使用。
在这种情况下(实际上在所有情况下),需要认识到的是,对预检的响应必须来自前端代码发送请求的同一来源。
因此,即使您创建了您控制的服务器端代理:
- 如果您的浏览器发送预检
OPTIONS
向您的代理请求。
- 您已配置代理,使其仅将请求重定向到第 3 方端点。
- 因此,您的前端最终会直接从该第三方端点接收响应。
…那么预检就会失败。
在这种情况下,最终您唯一的选择是:确保预检不仅仅重定向到第 3 方端点,而是您自己的服务器端(代理)代码接收来自该端点的响应,使用它,然后发送响应它自己的返回到您的前端代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)