精读《图解HTTP》

前言

做为一个前端,若是可以深入理解 HTTP 通讯,可以让咱们在平常开发工做中快速定位问题。因此我十分建议你们去读一下《图解HTTP》和《HTTP权威指南》。权威指南讲解的十分详细,内容也十分的全面,可是这本书的厚度也让不少同窗望而却步。推荐你们从 《图解HTTP》 这本书开始学习,这本书虽然没有权威指南详细,但涵盖了不少咱们平常开发须要的知识点,理解他,能让咱们的开发效率事半功倍。javascript

《图解HTTP》这本书对互联网基盘—— HTTP 协议进行了全面系统的介绍。做者从 HTTP 发展史开始,严谨地剖析了 HTTP 协议的结构,列举不少常见通讯场景及实战案例,最后延伸到Web安全、最新技术动向等方面。经过书中大量生动形象的通讯图例,咱们可以更全面地理解 HTTP 通讯过程当中客户端与服务器之间的交互状况。在读这本书的过程当中我收获颇多,并用思惟导图的方式记录下来,方便本身后期温故。若是你恰好没有读过,能够当作度这本书的预习阅读,相信你也会有所收获(思惟导图图片可能有点小,记得点开看)前端

了解 HTTP 协议访问 Web

这一章介绍了 Web 及网络协议的基础,http 通信被拆分红四层,应用层,传输层,网络层和链路层,每层只要考虑分派给本身的任务,不须要弄清整个协议链路的细节。应用层使咱们肉眼能看见的,咱们经常使用的 http 协议和 FTP 协议就处在这一层,往下就是传输层,TCP/IP 协议工做的地方(咱们的IP是IP地址,和这里的IP 协议有作区分),再往下是网络层,传输层创建链接以后,网络层负责将数据包的传输(数据包是网络传输的最小单位)。最后是链路层,用来链接网络配件的部分,举个栗子就是咱们常说的网卡啊,光纤啊。在一个完整的数据传输中,客户端会按照应用层,传输层,网络层,链路层的顺序进行进行处理,每一层都会加一个首部,服务器端在接收的时候按照链路层,网路层,传输层,应用层的顺序去移除首部。java

咱们常说的3次握手就是 TCP 协议采用的策略,为了传输方便,TCP 将大数据分割成以报文为单位的数据包,IP 协议负责把数据包发送出去。在发送的过程当中经常须要通过多个路由器的中转,这个时候会运用 ARP 协议来查找下一个路由器的地址。git

一般用户的习惯会去访问域名而不是IP地址,将域名解析成对应的 IP 就须要用到 DNS 协议域名解析的服务。github

简单的 HTTP 协议

平常开发中咱们感知不到 http 协议的底层实现,咱们所了解的 HTTP 协议老是由客户端发起,服务端接收。咱们关注到的请求,经常是请求的URI,协议版本,头部信息,及内容实体,咱们常使用的响应信息则包括了响应状态,响应内容。web

咱们经常会使用不通的 http 方法来执行不一样的操做。咱们常使用 GET 来获取资源,使用 POST 传输实体主题,使用 PUT 传输文件,使用 DELETE 删除文件,使用 OPTIONS 询问支持的方法(经常在跨域的场景中使用),使用TRACE 获取访问路径,使用 CONNECT 用隧道协议连接代理。算法

http 协议是一种无状态协议,不会去记录上一次访问状态,这使得当咱们要作相似于登陆这样的公能的时候,须要经过 cookie 来进行状态的管理。跨域

HTTP 报文内的 HTTP 信息

一般HTTP报文(用于HTTP协议交互的信息)的结构包括,请求行,状态行,首部字段等,从 HTTP 的报文中,咱们能够得到不少信息。在 MIME 扩展中会使用一种称为多部分对象集合的方法,来容纳多份不一样的数据类型, 在 HTTP 报文中使用多部分对象时,须要在首部字段上加上 Content-type 。

经过设置首部字段,来达到获取部份内容范围请求(请求资源中断后,不须要从新开始请求),将传输内容编码的目的,来提升加载效率。浏览器

有的时候不一样的场景须要咱们获取不一样的内容,就好比页面的中英文切换的功能,在HTTP请求中,咱们经过设置 accept 类的请求头字段实现,也就是内容协商的方式,返回最合适的内容。协商方式分为,服务器驱动协商,客户端驱动协商,透明协商。缓存

返回结果的 HTTP 状态

在HTTP通信中,经过转态码,告知客户端的请求状态。状态码大体能够被分为 5 大类,1xx 表示接受的请求正在处理,2xx 表示请求正常处理完毕,3xx 表示须要进行附加操做以完成请求,4xx 表示客户端没法处理请求,5xx 表示服务器处理出错。

在这5大类请求中,咱们经常使用的十几种状态码,须要咱们重点去掌握,详细介绍看👆的思惟导图。

与 HTTP 协做的 Web 服务器

经过使用虚拟机,能够实现单台主机多个域名的站点部署。在实际通信中,咱们经常使用,代理,网关,隧道协助请求转发,安全通讯。

为了提升网站性能,咱们会使用缓存方式来提升站点请求速率,一般是经过设置代理服务器缓存和客户端缓存来实现。须要注意的是,缓存都会设置一个过时时间,站点内容更新时,缓存内容也须要及时更新。

HTTP 头部

在请求中,HTTP 报文由请求方法,URI,HTTP版本,HTTP 首部字段等部分构成。在响应中,HTTP 的报文有 HTTP 版本,状态码,HTTP首部字段3部分构成。首部信息尤其重要,咱们能够经过首部字段的设置来传递请求信息,类比于缓存控制,报文建立时间,是否压缩编码,是否支持跨域等。

确保 Web 安全的 HTTPS

HTTP 简单灵活的设置也造就了他的缺点。1. 通讯使用明文,内容可能被窃听。二、不验证通信方省份,所以有可能会遭遇假装。三、没法证实报文的完整性,全部有可能被篡改。HTTPS 其实也不算是一个全新的协议,HTTPS = HTTP + 加密 + 认证 + 完整性保护。HTTPS 完善了 HTTP 的相关缺点,在 HTTP 的部分通讯接口采用 SSL 和 TLS 协议替代,使用了数字证书认证机构和其余相关机关颁发的公开秘钥证书

何为认证

HTTP 的认证方式一般是 BASIC认证(基本认证),DIGEST认证(摘要认证),SSL 客户端认证,FormBase 认证(基于表单认证)。BASIC 认证和 DIGEST 认证经过首部字段 Authorization 确认认证信息,SSL 借由 HTTPS 客户端证书完成认证方式。 表单认证则是依赖于 cookie 保存用户的登陆状态。

基于 HTTP 的功能追加协议

SPDY 在TCP/IP 的应用层与运输层之间经过新加会话层的形式运做,使用 SPDY 使得 HTTP 协议的功能获得了扩展,实现了多路复用流,赋予请求优先级,压缩 HTTP 首部,推送功能,服务器提醒功能。

使用 WebSocket 进行全双工通讯,只要创建了连接,客户端和服务器都能都主动得向对方发送信息。和 HTTP 相比,减小了每次创建链接的开销,减小了通讯首部信息。

HTTP/2.0 改善了使用 web 时的速度体验。

构建 Web 内容的技术

web 应用开发语言的三剑客,HTML,CSS,javascript 。书出版的有点久因此书中没有提到,如今火爆的 web 构建技术,Vue,React 等流行前端框架。XML,JSON 数据发布语言,其中 JSON 比较经常使用,平常开发都离不了他。

web 的攻击技术

在 Web 应用中,从浏览器那接收到的 HTTP 请求的所有内容,均可以在客户端自由的变动、篡改,在HTTP请求报文中加载攻击代码,就能发起对 Web 应用的攻击。Web 应用的攻击模式主要是主动攻击和被动攻击。

常见的攻击方式有,跨站脚本攻击,SQL 注入攻击,HTTP 首部注入攻击。这些攻击形成的影响见👆思惟导图。一般简单的 HTTP 协议自己不会存在安全性的问题,协议自己也不会成为攻击对象,黑客利用的经常是由于设计和设置上的缺陷,会话管理疏忽等引起的安全漏洞进行攻击。

😊往期的读书笔记

《图解HTTP》这本书读完啦,下一期咱们来读读《HTTP权威指南》,我在 github 建了仓库放这些思惟导图的原件,若是以为图片不清晰,同窗们能够去 github 上下载查阅。若是你也喜欢用思惟导图的方式来记录读书笔记,也欢迎和我一同维护这个仓库,欢迎留言或则微信(646321933)与我交流

精读《你不知道的 javascript(上卷)》

精读《你不知道的javascript》中卷

精读《深刻浅出Node.js》

javascript 垃圾回收算法

思惟导图下载地址

《图解HTTP》 PDF下载地址

相关文章
相关标签/搜索