为什么我的 POST 请求在部署时被 CORS 阻止但它在本地工作

Why are my POST requests blocked by CORS when deployed but it works locally

我有一个 Angular 9 前端和一个 VB.NET Web API 2 后端。

当 运行 都在本地时它工作正常,但是当它们被部署时所有 POST 请求都被 CORS 阻止。 (GET 工作正常,尽管这似乎只是因为它们没有触发预检,因此 CORS 不相关。如果我在这个假设上有误,请纠正我!)

前端位于 mydomain.com,后端位于 api.mydomain.com 的子域上。 它们都托管在同一台服务器上(Godaddy 共享 Windows 托管,IIS 8 通过 Plesk)

我的web.config里有这个:

    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, OPTIONS" />
        <add name="Access-Control-Allow-Headers" value="Content-Type, Accept, authorization" />
      </customHeaders>
    </httpProtocol>
[...]
<handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>

Global.asax中的这个:

Protected Sub Application_BeginRequest()
    If Request.Headers.AllKeys.Contains("Origin") AndAlso Request.HttpMethod = "OPTIONS" Then
        Response.Flush()
    End If
End Sub

发送 POST 请求时,我在控制台中得到了这些:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://api.mydomain.com/xyz. (Reason: CORS preflight response did not succeed). Status code: 405.
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://api.mydomain.com/xyz. (Reason: CORS request did not succeed). Status code: (null).

如果我在浏览器开发工具的“网络”选项卡中检查 headers,请求中的“来源”header 与“access-control-allow-origin”header 在响应中。

为什么这不起作用,即使允许的原点设置为“*”? (改变这将是下一个有趣的问题......)

这似乎是一个常见问题,因为我已经阅读了无数 SA 问题和其他文章,但仍然找不到缺少的内容!

我又通读了一遍 one of the threads 我在之前的评论中提到的答案。

基本上从 web.config 中删除这一行:

<remove name="OPTIONSVerbHandler" />

我曾多次看到这个被提到 add 以使其工作,因为它默认存在于我的文件中,所以我从未接触过它。

据我了解,这会告诉 IIS 是处理选项请求还是将其留给您的代码。