谷歌浏览器 65 CORS 问题

Posted

技术标签:

【中文标题】谷歌浏览器 65 CORS 问题【英文标题】:Google Chrome 65 CORS issue 【发布时间】:2018-09-05 23:45:07 【问题描述】:

我工作的公司有两个 Web 应用程序,并且都有自己的 Web Api。客户端项目是用 AngularJs(1.6.9 版)编写的。自从 Google Chrome 65 更新以来,我公司访问 Web API 的 Web 应用程序在执行 POSTPUT 方法时不再工作。 GET 方法工作正常。

这是我从 Chrome 65 开始在本地运行我的 Web 应用程序时尝试使用 PUT 方法更新现有记录时开始收到的错误消息:

PUT方法代码sn-p

managerFactory.updateIncidentRole = function (serviceUrl, data) 
    return $http.put(serviceUrl + 'api/Manager/UpdateIncidentRole', data);
;

由于我们的 Web 应用在 Chrome 65 更新之前运行良好,因此我从 chrome 65 的发布页面开始对此问题进行调查,我注意到一些人评论说 CORS 不适用于他们的系统。

我看到的第一条评论:

我遇到的第二条评论:

以下代码 sn-ps 是两个 Web Api 的配置方式:

WebApiConfig.cs

var cors = new EnableCorsAttribute("*", "*", "*")  SupportsCredentials = true ;
config.EnableCors(cors);

Web.config

  <system.web>
    <authentication mode="Windows" />
    <identity impersonate="true" />
  </system.web>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false" />
        <handlers>
          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <remove name="TRACEVerbHandler" />
          <remove name="OPTIONSVerbHandler" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
    </system.webServer>

Angular 模块配置使用 $httpProvider 为 $http 请求提供凭据

$httpProvider.defaults.withCredentials = true;

由于过去一周我一直在谷歌搜索 CORS,试图了解可能缺少的内容,以便让 Web 应用再次在 Google Chrome 上运行。

根据我提供的信息(我很乐意根据要求提供更多信息)缺少什么?

【问题讨论】:

【参考方案1】:

您可以安装 IIS Cors 模块并对其进行配置

https://www.iis.net/downloads/microsoft/iis-cors-module

【讨论】:

我点击了您的链接并从下载中运行了该应用程序。我在安装过程中收到以下错误消息;此产品未成功安装:必须安装 IIS 7.0 CoreWebEnginer 和 W3SVC 功能才能使用 Microsoft CORS 模块。

以上是关于谷歌浏览器 65 CORS 问题的主要内容,如果未能解决你的问题,请参考以下文章

解决win10系统打开谷歌浏览器(Google Chrome 版本:65.0.3325.181)第一

由于CORS政策,谷歌oAuth的角度请求失败

谷歌浏览器chrome里的flash提示过期

如何修复:谷歌浏览器的 CORB 块(Axios 请求)

谷歌浏览器的高级 REST 客户端如何进行跨域 POST 请求?

如何处理浏览器的跨域问题