目录
参考资料:《计算机网络 自顶向下方法第6版》
HTTP
HTTP 简介
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP 工作原理
HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
HTTP特点:
- HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
- HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。
以下图表展示了HTTP协议通信流程:
HTTP消息结构
请求报文
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、首部行(header line)(请求头部啥的也行)、空行和实体主体(entity body)四个部分组成,下图给出了请求报文的一般格式。(配图来源《计算机网络自顶向下方法 第6版》)
- 请求行
- 请求类型
- 要访问的资源
- HTTP协议版本号
- 请求头(首部行)
- 用来说明服务器要使用的附加信息(一些键值对)
- 例如:User-Agent、 Accept、Content-Type、Connection
- 空行
- 分割请求头与请求体
- 请求体(实体主体)
- 可以添加任意的其他数据
响应报文
HTTP响应也由四个部分组成,分别是:状态行(status line)、首部行(header line 也有叫消息报头)、空行和实体主体(entity body 也有叫响应正文)。
可以对比Wireshark捕获的来看一下
- 状态行
- HTTP协议版本号
- 状态码
- 状态消息
- 消息报头
- 说明客户端要使用的一些附加信息
- 如:Content-Type、charset、响应的时间
- 响应正文
- 返回给客户端的文本信息
头部信息(首部行的分类)
HTTP的头域包括通用头、请求头、响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。
通用头域:请求和响应消息都支持的头域,可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能,如Date头部。
请求头部头域是请求报文特有的,它们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据,如Accept头部。
响应头域用于服务器为客户端提供信息,比如,客服端在与哪种类型的服务器进行交互,如Server头部。
实体头部:请求消息和响应消息都可包含实体信息,比如,可以用实体头部来说明实体主体部分的数据类型,如Content-Type头部。
常见头部
- Accept
- 在请求中使用Accept可申明想要的数据格式
- Accept-Encoding
- 告诉服务端使用什么的方式来进行压缩
- 例如:gzip、deflate、br
- Accept-Language
- 描述语言信息
- User-Agent
- 用来描述客户端浏览器相关信息
- 可以用来区分PC端页面和移动端页面响应头
- Content-Type
- 对应Accept,从请求中的Accept支持的数据格式中选一种来返回
- Content-Encoding
- 对应 Accept-Encoding,指服务端到底使用的是那种压缩方式
- Content-Language
- 对应Accept-Language
头部字段整理
通用字段 |
作用 |
Cache-Control |
控制缓存的行为 |
Connection |
浏览器想要优先使用的连接类型,比如 keep-alive |
Date |
创建报文时间 |
Pragma |
报文指令 |
Via |
代理服务器相关信息 |
Transfer-Encoding |
传输编码方式 |
Upgrade |
要求客户端升级协议 |
Warning |
在内容中可能存在错误 |
请求字段 |
作用 |
Accept |
客户端希望接收的数据类型 |
Accept-Charset |
能正确接收/希望接收的字符集 |
Accept-Encoding |
能正确接收的编码格式列表(压缩即编码的一种) |
Accept-Language |
能正确接收的语言列表 |
Expect |
期待服务端的指定行为 |
From |
请求方邮箱地址 |