使用 chrome.webNavigation API 时,以下代码(在扩展程序的后台页面中使用):
chrome.webNavigation.onCommitted.addListener(function(data) {
console.log('onCommitted', data.tabId, data.url);
});
chrome.webNavigation.onBeforeNavigate.addListener(function(data) {
console.log('onBeforeNavigate', data.tabId, data.url);
});
在导航到“http://drive.google.com”时产生此输出'
newTest.js:18 onBeforeNavigate 606 http://drive.google.com/
newTest.js:18 onCommitted 606 https://drive.google.com/
甚至在请求发送到服务器之前,Chrome 就将网址从 http 更改为 https。
这种行为也出现在其他情况下。例如'http://getpocket.com ',其中还添加了一条新路径:
newTest.js:18 onBeforeNavigate 626 http://getpocket.com/
newTest.js:18 onCommitted 626 https://getpocket.com/beta/
服务器端重定向全部发生在onCommissed之后,但在这种情况下,Chrome 甚至在向服务器发送请求之前就修改了网址。
此行为是否记录在某处,以便我可以预见地处理它?</p>
最佳答案
对于 Google 云端硬盘,它是 HTTP Strict Transport Security开始吧。
设置完成后,浏览器会自动将所有内容重定向到 HTTPS。
您可以在网络内部查看引擎盖下的内容,例如chrome://net-internals/#hsts
<小时/>static_sts_domain: drive.google.com
static_upgrade_mode: STRICT
对于 Pocket,这似乎是 301 Moved Permanently
重定向。
按照设计,浏览器会永久缓存此响应(至少 Chrome does )并自动重写链接,无需访问服务器,直到清除所述缓存。
关于javascript - chrome.webNavigation 的 onBeforeNavigate 和 onCommitted 之间的 URL 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33091123/