图解HTTP速记
《图解HTTP》读书速记
了解web以及网络基础
TCP/IP协议
定义
协议:计算机与网络要相互通信,双方就要基于相同的方法,如何探测通信目标,由哪边发起通信,都要指定规则,这个规则就是协议。互联网相关联的协议集合起来总称为TCP/IP。
分层
应用层:
向用户提供应用服务时通信的活动
相关协议:FTP、DNS、HTTP
传输层:
提供处于网络连接中的两台计算机之间的数据传输
相关协议:TCP、UDP
网络层:
处理网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路劲到达对方计算机。
链路层(网络接口层):
用来处理连接网络的硬件部分。
层次化好处:协议中某一个地方需要改变设计的时候,只需要把变动的层替换就行。也可以使设计相对简单
通信传输流:
以http举例子。
- 客户端在应用层发出http请求
- 在传输层将http请求报文进行分割,并在报文打上标记需要以及端口号转发给网络层
- 在网络层(IP协议)增加作为通信目的地的MAC地址转发给链路层
- 接收端则是链路层→网络层→传输层→应用层
与HTTP密切相关的协议: IP:位于网络层,作用是把各种数据包传送给对方。保证要传输到对方那里,最重要的条件是 IP地址(节点被分配到的地址)。MAC地址(网卡固定地址)。 TCP(传输控制协议):位于传输层,提供可靠字节流服务(将大数据分割以报文为单位的数据包进行管理) DNS:提供域名到IP地址之间的解析服务
TCP可靠性在于三次握手:发送端发了一个SYN给对方。接收端收到后返回SYN/ACK数据包。最后发送端一个带ACK标志的数据包
URI和URL
URI:某个协议表示资源的定位标识符
URL:某个协议表示资源的地点
简单的HTTP协议
- HTTP协议用于客户端与服务端之间的通信。提供请求的是服务端,提供响应的是服务端。
- 通过请求和响应达成通信。
- HTTP是不保存状态的协议
HTTP请求方法
- GET:获取资源
- POST:传输实体的主体
- PUT:传输文件,但是不带验证机制
- HEAD:和GET一样,但是不返回报文主体。用于确认URI的有效性及资源更新的日期时间。
- DELETD:删除文件,但是不带验证机制。
- OPTIONS:用来查询针对请求URI指定资源支持的方法。
- TRACE:让WEB服务端将之前的请求通信返回给客户端的方法。容易引发跨站跟踪攻击。
- CONNECT:要求用隧道协议连接代理。主要是用SSL和TLS协议把通信能容加密后经网络传输。
持久化连接
HTTP初始版本中,每一次HTTP通信需要建立一次TCP连接。在1.1版本中可以建立持久连接:只要任意一段没有明确提出断开连接,则保持TCP状态。
好处:减少了TCP重复建立断开的开销。
TCP断开四次握手:1.服务端发送FIN 2. 客户端发送ACK 3.客户端发送FIN 4.服务端发送ACK
GET和POST区别
HTTP报文
HTTP协议交互的信息被称为HTTP报文。请求端称为请求报文,响应端被称为响应报文。报文由报文首部+空行+报文主体组成
请求报文
请求行(请求方法,请求URI,HTTP版本)+请求首部字段+通用首部字段+实体首部字段+其他
响应报文
响应行(状态码,原因短语,HTTP版本)+响应首部字段+通用首部字段+实体首部字段+其他
编码提升传输效率
报文主体:HTTP通信中的基本单位,由8位组字节流组成。 实体主体:作为请求或响应的有效载荷数据被传输,其内容有实体首部和实体主体组成。 通常,报文主体等于实体主体,只有当传输中进行编码操作室,实体主体的内容才发生变化
1. 压缩传输的内容编码
压缩实体主体的编码格式,由客户端接受后解码。
常见的编码有:gzip,compress,deflate,identity(不进行编码)
2. 分块传输编码
3. 发送多种数据的多部分对象合集
发送一份报文主体内含有多类型实体。通常是在图片或者文本文件上传时时候用。
multpart/form-data:表单文件上传 multpart/byteranges:状态码206响应报文包含了多个范围的内容时使用
4. 获取部分内容的范围请求
请求头加一个range: byte=5000-10000,12000-15000.针对范围请求会返回206,对于多重访问请求,响应会在首部字段Content-type表明multpart/byteranges。
5. 内容协商返回最合适的内容
HTTP状态码
1XX
接受的请求正在处理
2XX
响应的结果被正常处理了
200 OK
客户端的请求在服务端被正常处理了
204 No Content
请求处理成功,但是响应报文中不含实体主体部分
206 Partial Content
进行了访问请求
3XX
需要进行附加操作以正确处理请求
301 永久重定向
资源分配给新的URI
302 临时重定向
资源临时分配给新的URI
301保存书签时,书签的URI是按Location首部字段提示的URI重新保存。而302保存书签的时候还是旧的URI
303 see other
请求的资源存在另一个URI,应该使用GET方法定向获取请求的资源。
304Not Modified
客户端发送附带条件的请求时,服务端允许请求访问资源,但因发生请求未满足条件后返回304(服务端资源未改变,直接使用缓存)
附带条件:get请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since
307 临时重定向
与302相同含义,302标准禁止POST变换成get,307不会
4XX
客户端请求发生错误
400 bad request
请求报文存在语法错误
401 unauthorized
认证失败,当前用户没有认证
403 Forbidden
未获得系统的访问授权
404 Not Found
找不到改资源
5xx
服务端请求发生错误
500 internal server error
服务端内部出现bug
503 service unavailable
服务器暂时处于停机阶段
HTTP首部
HTTP 报文
报文首部(报文主体大小,使用语言,认证信息)
请求行:请求方法,URI,HTTP版本(状态行:HTTP版本,状态码)
请求(响应)首部字段
通用首部字段
实体首部字段
通用首部字段
Cache-Control:操作缓存的工作机制
private:缓存服务器会对特定用户提供资源缓存的服务
no-cache:表示缓存可以存在,但是每次使用缓存之前必须先向服务器验证缓存的有效性,如果缓存仍然有效则可以使用缓存,否则需要从服务器重新获取资源。
no-store表示不允许缓存存储任何版本的资源请求或响应,每次都必须从服务器获取最新版本的资源。
connection:
- 控制不再转发给代理的首部字段。
- 管理持有连接
Date:HTTP报文创建的时间和日期
Via:追踪客户端与服务端之间的请求和响应报文传输路径
请求首部字段
Accept:通知服务器,用户代理能够处理的媒体类型以及媒体类型的优先级
Accept-charset:用户代理能够处理的字符集
Accept-Language:用户代理能够处理语言的优先级
If-Match:告知服务器匹配资源的ETAG值。如果不匹配返回412。如果带*则资源存在就正常处理
If-Modified-Since:在指定时间之后,如果资源没有更新,则返回304
If-None-Match:如果ETAG匹配不上,可以处理该请求
If-None-Modified-Since:在指定时间之后,如果资源没有更新,则返回412
User-Agent: 将用户代理和浏览器信息返回给服务器
响应首部字段
ETAG:将资源以字符串的形式做一个唯一标识
Loaction:一般以重定向配合,将请求引导至某个URI
Server:服务器信息,服务器版本号等
实体首部字段
Allow:通知服务端客户端会发送的请求种类,如果服务端不支持,就会返回405
Content-Lauguage:支持的语言
Content-type:实体主体对象内的媒体类型
Expires:资源过期时间