一 HTTP概述
? ? ? ? HTTP协议基本工作流程,简单来说就是"请求-应答"或者是"一发一收"的模式。实际上底层的传输工作是由TCP/IP协议负责完成的。
? ? ? ? 我们可以理解HTTP协议的核心就是它所传输的报文内容。HTTP协议在规范文档中详细的定义了报文的格式,规定了组成部分,解析规则,还有处理策略,从而保证了在TCP/IP层之上实现更加灵活丰富的功能,如连接控制,缓存管理,数据编码了,内容协商等等。
二 报文的结构概述
? ? ? ? 常见的报文有TCP/UDP的报文,就TCP报文为例,它在实际传输数据之前是需要附加一个20字节的头部数据,存储TCP协议必须的额外信息,这些信息包括发送方的端口号,接收方的端口号,包序号,标志位等等。
? ? ? ? 因为这个附加的TCP报文头,数据包才能够正确传输,当报文被传输到目的地之后会将头部去掉并将真正的数据发给接收方。
? ? ? ? ?HTTP协议同TCP/UDP协议是类似的,同样也需要在实际传输的数据前附加一些头数据,不同的是,它是一个"纯文本"的协议,头数据是通过ASCII码的文本形式,可以很容易的用肉眼阅读,而无需借助程序解析即可阅读。
三 HTTP协议请求报文与响应报文的结构
? ? ? ? HTTP协议的请求报文和响应报文的结构基本相同,都是由三部分组成:
- 起始行(start line):描述请求或响应的基本信息;
- 头部字段集合(header):使用key-value形式更加详细地说明报文;
- 消息正文(entity):实际传输的数据,它不一定是纯白文本,可以是图片,视频等二进制数据。
????????1和2经常别合称作“请求头”或者“响应头”即“header”,被称为“实体”的消息正文也就是我们常说的消息体“body”。
? ? ? ? HTTP协议规定报文必须要有header,同时header之后必须要有一个“空行”也就是"CRLF",十六进制的"OD0A"。而body并不是必须的。
? ? ? ? 一个完整的HTTP报文请求如下,header同body之间存在一个“空行”。
?????????一个完整的请求报文示例:
?如图:第一行“GET / HTTP/1.1”就是请求行,而后面的“Host”“Connection”等等都属于 header,报文的最后是一个空白行结束,而该报文是没有 body的。
四 HTTP协议的请求行(起始行)
? ? ? ? HTTP报文中的起始行,即请求行(request line),它简要的描述了客户端想要如何操作服务器端的资源。
? ? ? ? 请求头的组成:
- 请求方法:通过类似于GET/POST等动词来描述对资源的操作;
- 请求目标:一般是一个URI,标记了请求方法所要操作的资源;
- 版本号:该版本号是用来表示报文所使用的HTTP协议版本。
?如图所示:三部分通常使用空格(space)来分隔,最后要用 CRLF 换行表示结束。
? ? ? ? 请求行示例:
GET / HTTP/1.1
????????在这个请求行里,“GET”是请求方法,“/”是请求目标,“HTTP/1.1”是版本号,把这三部分连起来,意思就是“服务器你好,我想获取网站根目录下的默认文件,我用的协议版本号是 1.1,请不要用 1.0 或者 2.0 回复我。”
|