《HTTP权威指南》读书笔记——HTTP报文

如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹了。

1、报文流:HTTP报文是个数据块,用于HTTP应用程序之间发送。这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分。这些报文在客户端、服务器和代理之间流动。

1)报文流入源端服务器:报文流入源端服务器,工作完成后,会流回用户的Agent代理中。

2)报文向下游流动:HTTP报文会像河水一样流动。所有报文都会向下游流动,所有报文的发送者都在接收者的上游。

2、报文的组成部分:对报文进行描述的起始行、包含属性的首部块、以及可选的、包含数据的主体部分。如下图所示,为http报文的格式:

1)报文的语法:请求报文和响应报文。请求报文会向web服务器请求一个动作。响应报文会将请求的结果返回给客户端。下图所示的是请求和响应报文示例:

2)起始行:所有的HTTP报文都以一个起始行作为开始。请求报文的起始行说明了要做些什么。响应报文的起始行说明发生了什么。

.请求行:包含了一个方法和一个请求URL,HTTP版本。描述了服务器要对哪个资源执行什么样的操作。所有字段都由空格分隔。

.响应行:承载了状态信息和操作产生的所有结果数据,将其返回给客户端。包含了响应报文使用的HTTP版本、数字状态码,以及描述操作状态的文本形式的原因短语。

3)方法:HTTP规范中定义了一组常用的请求方法。比如,GET方法负责从服务器获取一个文档,POST方法会向服务器发送需要处理的数据,OPTIONS方法用于确定Web服务器的一般功能,或者Web服务器处理特定资源的能力。常用的HTTP方法如下:

GET:从服务器获取一份文档;

HEAD:只从服务器获取文档的首部;

POST:向服务器发送需要处理的数据;

PUT:将请求的主体部分存储在服务器上;

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

OPTIONS:决定可以在服务器上执行哪些方法;

DELETE:从服务器上删除一份文档

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

200:OK 成功,请求的所有数据都在响应主体中

401:未授权,需要输入用户名和密码

404:未找到,服务器无法找到所请求URL对应的资源。

5)原因短语:200 OK中的OK就是原因短语。

6)版本号:说明了应用程序支持的最高HTTP版本。注意,版本号不会当做小数处理。HTTP/2.22比HTTP/2.3的版本要高。

7)首部:

首部实例:

8)主体:HTTP要传输的内容。

3、方法:

1)安全方法:GET方法和HEAD方法的HTTP请求都不会产生什么动作,也就是说不会在服务器上产生什么结果。

GET:用于请求服务器发送某个资源。

HEAD:在服务器响应中只返回首部,不会返回实体的主体部分。这就允许客户端在未获取资源的情况下,对资源的首部进行检查。使用HEAD,可以:

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

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

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

PUT:与GET相反,向服务器写入文档。因为PUT允许用户对内容进行修改,所以很多Web服务器都要求在执行PUT之前,用密码登录。

POST:通常用它来支持HTML的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到它要去的地方。

TRACE:客户端发起一个请求的时候,这个请求可能要穿过防火墙、代理、网关或者其他一些应用程序。每个中间节点都可能会修改原始的HTTP请求。TRACE方法允许客户端在最终请求发送给服务器时,看看它变成了什么样子。原始报文是否,以及如何被毁坏或者修改过。TRACE方法主要用于诊断,用于验证请求是否如愿穿过了请求/响应链。也可以用来查看代理和其他应用程序对用户请求所产生效果。

OPTIONS:请求Web服务器告知其支持的各种功能。

DELETE:请服务器删除请求URL所指定的资源。但是,客户端应用程序无法保证删除操作一定会被执行。因为HTTP规范允许服务器在不通知客户端的情况下撤销请求。

2)扩展方法:指的是没有在HTTP/1.1中定义的方法。

LOCK:允许用户锁定资源

MKCOL:允许用户创建资源

COPY:便于在服务器上复制资源

MOVE:在服务器上移动资源

4、状态码:

100~199:信息状态码。

200~299:成功状态码。

300~399:重定向状态码:要么告诉客户端使用替代位置来访问他们所感兴趣的资源,要么就提供一个替代的响应而不是资源的内容。如果资源已经被移动,可发送一个重定向状态码和一个可选的Location首部来告知客户端资源已经被移走,以及现在可以在哪里找到他。

在报文的首部中添加“If-Modified-Since”首部,可以查询是否被修改过,如果文件没有被修改过,那么将返回304。

400~499:客户端错误状态码:有时候客户端会发送一些服务器无法处理的东西,比如格式错误的请求报文,或者最常见的是请求一个不存在的URL。

400:告知客户端它发送了一个错误的请求。

403:请求被服务器拒了。

404:未找到URL。

405:发起的请求中带有所请求的URL不支持的方法。

500~599:服务器错误状态码:代理尝试着代表客户端与服务器进行交流时,经常会出现问题。代理会发布5xx服务器错误状态码来描述所遇到的问题。

500:服务器遇到一个妨碍它为请求提供服务的错误时,使用此码。

501:客户端发起的请求超出服务器的请求范围(使用了服务器不支持的请求方法)。

5、首部:首部与方法共同工作,决定了客户端和服务器能做什么事情。

1)通用首部:在客户端和服务器段通用的首部,提供了与报文相关的最基本的信息。例如,Date首部,构建报文的时间和日期。

2)请求首部:只在请求报文中有意义的首部。用于说明是谁在发送请求,请求源自何处,或者客户端的喜好及能力。

.Accept首部:为服务器提供了一些额外的信息,比如客户端希望接收什么类型的数据。例如,下面的Accept首部就用来告知服务器客户端会接受与其请求相符的任意媒体类型:Accept:*/*

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

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

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

.条件请求首部:比如,客户端有了一份文档副本,就希望只在服务器上的文档与客户端拥有的副本有所区别时,才请求服务器传输文档。那么客户端可以为请求加上这种限制。

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

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

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

.代理请求首部:

Max-Forward:在通往源端服务器的路径上,将请求转发给其他代理或网关的最大次数。

proxy-Authotization:在与代理进行认证时使用的。

3)响应首部:响应报文有自己的首部集,以便为客户端提供信息(比如,客户端在与那种类型的服务器进行交互)。例如,下列server首部就用来告知客户端它在一个版本1.0的Tiki-Hut服务器进行交互:

server:Tiki-Hut/1.0

4)实体首部:用于应对实体主体部分的首部。

.首部内容,提供了与实体内容有关的特定信息,说明了其类型、尺寸以及处理它所需要的其他有用信息。比如,可以用实体首部来说明实体主体部分的数据类型。例如:Content-Type:text/html;charset=iso-latin-1

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

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

Content-MD5:主体的MD5校验和。

 

 

 

 

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值