问题描述

遇到了个诡异的事情。客户反馈他们想在线上 https 域名下,就是要访问 http 的链接,但是失败了。发出去的一直是 https 的 xhr 请求。

直接在控制台输入例子代码,就能看到 network 里发出去的链接的确是 https 的

var xhr = new XMLHttpRequest()
xhr.open("GET", "http://imapi.jiehun.com.cn/socket.io/1/?t=1668076877422", true)
xhr.send()

已知 XMLHttpRequest 对象控制台输出的的确是 native code,并不是被篡改了的,何解?

解答

参考 MDN 文档 HTTP Strict Transport Security

HTTP-Strict-Transport-Security(通常简称为 HSTS)响应标头用来通知浏览器应该只通过 HTTPS 访问该站点,并且以后使用 HTTP 访问该站点的所有尝试都应自动转换为 HTTPS。

语法

Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains
Strict-Transport-Security: max-age=<expire-time>; preload

检查得知客户的网站的确是设置了这个

查阅了下

max-age=
. 设置在浏览器收到这个请求后的

秒的时间内凡是访问这个域名下的请求都使用 HTTPS 请求。

includeSubDomains. 可选. 如果这个可选的参数被指定,那么说明此规则也适用于该网站的所有子域名。

preload. 可选. 查看 预加载 HSTS 获得详情。不是标准的一部分。

故而这个用户设置现在和未来的所有子域名会自动使用 HTTPS 连接长达一年。同时阻止了只能通过 HTTP 访问的内容。且启用了预加载服务。

preload 与预加载

谷歌维护着一个 HSTS 预加载服务。按照如下指示成功提交你的域名后,浏览器将会永不使用非安全的方式连接到你的域名。虽然该服务是由谷歌提供的,但所有浏览器都有使用这份列表的意向(或者已经在用了)。但是,这不是 HSTS 标准的一部分,也不该被当作正式的内容。

原文地址:http://www.cnblogs.com/everlose/p/16878088.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性