[英]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的那些请求。 顺便说一句,您不能在本地主机中使用自我分配的证书,它也会由于另一个错误而被阻止。
据我所知,这里做了一些挖掘工作。
HTTPS域到HTTP本地主机正确地导致CORS验证。 我相信我已经为服务正确配置了CORS。
但是,我认为浏览器在处理localhost时具有特定的行为,这导致了我的问题。
我在HTTPS上使用Rest test test,在HTTP上使用本地托管的JSON Server ,以在我的rest服务(Azure Functions)之外运行测试。
我正在将这些测试与JSONPlaceholder上的JSON Server的HTTPS托管版本进行比较 。
我正在做两种类型的测试,即简单测试和预检测试,因为它们会引起不同的行为。 Preflighted具有一个自定义标头,该标头在GET
之前导致一个OPTIONS
请求。
TL / DR:简单的预检请求在Firefox或Chrome上不起作用。
要允许混合内容(HTTPS中的HTTP)保护必须被禁用,否则什么也不会发生,并且控制台中显示Blocked loading mixed active content
错误。
但是,即使禁用了保护功能,Firefox也将继续阻止简单的预检请求。 对于预检请求,Firefox不会发出任何请求。 有关混合内容和CORS的警告显示在控制台中。
像Firefox,必须禁用保护以允许混合内容。
与Firefox一样,Chrome不会成功执行任何请求,但是会发出预检OPTIONS
。
TL / DR:在Chrome中,简单的预检请求有效。 对于Firefox,仅简单请求有效。
似乎Firefox和Chrome上已有一些工作,因此http://127.0.0.1/不被视为混合内容。 看起来WebKit / Safari的人群仍在考虑这一问题。
从Firefox 55开始,允许在http://127.0.0.1/上加载混合内容(请参见错误903966)。 Chrome浏览器允许http://127.0.0.1/和http:// localhost /上的混合内容。 Safari不允许任何混合内容。
根据上述测试,我不确定Chrome上的localhost是否为true(至少现在是)。
启用保护后,Firefox可以处理简单的请求。 预检请求仍然失败,但仅显示CORS警告(我不确定这可能是Firefox中的错误)。
启用保护后,简单的预检请求即可工作。
回到实现为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.