http报文分析
一、什么是报文
- 用于HTTP协议交互的信息被称为报文。
- 请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文。
- HTTP报文本身是由多行数据构成的字符串文本。
- HTTP报文大致上可分为报文首部和报文主体两块,两者由最初出现的空行划分。
5. 通常,并不一定要有报文主体。
二、组成
- 起始行:报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况
- 报文头:起始行后面有零个或多个字段。每个字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔,首部以一个空行结束。
- 主体:空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体是要发送给服务器的数据;响应主体是要返回给客户端的数据。起始行和报文都是文本且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频)。当然,主体中也可以包含文本。
二、请求报文和响应报文的结构
请求报文
一个请求报文起始行的例子:
GET /bk/index.html HTTP/1.12
·GET:这里指明请求方法是GET,还有其它方法比如POST、DELETE、HEAD、OPTIONS、PUT、TRACE
·/dir/index.html:这里指明URL,它和报文头的Host属性组成完整的请求URL
·HTTP/1.1:这里指明协议名称及版本号
报文头里有很多的字段,具几个常见的例子:
- Host:请求的服务器地址,比如www.google.com
- Accept: 指明客户端可以接受的数据类型,比如text/html
- Cookie:携带的Cookie信息
- Cache-Control:对缓存进行控制,指明一个请求希望响应返回的内容在客户端要被缓存多。
最后举一个请求主体的例子:
name=zhangsan&age=24
这里的请求主体就是我们提交的表单里的数据。
响应报文
一个响应报文起始行的例子:
HTTP/1.12 200 OK
跟请求报文比,响应报文的起始行里多了一个状态码来告诉客户端本次请求的处理结果。以下是状态码的类型: