文章作者:Tyan
博客:noahsnail.com | CSDN | 简书
1. HTTP报文
HTTP报文是由一行一行的简单字符串组成的。HTTP报文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写。下图是一个例子:
从Web客户端发往Web服务器的HTTP报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message),此外没有其他类型的HTTP报文。HTTP请求和响应报文的格式很类似。
HTTP 报文包括以下三个部分:
起始行
报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。首部字段
起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首部字段和添加新行一样简单。主体
空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括 了要发送给 Web 服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意 的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含 文本。
2. HTTP请求报文
1 | GET / HTTP/1.1 |
解释:
GET / HTTP/1.1,请求起始行
GET,请求方法
/,请求URL,命名了所请求资源,或者URL路径组件的完整URL。如果直接与服务器进行对话,只要URL的路径组件是资源的绝对路径,通常就不会有什么问题——服务器可以假定自己是URL的主机/端口。
HTTP/1.1,请求采用的协议及版本号
Host,请求的服务器
Connection,连接方式
Upgrade-Insecure-Requests,
User-Agent,将发起请求的应用程序名称告知服务器
Accept,请求首部,是请求报文特有的。它们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据。例子中接收html,xhtml,xml等数据。
Accept-Encoding,告诉服务器能够发送哪些编码方式
Accept-Language,告诉服务器能够发送哪些语言
Cookie,Cookie信息,客户端用它向服务器传送一个令牌——它并不是真正的安全首部,但确实隐含了安全功能
3. HTTP响应报文
1 | $ curl -I www.baidu.com |
解释:
HTTP/1.1 200 OK,响应状态行
HTTP/1.1,访问采用的协议为HTTP,版本为1.1
200,HTTP状态码,表示文档正确返回
OK,一个描述性的原因短语
Server,服务器应用程序软件的名称和版本
Date,服务器产生响应的日期
Content-Type,实体中所承载对象的类型,例子中响应实体的主体是一个html文本。
Content-Length,所传送实体主体的长度或大小,例子中响应实体的主体包含了277字节的数据
Last-Modified,资源的最后修改日期时间
Connection,连接方式,close或keep-alive
ETag,资源的匹配信息
Cache-Control,控制缓存的行为
Pragma,报文指令
Accept-Ranges,是否接受字节范围请求