关于HTTP的一点总结(三)—— 请求方法和状态码

请求方法

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

关于HTTP的一点总结(一)—— GET和POST中,已经详细写了有关GET和POST方法的内容,这里就不再重复了。

  1. HEAD请求

    类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。

    使用HEAD请求可以:

    • 在不获取资源的情况下,了解资源的情况,比如,判断其类型
    • 通过查看响应中的状态码,判断某个对象是否存在
    • 通过查看首部,测试资源是否被修改了

    服务器开发者必须确保HEAD请求所返回的首部与GET请求返回的首部完全相同。

  2. PUT请求

    与GET从服务器读取文档相反,PUT方法会向服务器写入文档。

    关于PUT请求:

    • 有些发布系统允许用户创建Web页面,并用PUT直接将其安装到Web服务器上去。

    • PUT方法的语义就是让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档。如果那个URL已经存在的话,就用这个主体替代它。

    • PUT允许用户对内容进行修改,故很多Web服务器都要求在执行PUT操作之前使用密码登录认证。

  3. DELETE请求

    请求服务器删除指定的页面。

    值得留意的是,客户端应用程序无法保证DELETE删除操作一定会被执行,因为HTTP允许服务器在不通知客户端的情况下撤销请求。

  4. OPTIONS请求

    OPTIONS方法用于描述目标资源的通信选项。

    OPTIONS方法请求Web服务器告知其支持的各种功能。可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法,有些服务器可能只支持对一些特殊类型的对象使用特定的操作。

    这对客户端应用程序提供了一种手段,使其不用访问那些资源就能判定访问各种资源的最优方式。

  5. TRACE 请求

    回显服务器收到的请求,主要用于测试或诊断。

    客户端发起一个请求时,该请求可能会穿过防火墙、代理、网关或者其它应用程序,每个中间节点都有可能修改原始的HTTP请求。TRACE方法让客户端有了查看最终发给服务器的请求长什么样子的能力。

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

  6. CONNECT请求

    CONNECT方法建立一个到由目标资源标识的服务器的隧道。

常见状态码

2XX 成功

200 OK 请求成功
204 No Content 请求成功,但没有新文档,浏览器应该继续显示原来的文档
206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它,也就是进行了一次范围请求

3XX 重定向

301 Moved Permanently 永久性重定向,所请求的资源已经转移到了新的URL
302 Found 临时性重定向,所请求的资源临时转移到了新的URL
303 See Other 所请求的资源可在别的url下被找到,这个方法的存在主要是为了允许由脚本激活的POST请求输出重定向到一个新的资源
304 Not Modified 如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304 响应禁止包含消息体,因此始终以消息头后的第一个空行结尾
307 Temporary Redirect 临时性重定向,请求的资源现在临时从不同的URL响应请求,客户端应当继续向原有地址发送以后的请求

4XX 客户端错误

400 Bad Request 请求报文中语义有误或者请求参数有误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证
403 Forbidden 服务器已经理解请求,但是拒绝执行它
404 Not Found 请求失败,请求所希望得到的资源未被在服务器上发现

5XX 服务器错误

500 Internal Server Error 服务器内部错误,无法完成请求
502 Bad Gateway 此错误响应表明服务器作为网关需要得到一个处理这个请求的响应,但是得到一个错误的响应
503 Service Unavailable 用来说明服务器现在无法为该请求提供服务,但将来可以。如果服务器知道资源什么时候会变为可用,可以在响应中包含一个Retry-After首部