ASP.Net 核心应用程序:*有时*在 MSVC 调试器 (iis express) 中被 CORS 策略阻止;部署到 IIS 7 时工作正常

ASP.Net Core app: *sometimes* blocked by CORS policy in MSVS debugger (iisexpress); works OK when deployed to IIS7

我有一堆相同 ASP.NET 核心应用程序的不同版本。我的工作站有 MSVS 2019。我的 DEV 和 PROD 服务器是 Windows Server 2012/IIS7。

该应用程序已经存在多年。它 NOT 做任何事情来显式启用 CORS。 NOT 调用 Services.AddCors()、app.UseCors()、policy.WithOrigins()、[EnableCors] 或类似的东西。

大多数时候,它“正常工作”。

但是有时(就像现在一样),当我在 MSVS 2019 调试器中 运行 时,尝试访问 FontAwesome 时出现 CORS 错误:

Chrome developer tools console:

Access to CSS stylesheet at 'https://use.fontawesome.com/releases/v5.7.0/css/all.css' from origin 'https://localhost:44342' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

出现问题时, 在我的工作站上的 MSVS 2019 调试器 (iiexpress) 中。它从不 出现在任何 PROD 或 DEV 服务器上。

令人困惑的是——据我所知——“没有任何改变”。我的项目昨天都成功了。但是他们今天都在 FA CSS 上遇到了 CORS 错误。和远程 IIS 服务器... 运行使用相同的应用程序...工作正常...在相同的浏览器中!

这是来自其中一个“不良”页面的 header:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.0/css/all.css" integrity="sha384-lZN37f5QGtY3VHgisS14W3ExzMWZxybE1SJSEsQp9S+oqd12jhcu+A56Ebc1zFSJ" crossorigin="anonymous">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js" integrity="sha256-4iQZ6BVL4qNKlQ27TExEhBN1HFPvAvAMbFavKKosSWQ=" crossorigin="anonymous"></script>
    <script src="https://unpkg.com/gijgo@1.9.13/js/gijgo.min.js" type="text/javascript"></script>
    <link href="https://unpkg.com/gijgo@1.9.13/css/gijgo.min.css" rel="stylesheet" type="text/css" />

    <script src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>
    <script src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap4.min.js"></script>
    <script src="https://cdn.datatables.net/plug-ins/1.10.25/sorting/datetime-moment.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.css" rel="stylesheet" type="text/css" />
    <link href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap4.min.css" rel="stylesheet" type="text/css" />
</head>

不想修改应用程序(如果我能避免的话),只是因为我不想冒险破坏“永远”存在的代码。

喜欢弄清楚我工作站环境中可能发生的变化,以便我可以“修复”它。

或者我可以使用与 FontAwesome 不同的 link?

问:有什么建议吗?

解决方法:

  1. 这个 link 描述了基本问题 - 但我无法从“curl”获得任何有用的信息:
  1. 我可以通过更改所有 ASP.Net 布局来解决这个问题:

    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.0/css/all.css" integrity="sha384-lZN37f5QGtY3VHgisS14W3ExzMWZxybE1SJSEsQp9S+oqd12jhcu+A56Ebc1zFSJ" crossorigin="anonymous">
    

    为此:

    @*<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.0/css/all.css" integrity="sha384-lZN37f5QGtY3VHgisS14W3ExzMWZxybE1SJSEsQp9S+oqd12jhcu+A56Ebc1zFSJ" crossorigin="anonymous">*@
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.11.2/css/all.css" />
    

    结果: 有效:

    没有 CORS 错误; FontAwesome 图标在 MSVS 上成功显示。再次.

问:???为什么???

问:关于如何准确排除第一个 FA 问题的任何建议 link?

  • 为什么它在“昨天”工作...但在“今天”开始失败?
  • 为什么 ALWAYS 在 Windows/IIS7 (http) 上工作,但 SOMETIMES 在 MSVS/iisexpress (https/localhost)?

来自客户端请求的某些东西 and/or 客户端环境肯定会影响特定 FA 服务器是否决定阻止请求。我绝对想更好地理解“什么”。

问:有任何 thoughts/suggestions/further 故障排除提示吗?

<link> 元素中的 crossorigin="anonymous" 导致浏览器使用 CORS 请求加载样式表。如果没有该属性,样式表可以从没有 CORS 的任何来源加载。

也许删除该属性对您来说是一种解决方法,因为 fontawesome.com 确实似乎偶尔会忽略 CORS 请求中的 Access-Control-Allow-Origin header(以及 Content-Type header).我在其中找不到模式。