图解HTTP读书笔记

1.1 http的概念及历史版本

http的概念: 超文本传输协议,当年http的出现主要是为了解决文本传输的难题。
http版本: HTTP/0.9、HTTP/1.0 、HTTP/1.1。其中HTTP/1.1是目前主流的HTTP协议版本。

1.2 TCP/IP

TCP/IP: 是互联网相关的各类协议族的总称。

截图1.png

TCP/IP协议族按层次分别分为以下四层: 应用层、传输层、网络层和数据链路层。

应用层: 应用层决定了向用户提供应用服务时通信的活动。TCP/IP协议族内预存了各类通用的应用服务。比如,FTP(文件传输协议)和DNS(域名系统)服务就是其中两类;HTTP协议也处于该层。
传输层: 传输层对上层应用层提供处于网络连接中的两台计算机之间的数据传输。传输层有两个性质不同的协议TCP和UDP。
网络层: 网络层是用来处理网上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方的计算机(所谓的传输路线),并把数据包传给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路径。
链路层:用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(网络适配器即网卡),及光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内。

1.3 TCP/IP通信传输流
截图2.png

利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用往下走,接受端则从应用层往上走。

截图3.png

发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接受端在层与层传输数据时,每经过一层时会把对应的首部去掉。

1.4 与HTTP关系密切的协议IP、TCP和DNS
IP协议

IP协议:按层次分IP网际协议位于网络层。TCP/IP协议族中的IP指的就是网级协议。 IP协议的作用是把各种数据包传送给对方。
IP地址:指明节点被分配到的地址,可变换。
MAC地址:是指网卡所属的固定地址,MAC地址基本不会更改。

使用ARP协议凭借MAC地址进行通信

IP间的通信依赖MAC地址。在网络上,通信的双方在同一局域网内的情况很少,通常是经过多台计算机和网络设备中转才能连接到对方。而在进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时,会采用ARP协议。ARP协议是一种以解析地址的协议,根据通信的双方的IP地址就可以反查出对应的MAC地址。

截图4.png
TCP协议

TCP协议:按层次分,TCP位于传输层,提供可靠的字节流服务。
字节流服务:为了方便传输,将大块数据分割成报文段为单位的数据包进行管理。

TCP协议为了更容易传送大数据才进行分割,而且TCP协议能够确认数据最终是否送达到对方。

确保数据能到达目标

为了准确无误地将数据送达目标处,TCP协议采用了三次握手策略。用TCP协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是是否成功送达。

三次握手的过程

握手过程中使用了TCP的标志(flag)SYN和ACK。

发送端首先发送一个带SYN标志的数据包给对方。接受端收到后,回传一个带SYN/ACK标志的数据包以示传达确认信息。最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束。若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包

截图5.png
DNS服务

DNS服务:按层次分,位于应用层的协议,它提供域名到IP地址之间的解析服务。

截图6.png

1.5 各种协议和HTTP协议的关系
截图7.png

2. HTTP协议

HTTP协议:HTTP协议和TCP/IP协议族内的其他众多的协议相同,用于客户端和服务器之间的通信。

请求访问文本或者图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端。

请求报文: 请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。

截图8.png

响应报文:响应报文基本上是由协议版本、状态码、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。
截图9.png

2.1 HTTP是不保存状态的协议

HTTP是一种不保存状态,即无状态协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或者响应都不做持久化处理。


截图10.png
2.2请求URI定位资源

HTTP协议使用URI定位互联网上的资源。当客户端请求访问资源而发送请求是,URI需要将作为请求报文包含在内。

请求URI的方式

a. URI为完整的请求URI
截图11.png
b.在首部字段Host中写明网络域名或者IP地址
截图12.png
2.3 HTTP请求的方法
  • GET: 获取资源
  • POST: 传输实体
  • PUT: 传输文件
  • HEAD: 获得报文首部
  • DELETE: 删除文件
  • OPTION: 询问支持的方法
2.4 持久连接节省通信量

HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接。


截图13.png
持久连接

为了解决TCP连接问题,HTTP/1.1和一部分的HTTP/1.0想出了持久连接(也称为HTTP keep-alive)的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。

截图14.png

持久连接旨在建立1次TCP连接后进行多次请求和响应的交互

持久连接的优点: 减少TCP连接的重复建立和断开所造成的额外开销,减轻服务器的负载。另外,减少开销的那部分时间,使HTTP请求和响应能够更早结束,这样客户端响应的速度也提高了。

2.5 管线化

持久连接使得多数请求以管线化方式发送成为可能。从前发送请求后需要等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应也可以直接发送下一个请求。


图15.png
2.6 使用cookie的状态管理

Cookie:Cookie技术是通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
Cookie保存客户端状态的具体过程:
Cookie会根据从服务器端发送的响应报文内的一个叫Set-Cookie的首部字段信息,通知客户端保存Cookie。当客户端再往该服务器发送请求时,客户端会在动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检查究竟是从那一个客户端发送过来的连接请求,然后对比服务器上的记录,最后得到之前的状态。

  • 没有Cookie信息状态下的请求


    截图16.png
  • 第2次以后(存有cookie信息状态)的请求


    截图17.png
(1) 请求报文 (没有Cookie信息状态)
截图18.png
(2) 响应报文(服务器端生成Cookie信息)
截图19.png
(3)请求报文 (自动发送保存着的Cookie信息)
截图20.png
3.1 HTTP报文

用于HTTP协议交互的信息被称为HTTP报文。请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。HTTP报文本身是由多行(用CR+LF作换行符)数据构成的字符串文本。HTTP报文大致可分为报文首部和报文主体两块。两者由最初出现的空行(CR+LF)来划分。通常,并不一定有报文主体。


截图21.png
3.2请求报文及响应报文的结构
截图22.png

图:请求报文(上)和响应报文(下)的结构


截图24.png

截图25.png

图: 请求报文(上)和响应报文(下)的实例

请求行:包含用于请求的方法,请求URI和HTTP版本。
状态行:包含表明响应结果的状态码,原因短语和HTTP版本。
首部字段:包含表示请求和响应的各种条件和属性的各类首部。

一般有4种首部,分别是:通用首部、请求首部、响应首部、和实体首部。

4.1返回结构的HTTP状态码

2XX的响应结构表明请求被正常处理了。
3XX的响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。(重定向)
4XX的响应结果表明客户端是发生错误的原因所在。
5XX的响应结果表明服务器本身发生错误。

5.1 HTTP常用的首部字段

HTTP首部字段是由首部字段名和字段值构成的,中间用冒号“:”分隔
首部字段名:字段值
例如:
Content-Type: text/html
另外,字段值对应单个HTTP首部字段可以有多个值,例如
Keep-Alive: timeout=15, max = 100

6. HTTPS相关

在HTTP协议中有可能存在信息窃听或身份伪装等安全问题。使用HTTPS通信机制可以有效地防止这些问题。

HTTP的缺点:

  1. 通信使用明文(不加密),内容可能被窃听
  2. 不验证通信方的身份,因此有可能遭遇伪装
  3. 无法证明报文的完整性,所以有可能已遭篡改

我们把添加了加密及认证机制的HTTP称为HTTPS。
HTTP + 加密 + 认证 + 完整性保护 = HTTPS

截图25.png
7.1 HTTPS是身披SSL外壳的HTTP

HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分使用SSL和TLS协议代替而已。
通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。简而言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。


截图26.png

在采用了SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。

SSL采用一种叫做公开密钥加密的加密处理方式

共享密钥加密

加密和解密同用一个密钥的方式称为共享密钥加密,也被叫做对称密钥加密。这种加密方式有两个问题一个是密钥在发送过程中会被窃取还有就是密钥的保存问题。


截图28.png

截图29.png
公开密钥加密

公开密钥加密使用一对非对称密钥。一把叫做私有密钥,另一把叫做公开密钥。使用公开密钥加密方式,发送密钥的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。


30.png
HTTPS采用混合加密机制

HTTPS采用共享密钥加密和公开密钥加密两者混合并用的混合加密机制。在密钥交换环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。


31.png
7.2 证明公开密钥正确性的证书。

为了解决公开密钥在传输过程中,真正的公开密钥被攻击者替换掉,可以使用由数字证书认证机构和相关颁发的公开密钥证书。

数字证书

数字证书认证机构处于客户端与服务器双方都可信赖的第三方认证机构的立场上。

数字证书认证机构的业务流程

首先,服务器的运营人员向数字证书认证机构提出公开密钥的申请,数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。
服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行公开密钥加密方式通信。公钥证书也可以叫做数字证书或者直接称为证书。
接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可以明确两件事:一、认证服务器的公开密钥是真实有效的数字证书认证机构。二、服务器的公开密钥是值得信赖的。

此处认证机关的公开密钥必须安全地转交给客户端。使用通信方式时,如何安全转交是一件困难的事,因此,多数浏览器开发商发布版本时,会事先在内部值入常用认证机关的公开密钥。
32.png
7.3 HTTPS的安全通信机制
33.png

步骤1: 客户端通过发送Client Hello 报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件列表(所使用的加密算法及密钥长度)
步骤2: 服务器可进行SSL通信时,会以Server Hello 报文作为应答。和客户端一样,在报文中包含SSL版本及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
步骤3: 之后服务器发送Certificate报文。报文中包含公开密钥证书。
步骤4: 最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
步骤5: SSL第一次握手结束之后,客户端以Client Key Exchange报文最为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密。
步骤6:接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。
步骤7: 客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够真确解密该报文作为判断标准。
步骤8: 服务器同样发送Change Cipher Spec 报文。
步骤9: 服务器同样发送Finished 报文。
步骤10: 服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议通信。即发送HTTP请求。
步骤11: 应用层协议通信,即发送HTTP响应。
步骤12: 最后由客户端断开连接。断开连接时,发送close_nofity报文。这步之后再发送TCP FIN 报文来关闭与TCP的通信。
以上流程中,应用层发送数据时会附加一种叫做MAC的报文摘要。MAC能够查知报文是否遭到篡改,从而保护报文完整性。

SSL速度慢吗?
34.png

SSL的慢分两种。一种是指通信慢。另一种是指由于大量消耗CPU及内存等资源,导致处理速度变慢。和使用HTTP相比,网络负载可能会变慢2到100倍。除去和TCP连接,发送HTTP请求响应外,还必须进行SSL通信,因此整体上处理通信量不可避免会增加。
另一点是SSL必须进行加密处理。服务器和客户端都需要进行加密和解密的运算处理。因此从结果上讲,比起HTTP会更多地消耗服务器和客户端的硬件资源,导致负载增强。

为什么不一直使用HTTPS?

其中一个原因是,因为与纯文本通信相比,加密通信会消耗更多的CPU及内存资源。如果每次通信都加密,会消耗相当多的资源,平摊到一台计算机上时,能够处理的请求数量必定也会随之减少。因此如果是非敏感信息则使用HTTP通信,只有在包含个人信息等敏感数据时,才利用HTTPS加密通信。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 本文是《图解HTTP》读书笔记的第一篇,主要包括此书的前五章内容,简要记录一下。大概分为以下几部分: TCP/IP...
    lijiankun24阅读 1,293评论 0 2
  • 4天读完 一、了解web及网络基础 1.1 三项www构建技术: HTML:超文本标记语言 HTTP:文本传输协议...
    15d843cd48a8阅读 778评论 1 4
  • 了解 Web 及网络基础 1. 使用 Http 协议访问 Web Web 浏览器根据地址栏中的 URL,从 Web...
    13kmsteady阅读 292评论 0 3
  • 总结: 这本书图文并茂让人很容易理解,但好多知识点都是蜻蜓点水,讲得不深入。我在阅读的过程就有一下的疑问:1、把数...
    Hing0000阅读 351评论 0 1
  • 探戈开发概述 探戈是使用计算机视觉给设备的了解相对于他们周围的世界中的位置的能力的平台。探戈平板电脑开发套件是一个...
    半闲书屋半闲人阅读 609评论 0 0