HSTS(HTTP Strict Transport Security)
简单说就是强制客户端使用 HTTPS 访问页面。其原理就是:
- 在服务器响应头中添加 Strict-Transport-Security ,可以设置 max-age
- 用户访问时,服务器种下这个头 // Strict-Transport-Security 头信息当通过HTTP请求传递,会被浏览器忽略;
- 下次如果使用 http 访问,只要 max-age 未过期,客户端会进行内部跳转,可以看到 307 Redirect Internel 的响应码
- 变成 https 访问源服务器
启用 HSTS 不仅仅可以有效防范中间人攻击(如80端口劫持),同时也为浏览器节省来一次 302/301 的跳转请求
301重定向是永久的重定向(Moved Permanently),表示本网页永久性转移到另一个地址,搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址。302重定向是临时的重 定向(Moved Temporarily),表示本网页暂时性转移到另一个地址,搜索引擎会抓取新的内容而保留旧的网址。
在 GET、HEAD 这些幂等的请求方式上,302、303、307 没啥区别,而对于 POST 就不同了,大部分浏览器 都会302 会将 POST 请求转为 GET,而 303 是规范强制规定将 POST 转为 GET 请求,请求地址为 header 头中的 Location,307 则不一样,规范要求浏览器继续向 Location 的地址 POST 内容。301 307多可以被缓存。
纯 IP 的请求,HSTS 没法处理
HSTS 只能在 80 和 443 端口之间切换(未测试)
chrome://net-internals/#hsts
// 幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。