Cors 如何解决';飞行前无效(重定向)';或';飞行前请求不允许重定向';

Cors 如何解决';飞行前无效(重定向)';或';飞行前请求不允许重定向';,cors,preflight,Cors,Preflight,我已按照此步骤设置服务器以启用CORS。 但现在在我的浏览器开发控制台中,我看到以下错误消息: 无法加载XMLHttpRequest。回应 预飞无效(重定向) 你知道我能做些什么来修复它吗?我正在用HTTPS发出CORS请求。我认为这是导致“飞行前无效(重定向)”失败的原因。但我不知道为什么或者什么是重定向选项请求 谢谢。简短回答:确保代码中的请求URL没有缺少尾随斜杠。缺少尾随斜杠问题是问题中引用的错误的最常见原因 然而,这不是唯一的原因——这只是最常见的原因。请继续阅读以了解更多详细信息

我已按照此步骤设置服务器以启用CORS。

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

无法加载XMLHttpRequest。回应 预飞无效(重定向)

你知道我能做些什么来修复它吗?我正在用HTTPS发出CORS请求。我认为这是导致“飞行前无效(重定向)”失败的原因。但我不知道为什么或者什么是重定向选项请求


谢谢。

简短回答:确保代码中的请求URL没有缺少尾随斜杠。
缺少尾随斜杠问题是问题中引用的错误的最常见原因

然而,这不是唯一的原因——这只是最常见的原因。请继续阅读以了解更多详细信息

更长的回答: 当您看到此错误时,表示您的代码正在触发浏览器发送一条消息,服务器将以
3xx
重定向进行响应。为了避免错误,您的请求需要获得
2xx
成功响应

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

就本例所发生的一切而言,了解浏览器在以下情况下执行CORS预飞行是很重要的:

  • 请求方法不是
    GET
    HEAD
    POST
  • 您设置的自定义请求头不包括
    Accept
    Accept Language
    Content Language
    Content Type
    DPR
    Downlink
    保存数据
    视口宽度
    、或
    宽度
  • 内容类型
    请求标头的值不是
    应用程序/x-www-form-urlencoded
    多部分/表单数据
    文本/普通
如果您无法更改代码以避免浏览器进行预飞行,那么另一个选项是:

  • 在对
    选项
    请求的响应中,检查
    位置
    响应标题中的URL
  • 更改代码以直接向另一个URL发出请求
  • URL之间的区别可能很简单,比如路径中的一个尾随斜杠——例如,您可能需要将代码中的URL更改为
    http://localhost/api/auth/login/
    (注意后面的斜杠)而不是
    http://localhost/api/auth/login
    (无尾随斜杠)


    您可以使用浏览器devtools中的网络窗格来检查对
    选项
    请求的响应,并在
    位置
    响应头的值中查找重定向URL。

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

    ''

    应该是:

    “https://example.com/api/v2/tickets”


    首先,舒尔的标题中有“Access Control Allow Origin”:“*”

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

    例:

    至->


    在我的例子中,我不必将请求头设置为具有“访问控制允许源”:“*”。url必须以“/”结尾

    谢谢您的回答。我会听从你的建议。我的应用程序需要将内容类型application/json发送到服务器,以便触发飞行前测试。我无法改变这一点。我知道这已经过去了很多年,但这对我今天有所帮助。我的问题是缺少尾部斜线。非常感谢。我来这里是想说,这是后面的斜杠。这是在我尝试了很多东西,浪费了很多时间之后。希望其他人能更快地找到答案,并避免对自己尖叫“为什么它不起作用?!”在我的例子中,这也是尾随斜杠。这导致重定向到URL而不带尾随斜杠。那个重定向是不允许的。我也成了尾随斜杠的牺牲品。在我的例子中,我必须删除后面的斜杠。谢谢只有当您希望端点向所有人开放时,才可以这样做。您可以通过添加以下内容来允许自己的域(和子域):setenif Origin“^(.*\.domain\.com)$”Origin\u SUB\u domain=$1头集访问控制允许Origin“{Origin\u SUB\u domain}e”env=Origin\u SUB\u domain
    url: "https://facebook/api/login/"
    
    url: "https://facebook/api/login" (without '/')