- 下面对一些基本 HTTP 方法进行更为深入的讨论。注意,并不是每个服务器都实现了所有的方法。如果一台服务器要与 HTTP 1.1 兼容,那么只要为其资源实现 GET 方法和 HEAD 方法就可以了。
- 即使服务器实现了所有这些方法,这些方法的使用很可能也是受限的。例如,支持 DELETE 方法或 PUT 方法(本节稍后介绍)的服务器可能并不希望任何人都能够删除或存储资源。这些限制通常都是在服务器的配置中进行设置的,因此会随着站点和服务器的不同而有所不同。
常用7种 HTTP 方法:
| 方法 | 描述 | 是否包含主体 |
|---|---|---|
| GET | 从服务器获取一份文档 | 否 |
| HEAD | 只从服务器获取文档的首部 | 否 |
| POST | 向服务器发送需要处理的数据 | 是 |
| PUT | 将请求的主体部分存储在服务器上 | 是 |
| TRACE | 对可能经过代理服务器传送到服务器上去的报文进行追踪 | 否 |
| OPTIONS | 决定可以在服务器上执行哪些方法 | 否 |
| DELETE | 从服务器上删除一份文档 | 否 |
1. 安全方法
- 安全方法:比如 GET 和 HEAD,使用安全方法的 HTTP 请求不会产生什么动作,不会在服务器上产生什么结果。
- 安全方法并不一定是什么动作都不执行的(实际上,这是由 Web 开发者决定的)。
- 使用安全方法的目的就是当使用可能引发某一动作的不安全方法时,允许 HTTP 应用程序开发者通知用户。
2. GET 方法
- GET 方法:通常用于请求服务器向客户端发送某个资源。HTTP/1.1 要求服务器实现此方法。
3. HEAD 方法
- HEAD 方法:请求服务器向客户端仅发送某个资源的首部,不返回实体的主体部分。
- 这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。
- HEAD 方法的功能:
- 在不获取资源的情况下了解资源的情况(比如,判断其类型);
- 通过查看响应中的状态码,看看某个对象是否存在;
- 通过查看首部,测试资源是否被修改了。
- 服务器开发者必须确保返回的首部与 GET 请求所返回的首部完全相同。遵循 HTTP/1.1 规范,就必须实现 HEAD 方法。
4. PUT 方法
- PUT 方法:向服务器写入文档,即将请求报文的主体部分存储在服务器上。
- 有些发布系统允许用户创建 Web 页面,并用 PUT 直接将其安装到 Web 服务器上去。
- PUT 方法的语义就是让服务器用请求的主体部分来创建一个由所请求的 URL 命名的新文档,或者,如果那个 URL 已经存在的话,就用这个主体来替代它。
- 因为 PUT 允许用户对内容进行修改,所以很多 Web 服务器都要求在执行 PUT 之前,用密码登录。
5. POST 方法
- POST 方法:向服务器发送需要处理的数据。(注:POST 用于向服务器发送数据。PUT 用于向服务器上的资源(例如文件)中存储数据。)
- 通常会用它来支持 HTML 的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到它要去的地方。
6. TRACE 方法
- TRACE 方法:对可能经过代理服务器传送到服务器上去的报文进行追踪。
- 客户端发起一个请求时,这个请求可能要穿过防火墙、代理、网关或其他一些应用程序。每个中间节点都可能会修改原始的 HTTP 请求。TRACE 方法允许客户端在最终将请求发送给服务器时,看看它变成了什么样子。
- TRACE 请求会在目的服务器端发起一个“环回”诊断。行程最后一站的服务器会弹回一条 TRACE 响应,并在响应主体中携带它收到的原始请求报文。这样客户端就可以查看在所有中间 HTTP 应用程序组成的请求 / 响应链上,原始报文是否,以及如何被毁坏或修改过。
- TRACE 请求中不能带有实体的主体部分。TRACE 响应的实体主体部分包含了响应服务器收到的请求的精确副本。
- TRACE 方法主要用于诊断,也就是说,用于验证请求是否如愿穿过了请求 / 响应链。它也是一种很好的工具,可以用来查看代理和其他应用程序对用户请求所产生效果。
- 缺点:它假定中间应用程序对各种不同类型请求(不同的方法——GET、HEAD、POST 等)的处理是相同的。很多 HTTP 应用程序会根据方法的不同做出不同的事情——比如,代理可能会将 POST 请求直接发送给服务器,而将 GET 请求发送给另一个 HTTP 应用程序(比如 Web 缓存)。TRACE 并不提供区分这些方法的机制。通常,中间应用程序会自行决定对 TRACE 请求的处理方式。
7. OPTIONS 方法
- OPTIONS 方法:请求 Web 服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法。(有些服务器可能只支持对一些特殊类型的对象使用特定的操作)。
- 这为客户端应用程序提供了一种手段,使其不用实际访问那些资源就能判定访问各种资源的最优方式。
8. DELETE 方法
- DELETE 方法:请服务器删除请求 URL 所指定的资源。
- 但是,客户端应用程序无法保证删除操作一定会被执行。因为 HTTP 规范允许服务器在不通知客户端的情况下撤销请求。
9. 扩展方法
- 扩展方法:指的就是没有在 HTTP/1.1 规范中定义的方法。
- 服务器会为它所管理的资源实现一些 HTTP 服务,这些方法为开发者提供了一种扩展这些 HTTP 服务能力的手段。
- 比如下列WebDAV HTTP 扩展方法,有助于通过 HTTP 将 Web 内容发布到 Web 服务器上去:
| 方法 | 描述 |
|---|---|
| LOCK | 允许用户“锁定”资源——比如,可以在编辑某个资源的时候将其锁定,以防别人同时对其进行修改 |
| MKCOL | 允许用户创建资源 |
| COPY | 便于在服务器上复制资源 |
| MOVE | 在服务器上移动资源 |
- 并不是所有的扩展方法都是在正式规范中定义的,认识到这一点很重要。如果你定义了一个扩展方法,很可能大部分 HTTP 应用程序都无法理解。同样,你的 HTTP 应用程序也可能会遇到一些其他应用程序在用的,而它并不理解的扩展方法。
- 在这些情况下,最好对扩展方法宽容一些。如果能够在不破坏端到端行为的情况下将带有未知方法的报文传递给下游服务器,代理应尝试传递这些报文。如果可能破坏端到端行为则应以 501 Not Implemented(无法实现)状态码进行响应。最好按惯例“对所发送的内容要求严一点,对所接收的内容宽容一些”来处理扩展方法(以及一般的 HTTP 扩展)。