一、TCP报文格式
TCP传输控制协议是一种面向连接的协议,为了在网络上可靠地传输数据,TCP需要将数据拆分成一些小的数据包,也称为TCP报文段,在网络上传输。TCP报文段的格式如下:
+------------------------+-----------------------+------------------------+ | 源端口号 | 目的 端口号 | 序号 | | (16位) | (16位) | (32位) | +------------------------+-----------------------+------------------------+ | 确认号 |4位 首部长度|保| SYN | FIN | 0 | 窗口大小| | (32位) | | | (16位) | (16位) | (16位) | (16位) | +------------------------+-----------------------+------------------------+ | 检验和 | 紧急指针 | | (16位) | | (16位) | +------------------------+-----------------------+------------------------+ | 选 择 首 部 | | (0或32位,可选) | +------------------------+-----------------------+------------------------+
二、简述HTTP报文的格式
HTTP协议是一种无状态的协议,采用了请求-响应模型。HTTP请求报文格式如下:
<method> <request-uri> <http-version>\r\n
<headers>\r\n
\r\n
<request-body>
其中,method表示请求方法,如GET、POST等;request-uri表示请求的URL地址;http-version表示HTTP协议版本。headers是请求头部信息,包含很多键-值对,每个键值对以“键:值\r\n”这样的格式进行表示。最后是一个空行,在空行后面紧跟着的可能是请求的数据体request-body。
HTTP响应报文格式如下:
<http-version> <status-code> <reason-phrase>\r\n
<headers>\r\n
\r\n
<response-body>
其中,http-version表示HTTP协议版本,status-code表示状态码,reason-phrase表示状态原因。headers是响应头部信息,也包含很多键-值对,格式与请求头部信息类似,最后是一个空行,响应数据体response-body跟在空行后面。
三、简述HTTP协议的报文格式
HTTP协议的报文格式是由请求报文和响应报文组成的,它们的结构都包含HTTP报文头部信息和HTTP报文体两部分。
HTTP报文头部信息包含请求行或响应行、请求头或响应头,格式如下:
<request-line> # 只在请求报文中出现
<headers>
\r\n
其中,request-line表示请求行,包含了请求方法、请求URL地址以及HTTP协议版本;headers表示头部信息,包含了键值对。
HTTP报文体指的是HTTP协议发送的实体数据,包括请求体和响应体:
<body>
四、HTTP报文中的请求方法
HTTP协议定义了很多请求方法,常用的有GET、POST、PUT、DELETE等。其中,GET方法用于获取资源,POST方法用于提交数据到服务器,PUT方法用于上传资源,DELETE方法用于删除资源。
五、HTTP报文中的状态码
HTTP协议中定义了很多状态码,通常从第一个数字判断出请求的结果是否成功,常见的状态码有:
- 1xx:信息性状态码,表示服务器已接收到请求,正在处理
- 2xx:成功状态码,表示请求已被成功处理
- 3xx:重定向状态码,表示需要进行额外的操作才能完成请求
- 4xx:客户端错误状态码,表示请求有错误
- 5xx:服务器错误状态码,表示服务器处理请求出错
代码示例
下面是一个使用Python发送HTTP请求的代码示例:
import http.client
conn = http.client.HTTPSConnection("www.example.com")
headers = { 'User-Agent': 'Mozilla/5.0' }
conn.request("GET", "/", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))