HTTP - 03 - HTTP报文

版权声明:本文为博主原创文章,可以转载,但请注明出处。 https://blog.csdn.net/Simba_cheng/article/details/81835900

报文流

HTTP报文是在HTTP应用程序之间发送的数据块。

这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义;后面跟着可选的数据部分。

报文在客户端、服务端和代理之间流动。

不管是请求报文还是响应报文,HTTP报文任何时候都是从上游往下游流入的。

原书中的图片是很好的解释:

相对于A --> B 之间的流向:A 是上游,B是下游;

相对于B-->  C 之间的流向:B是上游,C是下游。

("上游" 和 "下游"都只与发送者和接受者有关。我们无法区分报文是发送给源服务器的还是发送给客户端的,因为两者都是下游节点)

报文的组成部分

每条报文都包含一条来自客户端的请求,或者一条来自服务器的响应信息。

它们由三部分组成:起始行、首部块、主体

起始行、首部块都是由行分隔的ASCII文本;

报文主体 是一个可选的数据块;与起始行和首部不同,主体可以包含文本或二进制数据,也可以为空。

报文的语法

所有的HTTP报文都可以分为两类:请求报文(request message) 和 响应报文(response message)

请求报文回向Web服务器请求一个动作。响应报文会将请求的结果返回给客户端。

请求和相应报文的基本机构相同。

书中的样例:

请求报文
<method> <request-URL> <version>
<headers>
<entity-body>

响应报文
<version> <status> <reason-phrase>
<headers>
<entity-body>

实际样例:

method(方法)

客户端希望服务器对资源执行的动作;是一个单独的词,如何GET、POST等。

request-url(请求URL)

命名所请求资源,URL路径组件或完整URL。

version(版本)

报文所使用的HTTP版本。

status-code(状态码)

三位数字,描述了请求过程发生的情况。

reason-phrase(原因短语)

数字状态码的可读版本。

header(首部)

可以有多个、零个首部,类似于key:val结构。

entity-body(实体的主体部分)

实体的主体部分包含一个由任意数据组成的数据块。

起始行

所有的HTTP报文都以一个起始行作为开始。

请求报文的起始行说明了要做些什么;响应报文的起始行说明发生了什么。

请求报文-起始行:

        又称作请求行,包含了一个方法、一个请求URL、HTTP版本

响应报文-起始行:

        又称作响应行

        它承载状态信息和结果数据,并返回给客户端;

        包含HTTP版本、数字状态码、原因短语。

方法

安全方法

HTTP定义了一组安全的方法。

GET和HEAD方法都被认为是安全的,这就意味着使用GET或HEAD方法的HTTP请求都不会产生什么动作。

能在服务器端有操作的就是非安全方法,比如delete、put、post,不在服务器端有操作的就是安全方法,比如get、head,当然了安全方法并非不能在服务器端有操作,这是开发者可以控制的!

常用方法

方法用来告知服务器要做些什么。

比如,GET方法负责从服务器中获取信息;POST方法向服务器发送需要处理的数据。

方法

描述

是否包含主体

GET

用于请求服务器,发送某个资源

HEAD

与GET类似,但服务器在响应中只返回首部,不会返回实体的主体部分。

作用:

在不获取资源的情况下,了解资源的情况;

通过查看响应中的状态码查看资源是否存在;

通过查看首部,测试资源是否被删除;

POST

向服务器输入数据

PUT

向服务器写入文档

TRACE

对可能经过代理服务器传送到服务器上去的报文进行追踪

OPTIONS

请求WEB服务器告知其支持的各种功能

DELETE

请求服务器删除URL所指定的资源

并不是所有服务器都实现了上面的七种方法。

有些服务器会实现一些自己的请求方法,这些附加方法是对HTTP规范的扩展,因此被称为扩展方法。

扩展方法

HTTP被设计成字段可扩展的,这样新的特性就不会使老的软件失效。

扩展方法指的就是没有在HTTP/1.1规范中定义的方法。

状态码

方法是用来告诉服务器做什么事情的;状态码则是用来告诉客户端,发生了什么事情。

为客户端提供了一种理解事务处理结果的便捷方式。

状态码位于响应的起始行中;可以通过三位数字状态码对不同状态进行分类。

200 ~ 299 之间的状态码表示成功。

300 ~ 399 之间的代码表示资源已经被移走了。

400 ~ 499 之间的代码表示客户端的请求错误。

500 ~ 599 之间的状态码表示服务器出错了。

原因短语

原因短语是响应起始行中的租后一个组件。

它为状态码提供了文本形式的解释;比如在HTTP/1.0 200 OK中,OK就是原因短语。

原因短语和状态码是成对出现的。

版本号

版本号会以HTTP/x.y形式出现在请求和响应报文的起始行中。

告知别人自己所遵循的协议版本。

首部

上面内容的重点是请求和响应报文的第一行(方法、状态码、原因短语等);

跟在起始行后面的就是零个、一个(或多个)HTTP首部字段。

常见首部实例:

HTTP规范定义了几种首部字段。

应用程序也可以随意发明自己所用的首部。

  • 通用首部

既可以出现在请求报文中,也可以出现在响应报文中

请求信息首部

首部字段

描述

Client-IP

提供了运行客户端的机器的IP地址

From

提供了客户端用户的E-mail地址

Host

给出了接收请求的服务器的主机名和端口号

Referer

提供了包含当前请求URL的文档的URL

UA-Color

提供了与客户端显示器的显示颜色有关的信息

UA-CPU

给出了客户端CPU的类型或制造商

UA-Disp

提供了与客户端显示器(屏幕)能力有关的信息

UA-OS

给出了运行在客户端机器上的操作系统名称及版本

UA-Pixels

提供了客户端显示器的像素信息

User-Agent

将发起请求的应用程序名称告知服务器

 

Accept首部

首部字段

描述

Accept

告诉服务器能够发送那些媒体类型

Accept-Charset

告诉服务器能够给发送那些字符集

Accept-Encoding

告诉服务器能够发送那些编码方式

Accept-Language

告诉服务器能够发送那些语言

TE

告诉服务器可以使用那些扩展传输编码

 

条件请求首部

首部字段

描述

Expect

允许客户端列出某请求所要求的服务器行为

If-Match

如果实体标记与文档当前的实体标记相匹配,就获取这份文档

If-Modified-Since

除非在某个指定的日期之后资源被修改过,否则就限制这个请求

If-None-Match

如果提供的实体标记与当前文档的标记不相符,就获取文档

If-Range

允许对文档的某个范围进行条件请求

If-Unmodified-Since

除非在某个指定日期之后资源没有被修改过,否则就限制这个请求

Range

如果服务器支持范围请求,就请求资源的指定范围

 

安全请求首部

首部字段

描述

Authorization

包含了客户端提供给服务器,以便对其自身进行认证的数据

Cookie

客户端用它向服务器传送一个令牌————它并不是真正的安全首部,但确实隐含了安全功能

Cookie2

用来说明请求端支持的cookie版本

 

代理请求首部

首部字段

描述

Max-Forward

在通往源端服务器的路径上,将请求转发给其他代理或网关的最大次数——与TRACE方法一同使用

Proxy-Authorization

与Authorization首部相同,但这个首部是在与代理进行认证时使用的

Proxy-Connection

与Connection首部相同,但这个首部是在与代理建立连接时使用的

  • 响应首部

提供更多有关响应的信息

响应信息首部

首部字段

描述

Age

(从最初创建开始)响应持续时间

Public

服务器为其资源支持的请求方法列表

Retry-After

如果资源不可用的话,在此日期或时间重试

Server

服务器应用程序软件的名称和版本

Title

对HTML文档来说,就是HTML文档的源端给出的标题

Warning

比原因短语中更详细的警告报文

 

协商首部

首部字段

描述

Accept-Ranges

对此资源来说,服务器可接受的范围类型

Vary

服务器查看的其他首部的列表,可能会使响应发生变化;也就是说,这是一个首部列表,服务器会根据这些首部的内容挑选处最合适的资源版本发送个客户端

 

安全响应首部

首部字段

描述

Proxy-Authenticate

来自代理的对客户端的质询列表

Set-Cookie

不是真正的安全首部,但隐含有安全功能;可以在客户端设置一个令牌,以便服务器对客户端
进行标志

Set-Cookie2

与Set-Cookie类似

WWW-Authenticate

来自服务器的对客户端的质询列表

  • 实体首部

描述主体的长度和内容,或 资源自身

实体信息首部

首部字段

描述

Allow

列出了可以对此实体执行的请求方法

Location

告知客户端实体实际上位于何处;用于将接收端丁香到资源的位置上去

 

内容首部

首部字段

描述

Content-Base

解析主体中的相对URL时使用的基础URL

Content-Encoding

对主体执行的任意编码方式

Content-Language

理解主体时最适宜使用的自然语言

Content-Length

主体的长度或者尺寸

Content-Location

资源实际所处的位置

Content-MD5

主体的MD5校验和

Content-Range

在整个资源中此实体表示的字节范围

Content-Type

这个主体的对象类型

 

实体缓存首部

首部字段

描述

 ETag

与此实体相关的实体标记

Expires

实体不再有效,要从原始的源端再次获取此实体的日期和时间

Last-Modified

这个实体最后一次被修改的日期和时间

  • 扩展首部

规范中没有定义的新(其他)首部

实体的主体部分

HTTP报文的第三部分是可选的实体主体部分。实体的主体是HTTP报文的负荷。就是HTTP要传输的内容。

比如:图片、视频、文档、邮件等。

猜你喜欢

转载自blog.csdn.net/Simba_cheng/article/details/81835900