您的位置:首页 > 理论基础 > 计算机网络

读书笔记(HTTP权威指南)002 -- HTTP报文

2018-02-24 18:09 393 查看
HTTP报文是简单的格式化数据块。由三部分组成:

起始行(start line):对报文进行描述

首部块(header):包含属性

主体(body):可选的、包含数据

起始行和首部都是由行分隔的ASCII文本,每行都以一个由两个字符组成的行终止序列作为结束。实体的主题或者报文的主题(称为主体)是由一个可选的数据块。与起始行和首部不同的是,主体重可以包含文本或二进制数据,也可以为空。





起始行:

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

请求报文起始行(请求行):

包含一个方法和一个请求URL,方法描述了服务器应该执行的操作。请求URL描述了要对哪个资源执行这个方法。请求行还包含HTTP的版本,用来告知服务器,客户端使用的是哪种HTTP。所有这些字段都是由空格分隔。

GET /test/hi-there.txt HTTP/1.1

请求方法为GET,请求URL为/test/hi-there.txt,版本为HTTP/1.1


响应报文起始行(响应行):包含了响应报文使用的HTTP版本、数字状态码,以及描述操作状态的文本形式的原因短语。

方法:请求的起始行以方法作为开始。告知服务器要做些什么,常见的HTTP方法,如图。



状态码:方法时告诉服务器做什么事情的,状态码则用来告诉客户端,发生了什么事情。状态码位于响应的起始行中。在每条响应报文的起始行中返回的。会返回一个数字状态和一个可读的状态。数字码便于程序进行差错处理,而原因短语则便于理解。



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

首部

HTTP首部字段向请求和响应报文中添加了一些附加信息。是一些键/值对的列表。

常见的首部分类



常见的首部实例



安全方法

HTTP定义了一组被称为安全方法的方法,get和head方法,安全方法并不一定是什么动作都不执行的,使用安全方法的目的是当使用引发某一动作的不安全方法时,允许HTTP应用程序开发者通知用户。

方法

GET

通常用于请求服务器发送某个资源。

实例



HEAD

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

使用HEAD的好处

在不获取资源的情况下了解资源的情况(比如,判断其类型)

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

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

实例



PUT方法

PUT方法会向服务器写入文档。PUT方法的意义是让服务器用请求的主体部分来创建一个由所请求的URL命令的新文档,或者,如果那个URL已经存在的话,就用这个主体来替代它。由于PUT允许用户对内容进行修改,一般用密码登录。

实例



POST方法

POST方法一开始是用来向服务器输入数据的。实际上,通常会用它来支持HTML的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到它要去的地方。

实例



TRACE方法

主要用于诊断,也就是说,用于验证请求是否传过来请求/响应链。可以用来查看代理和其他应用程序对用户请求所产生效果。

OPTIONS方法

OPTIONS方法请求Web服务器告知其支持的各种功能。可以访问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法。

实例



DELETE方法

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

实例



状态码

五大类:

100~199 信息性状态码



200~299 成功状态码



300~399 重定向状态码

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



重定向状态码与原因短语





400~499 客户端错误状态码:有时客户端发送一些服务器无法处理的东西,比如格式错误的请求报文,或者是请求一个不存在的URL。好比404 Not Found错误码—这只是服务器在告诉我们,它对请求资源一无所知。





500~599 服务器错误状态码:有时客户端发送一条有效请求,服务器自身却出错了。可能是客户端碰上了服务器的缺陷,或者服务器上的子元素,比如某个网关资源,出错了。代理尝试着代表客户端与服务器进行交流时,经常会出现问题。代理会发布5XX服务器错误状态码来描述所遇到的问题。

服务器错误状态码以及原因短语





首部

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

五大类:

通用首部:提供了与报文相关的最基本的信息。



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

请求的信息型首部:



Accept首部:提供了一种将其喜好和能力告知服务器的方式。Accept首部惠氏连接的两端都受益。客户端会得到想要的内容,服务器不会浪费时间和带宽来发送客户端无法使用的东西。



条件请求首部: 有时客户端希望为请求加上某些限制。例如,客户端存在一个副本,希望服务器上的文档与客户端的副本有差异时,才请求服务器传输文档,通过条件请求首部就可以实现。



安全请求首部:要求客户端在获取特定资源之前,先对自身进行认证。使事务稍微安全一些。安全请求首部。



响应首部:响应首部为客户端提供了一些额外信息。比如谁在响应,响应者功能。

响应的信息性首部



协商首部:如果资源有多种表示方法—比如,如果服务器上有某文档的法语和德语译稿,HTTP、1.1可以为服务器和客户端提供对资源进行协商的能力。



3.安全响应首部



实体首部:提供了有关实体及其内容的大量信息,从有关对象类型的信息、能够对资源使用的各种有效的请求方法。总之,实体首部可以告知报文的接受者它对什么进行处理。



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



实体缓存首部:通用的缓存首部说明了如何或2什么时候进行缓存。实体的缓存首部提供了与被缓存实体有关的信息–比如,验证已缓存的资源副本是否任然有效所需的信息,以及更好的估计已缓存资源何时失效所需的线索。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: