背景
http 状态码有哪些, 这也是一个很高频的面试问题
一般大家都知道 404 页面不存在, 500 服务器错误, 301 重定向, 302 临时重定向, 200ok,401 未授权啥的
如果只是简单的这样答, 可能只能让面试官给你的答案打个五六十分, 不足以给面试官留下良好的印象, 为了展现自己良好的 http 知识, 你或许可以重点介绍三个状态码及相关的知识, 他们分别是 304 协商缓存, 101 协议升级, 以及 307hsts 跳转
304 协商缓存
先从 304 协商缓存开始吧这是比较基础的知识相信我, 只要你提起 304 协商缓存, 面试官一定会忍不住问你, 什么是协商缓存?
这时就到了你展示一下自己丰富的浏览器缓存知识的时候了我一般会这么答: 浏览器缓存分为强制缓存和协商缓存, 优先读取强制缓存
强制缓存分为 expires 和 cache-control, 而 expires 是一个特定的时间, 是比较旧的标准和 cache-control 通常是一个具体的时间长度, 比较新, 优先级也比较高
而协商缓存包括 etag 和 last-modified,last-modified 的设置标准是资源的上次修改时间, 而 etag 是为了应对资源修改时间可能很频繁的情况出现的, 是基于资源的内容计算出来的值, 因此优先级也较高
协商缓存与强制缓存的区别在于强制缓存不需要访问浏览器, 返回结果是 200, 协商缓存需要访问服务器, 返回结果是 304
101 协议升级
主要用于 websocket, 也可以用于 http2 的升级
websocket 的特点和功效不细说, 大家都很熟了
http2 好处多多, 一般说出支持单个连接多次请求, 二进制, 压缩头部, 服务器推送等特征面试官就比较满足了具体了解也是自行谷歌百度, 这里也是不细说
当然这时候我们可能要应对一下面试官接下来的追问: 到底 https,http,http2 以及它的原形 spdy 有什么区别, 又分别有什么优点和不足, 他们的建立连接分别又有着什么环节, 这些知识就需要读者自己去充分搜索查询了
307 hsts 跳转
这个比较高端, 原本的用法是用于让 post 请求的跳转去新的 post 请求, 但也用于 hsts 跳转
hsts 全称 HTTP 严格传输安全 (HTTP Strict Transport Security, 縮寫: HSTS), 功能是要求浏览器下次访问该站点时使用 https 来访问, 而不再需要先是 http 再转 https 这样可以避免 ssl 剥离攻击, 即攻击者在用户使用 http 访问的过程中进行攻击, 对服务器冒充自己是用户, 在攻击者和服务器中使用 https 访问, 在用户和服务器中使用 http 访问
具体使用方法是在服务器响应头中添加 Strict-Transport-Security, 可以设置 max-age
当然, 提到了 ssl 剥离攻击, 你一定很感兴趣还有什么方法可以对号称安全的 https 进行攻击呢? 我这里了解到的有 ssl 劫持攻击, 大概就是信任第三方的安全证书, 这点被利用于代理软件监听 https 如果还有更多的, 欢迎补充
总结
仅仅三个状态码, 都可以牵涉到如此丰富的知识, 对于状态码, 我们不能只是片面的去背诵状态码及对应的含义, 要去主动挖掘, 深入, 借助 http 状态码来建立自己的网络体系
留一个课后作业: 301 和 302 有什么区别? 分别适用于什么场景? 你还会只去记一个是永久重定向, 一个是临时重定向吗?
最后, 如果我的文章对你有帮助, 欢迎关注和 star 本博客或是关注我的 github
参考
知道你们很懒, 帮你们搜索好了相关资料
浅谈浏览器 http 的缓存机制
http2 讲解
HTTP,HTTP2.0,SPDY,HTTPS 你应该知道的一些事
你所不知道的 HSTS
关于启用 HTTPS 的一些经验分享 (一)
来源: https://juejin.im/entry/5aa94a1ff265da238b7db7a4