HTTP协议--HTTP报文格式
HTTP协议
http 报文格式
1.Requset 请求报文结构
请求报文:
分为请求行,请求头部,空行和请求数据四个部分
请求行包括 请求方法 URL 协议版本
请求头部 都是一对对的key-value值
空行 请求报文用空行表示hander和请求数据的分隔
请求数据 GET方法没有携带数据 POST方法会携带一个body
2.Reponse 报文结构
响应报文
分为状态行,响应头部,空行,数据(响应体)四个部分
状态行包括 HTTP版本号,状态码和状态值
响应头类似请求头,是一系列的key-value值
空行 响应报文也用空行来分隔header和数据
响应体 响应的数据
HTTP 请求的完整过程
1.建立TCP连接(之前可能还需要一次DNS解析)
2.三次握手建立TCP完成后,客户端向服务器发送请求命令
例如 GET https://www.baidu.com?name=xx&addr=xxHTTP1.1
3.客户端发送请求头信息,发送完header后会继续发送一个空行,GET请求没有数据,POST请求要发送body数据
4.服务器接收到以上数据后,开始处理业务,处理完获得结果后,服务器开始应答
5.服务器返回响应头信息,发送完response header后,再发送一个空行
6.服务器向客户端发送数据
7.发送完成后服务器完成四次挥手断开TCP连接
报文格式各部分解析
method 方法
客户端希望服务器对资源执行操作,是一个单独的词,例如GET HEAD POST
requset-URL (请求URL)
命名所请求的资源,或者URL路径组件完整的URL
version(版本)
报文所使用的的HTTP版本,格式如下
HTTP/
其中主要版本号major 和次要版本号minor 都是整数
status(状态码)
由三位数字组成,描述了请求过程中所发生的情况
reason-phrase(原因短语)
上面的数字状态码的可读版本,包含行终止序列之前的所有文本
headers(头部)
可以有多个或者没有首部,每个首部都包含一个名字,后面跟着一个冒号“:”,然后是一个可选的空格,接着是一个值,最后是一个空行(CRLF)。
首部是由一个空行(CRLF)结束的,表示首部列表的结束和实体主体部分的开始
entity-body(实体的主体部分)
包含一个由任意数据组成的数据块,并不是所有的报文都包含实体的主体部分,有时候,报文只是以一个CRLF结束。
HTTP GET POST 请求方法
GET
从指定的资源请求数据
POST
向指定资源发送要被处理的数据
对比
GET请求可被缓存,保留在历史记录,可被收藏为书签,不应在处理敏感数据时使用,有长度限制,应用于取回数据
POST请求不会被缓存,不会有历史记录,不能被收藏,对长度无要求