有两个应用程序A和B。
A用于验证用户身份,并将token传递给B,B添加cookie。
每当 cookie 过期或经过很长一段时间或浏览器硬重置后,就会发生一些奇怪的事情。
没有提琴手:
用户点击应用 A 输入凭证,然后转到应用 B。浏览器会立即显示黑色“xxx 响应时间过长”错误屏幕,持续三秒钟,然后默认页面会“就地”呈现,并在不久后取代错误屏幕。这种情况发生在 cookie 过期或经过较长时间后。
与提琴手一起:(参见第 61、71 和 83 节)
当我在 Fiddler 中执行相同的场景时,我预计会出现黑色的“xxx 响应时间过长”屏幕,但我看到了带有打开的锁图标的证书错误屏幕。我关闭了三次。当我关闭 SSL 隧道错误时,默认用户页面正在呈现。
相关性大约与小提琴中的锁定对话框的时间相同,也是我收到黑色浏览器错误屏幕的位置,并且应用程序似乎正在后台加载,然后在完全加载后刷新。
我的想法是,A-->B 的 https-->http 请求被“部分”阻止,因为 B 仅支持 http,没有证书。开发人员告诉我,他们找不到 https 请求。
所以,我搞不清楚 SSL 隧道来自哪里(见屏幕截图)。我的想法是。
开发人员错过了一些东西,其中一个调用是 http。
尽管 IIS 服务器上没有 url 重写,但网络设备正在尝试将调用转换为 https。
什么原因会导致默认页面加载时出现黑色的“xxx 响应时间过长”?感觉就像请求在完全读取之前被更改或类似情况。
答案1
经过适当的调查,传入的请求虽然通过 http 传输,但其 Upgrade-Insecure-Requests: 标头设置为 1。这实际上导致以下事件根据 HSTS 或 HTTP 严格传输安全发生。
1. Initial http request results in a 307 - temporary redirect.
2. HSTS makes second https request.
a. The ssl certificate had expired on the dev web server.
b. It appears that HSTS catches the invalid certificate and issues another redirect, essentially downgrading to http.
3. Redirect to http successful.
解决方案:向网站添加有效的 SSL 证书绑定。
谜题在于,为什么浏览器在呈现回退到 http 响应之前呈现了常用的“请求耗时过长”错误页面。好吧,如果检查调用链,可以看到其中一个重定向(我猜是升级到 https)导致时间值(未知)。将鼠标悬停在记录上会显示附带的消息 - “无法在此处显示请求,因为发出该请求的页面已卸载”。也许浏览器将其解释为客户端断开连接或退出等待响应。(内部升级并请求 ssl,然后浏览器确定证书不好并放弃请求)回退到常用图像错误屏幕,而第二次重定向正在进行到成功的 http。
另一种观点是尝试升级然后降级。