【HTTP】Http报文

HTTP报文分请求报文和响应报文两类,每个报文由一下三个部分:

起始行(start  line)

请求报文的起始行说明了要做什么,响应报文的起始行说明发生了什么。起始行里的内容用空格符分隔。

首部(header)

主体(body)

一个回车符(ASCII码)加上一个换行符(ASCII码10),也可以写作CRLF作为起始行的终止,CRLF和一行空行作为首部的终止。主体末尾以CRLR作为结束。

请求报文的格式如下:

<Method><request-URL><version>

<headers>


<entity-body>

响应报文的格式如下:

<version><status><reason-phrase>

<headers>


<entity-body>

对报文起始行的详解:

1、<Method> 拓展方法一共有7种方法,GET HEAD POST PUT TRACE OPTIONS DELETE ,用来告诉服务器做什么事情。

2、<Code> 状态码 用来告诉客户端,发生了什么事情。客户端向一个HTTP服务器发送请求报文时,会发生很多事情,有成功,有失败,有所请求的资源没找到,有访问资源的权限不足,资源被移动到其他地方。200到299之间表示成功;300到399之间表示资源已经被移走了。400到499之间表示客户端的请求出错了。500到599之间表示服务器出错了。

对报文首部的讲解

分类:通用首部(请求报文和响应报文中都可以出现),请求首部,响应首部,实体首部(描述主体的长度和内容,或者资源自身),拓展首部。

格式:名字+:+字段值+ 空格 +字段值......CRLF。如果字段值内容过多,可以直接另起一行显示。

对报文主体的讲解

HTTP报文可以承载很多类型的数据:图片、视频、HTML文档、软件应用程序、信用卡事务、电子邮件。

HTTP定义了一组被称为安全方法的方法。GETheHEAD方法都被认为是安全的。安全方法并不一定是什么动作都不执行的,这是由Web开发者决定的。使用安全方法的目的就是当使用可能引发某一动作的不安全方法时,允许HTTP应用程序开发者通知用户。

HEAD方法:

服务器响应只返回首部,这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。即:

在不获取资源的请款下了解资源的情况。

通过查看响应中的状态码,看看某个对象是否存在。

通过查看首部,测试资源是否被修改了。

PUT方法:

向服务器写入文档(存储数据),让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档,或者如果那个URL已经存在的话,就用这个主体来替代它。

TRACE方法:

该请求主要用于诊断,会在目的服务器端发起一个“环回”诊断。行程最后一站的服务器会弹回一条TRACE响应,并在响应主体中携带它收到的原始请求报文。这个客户端就可以查看在所有中间HTTP应用程序组成的请求/响应链上,原始报文是否、以及如何被毁坏活修改过。


报文首部


通用首部

提供了与报文相关的最基本的信息,在请求报文和响应报文中都可以出现。

1)通用信息性首部

Connection  允许客户端和服务器指定于请求或响应连接有关的选项

Date  提供日期和时间标志

MIME-Version  给出了发送端使用的MIME版本

Trailer  如果报文采用分块传输编码(chunked transfer encoding)方式,就可以用这个首部列出位于报文拖挂(trailer)部分的首部集合

Transfer-Encoding  告知接受端为了保证报文的可靠传输,对报文采用了什么编码方式

Update  给出了发送端可能想要“升级”使用的新版本或协议

Via 显示了报文经过的中间节点(代理、网关)

2)通用缓存首部

Cache-Control  用于随报文传送缓存指示   

Pragma   另一种随报文传送指示的方式,但并不专用于缓存


请求首部

只在请求报文中有意义的首部,用于说明是谁或什么在放请求、请求源自何处,或者客户端的洗好及能力。服务器可以根据请求首部给出的客户端信息,试着为客户端提供更好的响应。

1)请求信息性首部

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

From 提供了客户端用户的E-mail地址(RFC822E-mail地址格式)

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

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

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

UA-CPU 客户端CPU的类型和制造商

UA-Disp 客户端显示器能力有关的信息

UA-OS 运载客户端机器上的操作系统名称及版本

UA-Pixels 客户端显示器的像素信息

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

2)Accept首部

提供一种将其喜好和能力告知服务器的方式,包括他们的想要什么,可以使用什么,以及最重要的,他们不想要什么。

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

Accept-Charset 告诉服务器能够发送哪些字符集

Accept-Encoding 告诉服务器能够发送哪些编码方式

Accept-Language 告诉服务器能够发送哪些语言

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

3)条件请求首部

客户端希望加上某些限制,通过条件请求首部,客户端就可以请求加上限制,要求服务器在对请求进行响应之前,确保某个条件为真。

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

If-Match 如果尸体标记于文档当前的尸体标记相匹配,就获取这份文档

If-None-Match 如果提供的尸体标记于当前文档的尸体标记不相符,就获取文档

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

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

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

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

4)安全请求首部

Http本身就支持一种简单的机制,可以对请求进行质询/响应认证。这种机制要求客户端在获取特定资源之前,先对自身进行认证,这样就可以使事务稍微安全一些。

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

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

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

5)代理请求首部

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

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

Proxy-Connection 于Connection首部相同,但是这个首部是在于代理尽力连接时使用的。


响应首部

只在响应报文里,响应首部为客户端提供了一些额外信息,比如谁在发送响应,响应者的功能,甚至与响应相关的一些特殊指令。这些首部有助于客户端处理响应,并在捡来发起更好的请求。

1)响应信息性首部

Age 从最初创建开始响应持续地时间

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

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

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

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

Warning 比原因短语更详细一些的警告报文

2)协商首部

如果资源有多中表示方法,比如 服务器上有某文档的法语和德语译稿

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

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

3)安全响应首部

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

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

Set-Cookie 可以在客户端设置一个令牌,一边服务器对客户端进行标识

set-Cookie2 RFC2965 Cookie定义


实体首部

用来描述HTTP报文的负荷,请求报文和响应报文都可能包含实体部分,所以实体首部都可能出现在请求报文和响应报文里。

1)信息性首部

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

Location 告知客户端实体使劲上位于何处,用于将接收端定向到资源的位置(URL)上

2)内容首部

提供了与实体内容有关的特定信息,说明了其类型、尺寸以及处理它所需的其他有用信息。

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

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

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

Content-Length 主体长度或尺寸

Content-Location 资源实际所处的位置

Content-MD5 主体的MD5校验和

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

Content-Type 这个主体的对象类型

3)实体缓存首部

说明了如何活什么时候进行缓存,实体缓存首部提供了于被缓存实体有关的信息。

ETag 与此实体相关的实体标注

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

Last-Modified 这个实体最后一次呗修改的日期和时间




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值