首先,客户端和服务器直接是有交互的 —— 请求访问 与 响应 。报文,就是携带了客户端与服务器(还有代理)之间交流信息的数据块。
简要拎出两点:
- HTTP报文只有:请求报文(request message) 和 响应报文(response message),两种。
- 报文由三部分组成:起始行(start line)、包含属性的首部块(header)、可选的,包含数据的主体(body)
请求报文
起始行(请求行) |
<method> <request-URL> <version> |
GET /test/helloworld.txt HTTP/1.1 |
首部块 | <headers> |
Date:Sun, 01 Oct 2018 17:15:16 GMT Accept: text/* Host:www.jaykoo.com User-agent:Mozilla/4.75 [en] (Win8; U) |
主体 | <entity-body> | CRLF(空行,此请求报文中并未携带主体) |
请求头
request-URL:请求资源的路径。
version:
格式:HTTP/<major>.<minor>(major:主要版本号,minor:次要版本号)
method:客户端对服务器执行的动作,常见有
方法 | 描述 | 是否有主体 |
GET | 从服务器获取文档 | 否 |
HEAD | 只从服务器获取文档首部 | 否 |
POST | 想服务器发送需要处理的数据 | 是 |
PUT | 将请求的主体部分存储在服务器上 | 是 |
TRACE | 对可能经过代理服务器传送到服务器上去的报文进行追踪 | 否 |
OPTIONS | 决定可以在服务器上执行哪些方法 | 否 |
DELETE | 从服务器上删除一份文档 | 否 |
首部块(headers)
一般由:通用首部 / 请求首部 / 实体首部 / 扩展首部 组成。(后两者可选)
- 通用首部:请求报文和响应报文都能携带的基本信息。比如创建时间(Date)
- 请求首部:只在请求报文中有意义的首部。上面的Accpt:Text/*(Accept表示了告诉服务器能够发送哪些媒体类型,让服务器对发送的内容做更好的决定。这里为text)
- 实体首部:报文携带的实体相关信息。
- 扩展首部:非标准的首部,由程序员创建。
实体
发送的实体数据信息
响应报文
起始行(响应行) |
<version> <status> <reason-phrase> |
HTTP/1.0 200 OK |
首部块 | <headers> |
Date:Sun, 01 Oct 2018 17:15:16 GMT Server:Apache/1.3.11 BSafe-SSL/1.38 (Linux) Content-length:403 Content-Type:text/html |
主体 | <entity-body> |
<HTML> <HEAD><TITLE>JayKoo</TITLE></HEAD> <BODY> <H1>JayKoo</H1> <P>This is a test!</P> </BODY> </HTML> |
响应头
version:同上
status:状态码,常见网页状态码有404(服务器无法找到请求的URL响应的资源)。上面的200表示成功
reason-phrase:原因短语,为状态码提供了文本解释。
首部块(headers)
一般由:通用首部 / 响应首部 / 实体首部 / 扩展首部 组成。(后两者可选)
除了响应首部,其余都与请求报文的headers类似。
响应首部:为客户端提供了一些额外的信息,比如服务器信息。