HTTP/1.1报文详解 (2)

请求服务器删除URL所指示的资源,但是客户端无法保证删除操作一定会被执行,除非在响应式服务器打算删除资源或者将其移动到无法访问的位置。可能的响应:

如果响应包含描述状态的实体,则响应200(确定);

如果尚未执行删除操作,则响应202(接受);

如果已执行该操作,并且响应不包含任何实体,则响应204(无内容)。

此方法的响应不可缓存。

TRACE

一个请求从客户端到服务端,中间可能会经历各种代理、网关等程序,每个中间节点都可能修改原始HTTP请求。为此,通过TRACE,服务端会在接收到请求后反馈一个TRACE响应,并且在响应主体中携带它收到的原始请求报文。客户端拿到TRACE响应,就可以进行测试和诊断了。其中Via标头字段特别有用,它用于充当请求链的跟踪。

可以使用Max-Forwards标头字段限制请求链的长度,这对于测试无限循环中转发消息的代理很有用。

如果请求有效,则响应应该在实体正文中包含整个请求消息,其 Content-Type为"message/http"。对此方法的响应绝对不能缓存。

TRACE允跨站点跟踪问题,并且可能使黑客可以选择窃取您的cookie信息。基于安全的考虑,一般的服务器会关掉TRACE:

TraceEnable off

这样执行TRACE会导致客户端收到一个405不允许使用方法的状态码。

CONNECT

CONNECT 方法可以开启一个客户端与所请求资源之间的双向沟通的通道。它可以用来创建隧道(tunnel)。

例如,CONNECT 可以用来访问采用了 SSL (HTTPS) 协议的站点。客户端要求代理服务器将 TCP 连接作为通往目的主机隧道。之后该服务器会代替客户端与目的主机建立连接。连接建立好之后,代理服务器会面向客户端发送或接收 TCP 消息流。

OPTIONS

通过该方法,可以请求服务器获取Request-URI对应支持的各种通信选项的信息。最常见的如:询问服务器当前URI支持哪些请求方法。

此方法响应不能缓存。

方法的安全性与幂等性

所谓安全性,就是无论方法执行多少次,服务器上的数据都不会被改变。

安全方法:GET、HEAD;

不安全方法:POST、PUT、DELETE操作则会改动数据。

所谓幂等,就是多次执行一个方法,结果都是相同的。

幂等方法:GET、HEAD、PUT、DELETE;

非幂等方法:POST。

3.2.2、Request-URI

URI,Uniform Resource Identifier,请求的统一资源标识符。

3.2.2.1、URI与URL什么关系?

我们经常会用到这两个概念,但是他们是什么意思呢?

URI,Uniform Resource Identifier,统一资源标识符,能够唯一的标识网上的一个资源,比如,我的网站IT宅的Logo:

https://www.itzhai.com/resources/images/itzhai_logo_home_page.jpg

只要在世界的任何一个有网络的地方,发起请求,就可以拿到这个图片,这个URI具有唯一性。那什么是URL呢?

URI有两种形式:URL和URN。

URL

URL,Uniform Resource Locator,统一资源定位符,描述了一台特定服务器上某个资源的特定位置。例如上面的链接就是一个统一资源定位符:

image-20200813221737724

secheme方案:指定方位资源所使用的协议类型,如HTTPS;

主机与端口:英特网地址,即域名,这里默认为80端口;

路径:其余部分指定web服务器上的某个资源。

几乎所有的 URI都是URL。

一个完整的URL格式如下:

image-20200824232924494

用户名和密码:有写服务器要求输入用户名和密码才允许用户访问数据,如FTP;

?query 查询字符串:可以通过查询字符串进行查询来缩小所请求资源类型的范围;

fragment片段:指向HTML文档中特定的图片或者小节。

URN

URL,Uniform Resource Name,统一资源名,作为特定内容的唯一名称,与资源所在位置无关。也就是说,我可以给一份文档定义一个URN,不管你把这个文档放到哪里,有多少个URL,但是都只有唯一个URN。举个例子,因特网标准文档 RFC 3986不管存在哪个服务器上,都可以用唯一的URN来命名:

urn:ietf:rfc:3986

URN处于试验阶段,暂未大范围使用。

再通俗易懂点来说:URN就相当于身份证,通过特定的规则,制定了一串唯一的字符串作为你的身份证,但是没有规定身份证一定要放在哪里,只是作为你的个人唯一凭证。URL相当于是快递单上的地址,根据地址,快递员一定可以把快递送到唯一的一个目的地。

3.2.3、HTTP-Version

指定了当前请求用到的HTTP协议版本。

3.3、消息头

通过传递消息头(首部),服务器和客户端可以把自己的信息或者是请求响应相关信息进行传递。

可以把首部分为:通用首部,请求首部,响应首部,实体首部,扩展首部。下面就来详细介绍下。

3.3.1、通用首部

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpyfdf.html