gpt4 book ai didi

jquery - CORS,在 Chrome v36 中工作,在 Chrome v37 中失败

转载 作者:行者123 更新时间:2023-12-01 01:45:33 25 4
gpt4 key购买 nike

我花了几天时间试图找出为什么当我从 Chrome v36.xxx 更新到 v37.yyy(特别是 37.0.2062.103 )时,我的 CORS 应用程序在 Chrome 中突然开始失败。在我的应用程序中,我运行一个 MVC 网站和一个不同端口上的 WebAPI。这就是跨域的用武之地。

我有几个实例(dev、uat、prod)都以相同的方式运行。都用来工作了。

XMLHttpRequest 无法加载http://"mywebapihost":"mywebapiport"/api/v1.0/myapp/。不请求中存在“Access-Control-Allow-Origin” header 资源。因此,不允许访问源 'http://"mymvchost"'。

似乎是预检中的 OPTIONS 请求存在问题 - 我在网上看到很多提到这一点。

但是 - 我觉得距离“修复”我的问题还没有任何距离(其中“修复”==能够在 Chrome 中运行)。

关于我的系统我可以说明的事情:

(1) 始终适用于 v36.xxx,但自 37.0.2062.103 更新后不再适用(2)在IE中工作(3) 即使在最新的 Chrome 中也适用于 GET(4) 即使在最新的 Chrome 中也能正常工作。如果我正在运行 Fiddler(我不认为这是一个修复!)

我已经尝试过了。

1) 强制调用 jQuery Ajax 调用中的 header ,以尝试获取 OPTIONS 调用的授权 - 来自网络的建议

beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization', make_base_auth("<username>", "<password>"));
},
headers: {
"Authorization": "Basic " + btoa("<username>" + ":" + "<password>")
}

2) 我下载了 Chrome Canary v39.0.2150.3,希望这个问题能够消失 - 仍然遇到同样的失败。

如果有人有任何建议,我将非常感激,我必须改为运行 IE 才能取得进步!

最佳答案

为了结束,我在这里回答我自己的问题。它可能会对将来的某人有所帮助。

我所做的是创建一个完全干净、最小化的 WebAPI 项目,它实现了 GET、PUT、POST 和 DELETE。我按预期工作,然后尝试跨域(同一服务器,但运行 JS Ajax 的网页在端口 80 上运行,WebAPI 在端口 7694 上运行)。

不出所料,这失败了。然后我使用所需的 nuget 包启用了 CORS,添加了

        config.EnableCors();

在 WebApiConfigcs 中。

在我的最小 WebAPI Controller 中,我添加了

[EnableCors(origins: "*", headers: "*", methods: "*", SupportsCredentials = true)]

所有这些都按预期进行。

但是,当我将相同的 Controller 等安装到现有的失败的 WebAPI 部署中时,它以引发我最初问题的方式失败。

所以它有配置的味道。

结果是通过清理我的 IIS 服务器和我正在部署的 WebAPI 项目的配置来修复这个问题。当我试图使飞行前 OPTIONS 请求起作用时,我对两者进行了太多的探索。

具体来说,在 Web.Config 中我添加了

  <system.web>
....
....
<!--<authentication mode="Windows" />-->
<authorization>
<deny users="?" />
<allow verbs="OPTIONS" users="?" />
</authorization>
</system.web>

<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
</customHeaders>
</httpProtocol>

当遵循网络上的建议时。

我删除了这两个内容,事情开始起作用。

我很欣赏这个答案有点模糊,但它可能会减轻我几天来的挫败感。

克里斯

关于jquery - CORS,在 Chrome v36 中工作,在 Chrome v37 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25765758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com