很多人听说过也看到过 301、302,但是几乎从来没有看到过 303 和 307 的状态码。今天在淘宝首页看到了 307 状态码,于是摸索了一把。

中间人劫持

起因是这样,https 使用的是 443 端口进行数据传输,而浏览器的默认端口是 80. 劫持者首先劫持用户的 80 端口,当用户向目标页发起请求时,劫持者模拟正常的 https 请求向源服务器获取数据,然后通过 80 端口返回给用户,大概可以看下下面两张图:

用户一般不会在地址栏输入 //www.taobao.com,而是习惯性输入 taobao.com ,此时浏览器走的是 http,请求到达服务器之后,服务器告诉浏览器 302 跳转

Location: //www.taobao.com

然后浏览器重新请求,通过 HTTPS 方式,443 端口通讯。而正因为用户不是直接输入 // 链接,劫持者利用这一点:

只要能够劫持你的网络,比如路由劫持、DNS劫持,就可以作为中间人注入代码、替换广告。。。(上了 https 也拗不过电信,真是日了够了)

这种劫持出现在两种情况下:

  • 用户没有通过准确的方式访问页面,除非输入 // ,否则浏览器默认以 http 方式访问
  • HTTPS 页面的链接中包含 http,这个 http 页面可能被劫持

启用 HSTS

HSTS,HTTP Strict Transport Security,简单说就是强制客户端使用 HTTPS 访问页面。其原理就是:

  • 在服务器响应头中添加 Strict-Transport-Security,可以设置 max-age
  • 用户访问时,服务器种下这个头
  • 下次如果使用 http 访问,只要 max-age 未过期,客户端会进行内部跳转,可以看到 307 Redirect Internel 的响应码
  • 变成 https 访问源服务器

这个过程有效避免了中间人对 80 端口的劫持。但是这里存在一个问题:如果用户在劫持状态,并且没有访问过源服务器,那么源服务器是没有办法给客户端种下 Strict-Transport-Security 响应头的(都被中间人挡下来了)。

启用 HSTS 不仅仅可以有效防范中间人攻击,同时也为浏览器节省来一次 302/301 的跳转请求,收益还是很高的。我们的很多页面,难以避免地出现 http 的链接,比如 help 中的链接、运营填写的链接等,这些链接的请求都会经历一次 302,对于用户也是一样,收藏夹中的链接保存的可能也是 http 的。

307 状态码

在 GET、HEAD 这些幂等的请求方式上,302、303、307 没啥区别,而对于 POST 就不同了,大部分浏览器 都会302 会将 POST 请求转为 GET,而 303 是规范强制规定将 POST 转为 GET 请求,请求地址为 header 头中的 Location,307 则不一样,规范要求浏览器继续向 Location 的地址 POST 内容。

而在 HSTS 中,307 可以被缓存,缓存时间根据 max-age 而定,一般建议缓存 1 年甚至更长。

HSTS 存在的坑

  • 纯 IP 的请求,HSTS 没法处理,比如 http://2.2.2.2 , 即便响应头中设置了 STS,浏览器也不会理会(未测试)
  • HSTS 只能在 80 和 443 端口之间切换,如果服务是 8080 端口,即便设置了 STS,也无效(未测试)
  • 如果浏览器证书错误,一般情况会提醒存在安全风险,然是依然给一个链接进入目标页,而 HSTS 则没有目标页入口,所以一旦证书配置错误,就是很大的故障了
  • 如果服务器的 HTTPS 没有配置好就开启了 STS 的响应头,并且还设置了很长的过期时间,那么在你服务器 HTTPS 配置好之前,用户都是没办法连接到你的服务器的,除非 max-age 过期了。
  • HSTS 能让你的网站在 ssllab 上到 A+(这不是坑)

小结

本文简单说明了 HSTS 的基本原理和相关内容,他在全站 https 下有一个较大的正向作用,推荐使用。

P.S:在 Chrome 中打开 chrome://net-internals/#hsts,添加域名之后,可以让浏览器强制对该域名启用 https,所有的 http 请求都会内部转到 https。

chrome强制使用HSTS原理相关推荐

  1. 浏览器渲染机制面试_面试官不讲码德,问我Chrome浏览器的渲染原理(6000字长文)...

    前言 对于HTML,css和JavaScript是如何变成页面的,这个问题你了解过吗?浏览器究竟在背后都做了些什么事情呢?让我们去了解浏览器的渲染原理,是通往更深层次的开发必不可少的事情,能让我们更深 ...

  2. Mac chrome强制刷新浏览器缓存、firefox强制刷新浏览器缓存

    1.chrome强制刷新浏览器缓存 普通刷新:command +r 强制刷新:command+shift+r 删除cookie等:command+shift+del 点击[清除数据]按纽,注意勾选的选 ...

  3. 温室大棚风机湿帘强制降温系统原理

    一转眼就已经步入了2020年的下半年,我的思路还一直停留在五一放不放假,去哪里玩.直到天气的炎热才把我拉入了现实,今天已经7月6号了.废话不多说,言归正传,今天来聊下风机和湿帘的降温原理,简单说就是湿 ...

  4. chrome强制夜间模式、新标签页

    IT之家10月23日消息 Windows,macOS,Linux,ChromeOS,Android和iOS版的Google Chrome 78浏览器正式版已经推出,用户可以下载体验. Chrome 7 ...

  5. chrome强制刷新,非ctrl+f5

    开发时,经常有ctrl+f5无法做到真正的强制刷新,以下可以帮到你 Ctrl+Shift+Del 清除Google浏览器缓存的快捷键 Ctrl+Shift+R 重新加载当前网页而不使用缓存内容 转载于 ...

  6. 【C语言】强制类型转换的原理

    文章目录 一.对指针进行强制类型转换 1.1printf打印时的转换形式 1.2用指针操作符的转换形式 1.3总结 二.对变量进行强制类型转换 2.1 我们可能见到的形式 2.2 标准形式 2.3总结 ...

  7. Mac技巧:Chrome强制开启黑暗模式

    开启方法 1.打开 Chrome,或基于 Chromium 的浏览器: 2.在URL处输入 chrome://flags/#enable-force-dark Edge:edge://flags/#e ...

  8. Chrome浏览器的渲染原理

    正文 Vue Vue2.0:Vue2.0 文档 Vue3.0:Vue3.0 文档 Vue-Router:Vue.js 官方的路由管理器. Vuex:Vue.js 应用程序开发的状态管理模式. Elem ...

  9. 你的微博也被盗赞?试试HSTS强制HTTPS加密

    微博账户被盗赞或被动加关注的问题,可能很多用户都遇到过,每天都会发现自己的账户莫名其妙关注或点赞了几十个营销号.广告号.明星号的微博,挨个取消被盗的关注和赞,竟然成了日常最主要的微博操作,很多用户对此 ...

最新文章

  1. 2_tabbar底部切换
  2. 光模块的分类与HBA卡的区别
  3. execCommand全集
  4. RegexDemo6
  5. 09-Windows Server 2012 R2 会话远程桌面-标准部署-使用PowerShell进行部署2-2
  6. 微软 WPF 框架源码现已托管至 GitHub
  7. web工作流管理系统开发之十六 主子流程参数传递的实现
  8. oracle应用程序开发,关于Oracle 数据库应用程序开发问题
  9. 10.Linux 高性能服务器编程 --- 信号
  10. android带杜比音效的播放器,杜比音乐播放器(杜比音效)
  11. Android Studio实现百度地图定位
  12. Bitlocker加密到一半怎么停止?
  13. 16bit的pcm双声道转单声道
  14. npm ERR! fatal: unable to access ‘https://github.com/adobe-webplatform/eve.git/‘: OpenSSL SSL_read:
  15. python 地图偏移_python 地图经纬度转换、纠偏的实例代码 百度地图经纬度web纠偏怎么用...
  16. vb.net在自己的应用中嵌入谷歌地球的方法
  17. 第06讲 连接到MySQL数据库02之jdbc
  18. 华为od机考真题-HJ95人民币转换(较难)
  19. 星辰变中第四个鸿蒙,我吃西红柿构造的鸿蒙金榜上,为何第四位鸿蒙掌控者迟迟不出来?...
  20. Mathematica+Matlab联合使用实现可视化、交互编程

热门文章

  1. 【AtCoder】ARC 081 E - Don't Be a Subsequence
  2. Facebook宣布进一步推广Live Video功能
  3. 类火墙的iptables
  4. QT Creator 环境使用 remote debug 调试 arm 程序
  5. Docker mysql
  6. 关于android的日志输出LogCat
  7. 占用51cto。记录自己
  8. Android程序员必备精品资源
  9. 最火的开源项目及编程语言
  10. 说话人识别----技术挑战点