繁体   English   中英

为什么我从HTTPS域到HTTP本地主机的请求失败了CORS?

[英]Why are my requests from HTTPS domain to HTTP localhost failing CORS?

我有一个REST服务(实现为Azure功能),在域A上的HTTPS上运行。

我有一个网站,在域B的HTTPS上运行。

我为cors指定了通配符*。

我在网站上使用jQuery将Ajax请求发送到其余服务。 这行得通,我可以看到我的GET请求由OPTIONS进行了预检。

在此处输入图片说明

当我开发我的rest服务时,我想在本地主机上以HTTP运行的本地服务。 这似乎不起作用。

我必须启用混合内容,但是浏览器(Firefox)似乎并没有发送或预检我的请求-网络流量为空。 看来我的要求未能通过CORS要求。

这将显示在Firefox控制台中。

16:42:56.550 Loading mixed (insecure) active content "http://locahost:7071/api/test/get?message=get+hello+world!" on a secure page[Learn More] ajax.ts:153:23
16:42:56.558 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://locahost:7071/api/test/get?message=get+hello+world!. (Reason: CORS request did not succeed).

我可以通过将本地url设置为//locahost来避免混合内容错误,但是这仍然会使CORS失败。

发生这种情况是因为我正在尝试从HTTPS域到HTTP本地主机执行CORS吗?

此页面显示详细信息原因:默认情况下阻止混合内容。 https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content/How_to_fix_website_with_mixed_content

如果您未设置允许的域列表,则还必须启用本地https,不仅Firefox,而且Chrome和IE也会阻止从https到http的那些请求。 顺便说一句,您不能在本地主机中使用自我分配的证书,它也会由于另一个错误而被阻止。

据我所知,这里做了一些挖掘工作。

CORS

HTTPS域到HTTP本地主机正确地导致CORS验证。 我相信我已经为服务正确配置了CORS。

但是,我认为浏览器在处理localhost时具有特定的行为,这导致了我的问题。

测试

我在HTTPS上使用Rest test test,在HTTP上使用本地托管的JSON Server ,以在我的rest服务(Azure Functions)之外运行测试。

我正在将这些测试与JSONPlaceholder上的JSON Server的HTTPS托管版本进行比较

我正在做两种类型的测试,即简单测试和预检测试,因为它们会引起不同的行为。 Preflighted具有一个自定义标头,该标头在GET之前导致一个OPTIONS请求。

基础测试

禁用保护的Localhost上的浏览器行为

TL / DR:简单的预检请求在Firefox或Chrome上不起作用。

火狐

要允许混合内容(HTTPS中的HTTP)保护必须被禁用,否则什么也不会发生,并且控制台中显示Blocked loading mixed active content错误。

Firefox禁用保护

但是,即使禁用了保护功能,Firefox也将继续阻止简单的预检请求。 对于预检请求,Firefox不会发出任何请求。 有关混合内容和CORS的警告显示在控制台中。

Firefox在本地主机上测试

像Firefox,必须禁用保护以允许混合内容。

镀铬保护

与Firefox一样,Chrome不会成功执行任何请求,但是会发出预检OPTIONS

Chrome本地主机

启用保护的127.0.0.1上的浏览器行为

TL / DR:在Chrome中,简单的预检请求有效。 对于Firefox,仅简单请求有效。

似乎FirefoxChrome上已有一些工作,因此http://127.0.0.1/不被视为混合内容。 看起来WebKit / Safari的人群仍在考虑这一问题。

MDN文档具有此注释

从Firefox 55开始,允许在http://127.0.0.1/上加载混合内容(请参见错误903966)。 Chrome浏览器允许http://127.0.0.1/http:// localhost /上的混合内容。 Safari不允许任何混合内容。

根据上述测试,我不确定Chrome上的localhost是否为true(至少现在是)。

火狐

启用保护后,Firefox可以处理简单的请求。 预检请求仍然失败,但仅显示CORS警告(我不确定这可能是Firefox中的错误)。

127上的Firefox

启用保护后,简单的预检请求即可工作。

Chrome on 127

Azure功能

回到实现为Azure Functions的我的其余服务。 我以为我可以使用Chrome在127.0.0.1以上测试我的服务。

不幸的是,这也不起作用。

Azure Functions已硬编码localhost,并且似乎未响应127.0.0.1。 例如,我什至无法浏览127.0.0.1上的API,更不用说进行Web服务调用了。

需要一种替代方法,我尝试为HTTPS设置Azure功能。 如何在HTTPS上的Visual Studio中本地运行Azure函数?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM