《图解HTTP》第1、2、3章读书笔记

第一章:了解web及网络基础

1.1 使用HTTP协议方问web

访问web时,有一个客户端请求文件资源、服务端响应请求发送文件资源的过程,这个过程使用到的就是HTTP协议。

1.2 HTTP的诞生

HTTP最开始被设想出来是为了用来共享文档。

为了实现共享文档的设想,定义了:文档标记语言HTML、文档传输的协议HTTP、表示文档资源位置的URL,还诞生了web浏览器、web服务器。

之后,还出现了Apache(现在它是一种web服务器标准)。

目前主流用的HTTP协议版本是1.1,版本2.0尚未普及。

1.3 网络基础TCP/IP

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

这一大堆协议族可分为4层,从上到下分别是,应用层、网络层、传输层、链路层,分层之后,各层只需要管好自己负责的任务,不需要关心整个传输过程。

HTTP协议属于应用层。FTP协议和DNS服务也属于应用层。

TCP协议和UDP协议属于传输层。

IP协议属于网络层。

链路层负责跟硬件打交道。

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

简单介绍下几个跟HTTP特别有关的协议:

IP负责找到确切的目的地,根据IP地址,还有与IP地址对应的,几乎不会改变的MAC地址,来找到确切的通信对象。

TCP负责会把应用层要传输的数据切割成一个个数据包,并采用3次握手策略来确认对方是否真的接收到了数据。

DNS服务,负责把主机名或者域名对应成IP地址。

1.5 URI和URL

URI是资源定位标识符,表示通过某协议访问资源的时候,资源的定位标识。

URL是表示资源在互联网上所处的位置。所以URL是URI的子集。

(还是没大看懂这个定义,先搁置)

书中HTTP相关内容会按RFC标准来介绍,但现实中,也有些web服务器和客户端就没完全按RFC标准来实现,所以可能会有些实际情况跟RFC上说的不一样。



第二章

本章简单介绍一下HTTP协议1.1版本的内容。

2.1 HTTP协议用于客户端和服务端之间的通信

应用HTTP协议时,必定分为客户端和服务端,两台计算机的角色可以呼唤,但对于一条通信线路来说,必定一端是服务端另一端是客户端。

2.2 通过请求和响应的交换达成通信


HTTP协议规定,通信只能从客户端开始建立,由客户端先发请求。

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

响应报文的构成:协议版本、响应状态码和其原因短语(如200 OK、404 NOT FOUND这种)、首部字段(可选)、内容实体

2.3 HTTP是不保存状态的协议

HTTP协议不对请求和响应之间的通信状态进行保存,这是为了更快第处理大量事务、确保协议的可伸缩性,特意把HTTP协议设计成如此简单的。

但是这样不能满足稍微复杂一点的场景需求,所以引入了Cookie技术,有了Cookie,就能实现状态的保存。

2.4 请求URI定位资源

HTTP协议用URI来定位互联网上的资源,在请求报文里就有指定URI。报文里填写的URI可以是完整的URI,也可以是相对HOST的相对URI。此外,如果客户端想对服务端本身发起请求,而不是想访问资源,可以把URI填写成一个*号。

2.5 HTTP方法

GET:用来访问资源。指定的资源经服务器端解析后返回响应内容。

POST:用于传输实体主体,客户端一般用POST方法向服务端传输实体主体,虽然GET也可以传输,但是POST更专门用来做这个事。得到的响应是服务端接收了传输数据之后的处理结果。

PUT:用于客户端向服务端上传文件。一般的web网站不使用这个方法,因为存在安全问题。

HEAD:获得报文首部,用于确认URI的有效性及资源更新的日期时间

DELETE:用于删除文件,与PUT方法一样存在安全问题,一般网站不用。

OPTIONS:用来查询指定URI支持哪些方法。

TRACE:让web服务端将之前的请求通信返回给客户端,用来追踪一条请求从客户端到目标服务器(可能经历多次中转)经历的改变。但是这个方法容易遭到攻击所以也很少用。

CONNECT:要求与代理服务器通信时建立隧道,主要是用SSL和TLS协议把通信内容加密后经网络隧道传输。

2.6 持久连接节省通信量

HTTP最早的版本是每进行一次通信,都要断开一次TCP连接,如果一个客户端需要访问很多资源,比如说访问一个web页面里的多个图片资源,就要多次建立TCP连接、多次断开。

为了节省开销,HTTP1.1版本提出了持久连接,就是HTTP keep-alive,只要任意一端没有提出断开,就保持TCP连接状态。

在持久连接的基础上,请求可以以管线化方式发送,也就是不必等待上一个请求结束再发下一个请求,而是同时发送多个请求。

2.7 使用Cookie进行状态管理

服务端的响应报文内,首部字段可以增加Set-Cookie,向客户端存储信息。之后客户端会在请求报文里带上Cookie。



第三章 HTTP报文内的HTTP信息

3.1 HTTP报文

HTTP报文是由多行数据构成的字符串文本。报文可以分成报文首部和报文主体,其中报文主体可以没有。

3.2 报文结构

请求报文的首部:请求行(请求的方法、URI、HTTP协议版本号)、请求首部字段、通用首部字段、实体首部字段、其它

响应报文的首部:状态行(响应结果的状态码、原因短语、HTTP协议版本号)、响应首部字段、通用首部字段、实体首部字段、其它

3.3 编码提升传输速率

HTTP在传输数据时,可以通过编码提升传输速率

报文主体和实体主体的区别:报文主体是HTTP中的基本单位,由8位组字节流组成,通过HTTP通信传输。实体主体是传输的有效载荷,如果它不经过编码,就跟报文主体相等同,如果传输中经过了编码,实体主体就跟报文主体有区别。

HTTP协议中有一种被称作内容编码的功能,内容编码指定实体被编码的方式,然后就能把实体压缩,客户端接收到实体,然后对它进行解码。

常用的内容编码有gzip、compress、identity(不进行编码)等

为了大容量数据可以逐块加载,可以使用分块传输编码,把实体主体分块传输。

3.4 发送多种数据的多部分对象集合

HTTP采用了MIME标准,允许一份报文主体内可包含多种类型实体

当字段Content-Type为multipart/form-data时,或为multipart/byteranges时,报文主体内就可包含多类型实体。

3.5 获取部分内容的范围请求

在带宽不够的情况下,下载一个大文件需要较长时间,如果下载中网络中断,下次又要从头开始,为了接近这个问题,HTTP允许范围请求,即允许请求一个资源的第x字节到第y字节内容。

执行范围请求时,请求报文的首部会有Range字段,如:Range: bytes=5001-10000

表示请求该资源的第5001字节到第10000字节。

针对范围请求,服务端会返回状态码206,返回响应的内容。如果服务端不能响应范围请求,则会返回状态码200并把整个文件都返回去。

3.6 内容协商

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最合适的资源,当请求报文首部包含对语言、字符集、编码方式等要求时(如Accept、Accept-Charset、Accept-Language、Content-Language这些字段),就是在与服务端进行内容协商。

内容协商有3种形式:服务器驱动协商、客户端驱动协商、透明协商(前两种方式结合)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容