是否存在阻止 HTTPs 升级的 IIS URL 规则?

问题描述 投票:0回答:1

我有一个网站,绝对必须保持通过 HTTP 而不是 HTTPS 提供位于网站两个特定子目录中的所有内容的能力,以保持对特定最终用户的向后兼容性。

有一天,一位用户向我报告,他们正在使用的一个页面停止工作,在进行了一些初步测试并收到其他用户的更多反馈后,如果出现以下情况,网络浏览器现在似乎会强制所有锚标记使用 HTTPS:在任何时候,用户访问当前域下的页面,并且该页面通过 HTTPS 提供服务(就像所有用户开始的登录屏幕一样)。

这现在已经成为一个非常成问题的问题,因为它破坏了我网站的核心功能,对于那些需要始终通过 HTTP 访问这两个目录的用户来说。作为一名 Web 开发人员,我知道最佳实践是在 SSL 下提供一切服务,但最佳实践和现实是两件不同的事情,而现实表明,目前这是不可能的。

我为我的 Chrome 浏览器用户找到了一个潜在的解决方法,它要求用户修改浏览器标志,虽然这样做的过程非常简单,但普通的日常用户不应该篡改浏览器的内部设置。对于 Firefox,我已经走进了死胡同。

我一直在关注 Chromium bug 网站 (https://bugs.chromium.org/p/chromium/issues/detail?id=1492782&q=http%20anchor&can=2) 上另一个人的报告,该报告描述了手头的问题。其中一篇帖子的回复 (#7) 指出了以下内容:

“如果站点不支持 HTTPS,建议关闭连接(不在端口 443 上响应)或提供 HTTP 30X 重定向回 HTTP。这两种方法都会导致 HTTPS 升级尝试回退到 HTTP . 升级页内链接是明确的预期行为。”

因此,我尝试创建如下所示的 IIS URL 规则,该规则表示如果请求尝试在 HTTPS 下访问该文件夹,则返回 404,希望浏览器能够遵循原始锚标记路径,但没有效果,因为页面仍在加载。

<rule name="Override HTTP Upgrade Browser Behavior" enabled="true" stopProcessing="true">
    <match url="https:\/\/(.*)\/httpOnlyFolder\/(.*)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    </conditions>
    <action type="CustomResponse" statusCode="404" subStatusCode="0" statusReason="Prevent browser from forcing HTTPS" statusDescription="404 Redirect to HTTP" />
</rule>

有没有办法通过 IIS 中的规则或修改 ASPX 页面后面的代码来捕获并强制仅加载页面的 HTTP 来解决此问题?

谢谢。

asp.net http iis https upgrade
1个回答
0
投票

您可以尝试如下所示的规则:

 <rule name="Redirect to HTTP" enabled="true" stopProcessing="true">
        <match url="^httpOnlyFolder\/.*" ignoreCase="true" />
        <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                        <add input="{HTTPS}" pattern="on" />
        </conditions>
        <action type="Redirect" url="http://{HTTP_HOST}/{R:0}" redirectType="Permanent" />
    </rule>

只是想与您分享,出于安全目的,使用 https 而不是 http 会更好。以后尝试将内容移至https。

© www.soinside.com 2019 - 2024. All rights reserved.