前端和后端的沟通其实和我们生活中人与人之间的沟通是一样的,也是一种通信,只不过是计算机之间的通信。人与人之间之所以能沟通是因为我们遵循了同一种规则(协议)——语言。通信的双方只有遵循一种共同的通信协议,才能互相理解对方消息中所表示的含义,比如我们知道如何用中文来表达自己,同时我们能理解对方所表达的意思。那么前端和后端的沟通也遵循了一种协议——http协议,爱创课堂给大家就来讲一讲http协议中的报文格式简介。
http 报文格式分为两种,请求报文和响应报文。在介绍两种报文格式之前,我们先来看一个真实的 http 请求报文。
上面的nodejs代码简单地启动了一个 http 服务并且监听8080端口,将客户端携带的数据原封不动的返回。我们试着来发送一个请求:
我们通过 curl 命令向本地的8080端口发送了一个 http 请求,并且携带了 “hello” 消息,-v 选项会输出详细的通信过程。
下面我将根据上面的示例来详细介绍请求报文和响应报文的格式。
http 请求报文
一个 http 请求报文由四个部分组成:
1. 请求行(Request-Line)
2. 请求头部(Request Header Fields)
3. 回车换行(CRLF)
4. 消息体(Message Body)
贴一个 RFC 的官方定义:
请求行(Request-Line)
我们来看一开始给的示例的请求行:
请求行分为了三个部分:① 请求方法(Method)② 请求 URI③ HTTP 协议版本
三者之间用空格分隔。
请求头部(Request Header Fields)
这部分由成对的请求头部组成,用来告知服务端请求的更多信息。
消息体(Message Body)
这部分携带了本次请求需要发往服务端的信息,有的 Method 有这部分,而有的 Method 不需要这部分。比如 get 方法就没有消息体,get 方法一般都是通过 query 来传递参数。而 post 方法一般就有消息体。
http 响应报文
一个 http 响应报文也由四个部分组成:
1. 状态行(Status-Line)
2. 响应头部(Response Header Fields)
3. 回车换行(CRLF)
4. 消息体(Message Body)
状态行(Status-Line)
上面是一个典型的 http 响应状态行,我们可以看到也是由三部分组成的:① http 协议版本② 状态码(Status Code)③ 状态码的文本描述(Reason-Phrase)
响应头部(Response Header Fields)
和请求头部类似,就是两者之间有一些不同的头部字段。
消息体(Message Body)
返回给客户端的具体消息。
以上就是http报文的格式简介啦,希望小伙伴们能够好好掌握!