一、HTTP报文分类:请求报文和响应报文
请求报文会向Web服务器请求一个动作,响应报文会将请求的结果返回给客户端
请求报文格式:
<method> <request-URL> <version> 这一行称为:请求行或请求的起始行
<header>
<entity-body>
响应报文格式:
<version> <status> <reson-phrase> 这一行称为:响应行或响应的起始行
<header>
<entity-body>
二、下面是对各部分的描述:
-
方法(method)
客户端希望服务器对资源执行的动作。是一个单独的词,如GET、POST
-
请求URL(request-URL)
所请求资源,或者URL路径组件的完整URL
-
版本(version)
报文所使用的HTTP版本,格式:HTTP/<major>.<minor>
-
状态码(status-code)
描述请求过程中发生的情况。每个状态码的第一位数字用于描述状态的一般类别(成功、出错等)
-
原因短语(reson-phrase)
数字状态码的可读版本(描述操作状态的文本形式的原因短语)
-
首部(header)
可以有零个或多个首部,每个首部都包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,最后是一个CRLF。首部是由一个空行(CRLF)结束的,表示了首部列表的结束和实体部分的开始。
首部字段向请求和响应报文中添加了一些附加信息。
本质上来说,它们只是一些名/值对的列表。
首部的分类:
1)通用首部:既可出现在请求报文中,也可出现在响应报文中。
比如Date首部就是一个通用首部,每一端都可以它来说明构建报文的时间和日期:
Date: Tue, 3 Oct 1974 02:16:00 GMT
2)请求首部:提供更多有关请求的信息,请求报文特有的。为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据。例如,Accept首部就是用来告知
服务器客户端会接受与期请求相符的任意媒体类型:
Accept: */*
3)响应首部:提供更多有关响应的信息,以便为客户端提供信息(如,客户端在与哪种类型的服务器进行交互)。例如,Server首部就是用来告知客户端它在与一个
版本 1.0 的 Tiki-Hut 服务器进行交互:
Server: Tiki-Hut /1.0
4)实体首部:描述主体的长度和内容,或者资源本身。如,可以用实体首部来说明实体主体部分的数据类型。如Content-Type首部告知应用程序,数据是以iso-latin-1
字符集表示的HTML文档:
Content-type: text/html; charset=iso-latin-1
5)扩展首部:规范中没有定义的新首部,非标准的首部,由应用程序开发者创建,但还未添加到已批准的HTTP规范中。
-
实体的主体部分(entity-body)
包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体报文,有时,报文只是以一个CRLF结束。
实体的主体是HTTP报文的负荷,就是HTTP要传输的内容。
HTTP报文可以承载很多类型的数字数据,如图片、视频、HTML文档、软件应用程序、信息卡事务、电子邮件等。