HTTP的报文与状态码

时间:2022-12-08 13:43:56

本文是《HTTP权威指南》的读书笔记

HTTP报文是简单的格式化数据块。每条报文都包含一条来自客户端的请求或一条来自服务器的响应。它们由三部分组成:

  • 对报文进行描述的起始行(start line);
  • 包含属性的首部块(head);
  • 可选的,包含数据的主体(body)部分;

请求报文的格式与响应报文的格式稍有不同:

  • 请求报文的格式为:
<method><request-URL><version>
<headers>
<entity-body>
  • 响应报文的格式为:
<version><status><reason-phrase>
<headers>
<entity-body>

报文各部分的简要描述:

  • method,客户端希望服务器对资源执行的动作,如GET,HEAD,POST等;
  • requset-URL,命名所请求的资源;
  • version,报文所使用的HTTP的版本;
  • status,状态码,用三位数字描述请求过程中所发生的情况,如200,表示请求成功;
  • reasuon-phrase,前面状态码的可读短语;
  • headers,首部,可以有零个或多个首部,每个首部都包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,最后是一个CRLF;
  • entity-body,主体部分,包含一个由任意数据组成的数据块;

常用的HTTP方法:

方法 描述 是否包含主体
GET 从服务器获取信息
HEAD 只从服务器获取信息的首部
POST 向服务器发送需要处理的数据
TRACE 对可能经过代理服务器传到服务器上去的报文进行追踪
PUT 将请求的主体存储在服务器上
OPTIONS 决定可以在服务器上执行哪些方法
DELETE 从服务器上删除一份文档

HTTP定义了一组称为安全方法的方法:GET和HEAD,因为这两个方法都不会在服务器上产生什么结果(不会对服务器上的资源进行更改,删除等);TRACE方法允许客户端在最终将请求发送给服务器时,看看它变成什么样子了(发起一个请求时,这个请求可能会经过一系列的中间节点,如代理,防火墙等,每个中间节点都可能会修改原始的HTTP请求;)

状态码用来描述请求过程发生的情况,状态码的分类:

整体范围 已定义范围 分类
100~199 100~101 信息提示
200~299 200~206 成功
300~399 300~305 重定向
400~499 400~415 客户端错误
500~599 500~505 服务器错误

最常见的状态码:

状态码 原因短语 含义
200 OK 成功,请求的所有数据都在响应主体中
401 Unauthorized(未授权) 需要输入用户名和密码
404 Not Found(没有找到) 服务器无法找到请求URL所对应的资源

状态码的详细信息:

1. 100~199信息状态码
状态码 原因短语 含义
100 Continue 收到请求的初始部分,请客户端继续
101 Switching Protocols 服务器将根据客户端的指定,将协议切换为Update首部所列的协议

对于100状态码的使用,如果客户端想向服务器发送一个实体,但不知道服务器是否可以接受,则可以发送带有100状态码的请求,服务器收到这个状态杩的请求后,根据自己的情况,对这个请求进行响应;

2. 200~299 成功状态码
状态码 原因短语 含义
200 OK 请求成功,所有数据都在响应主体中
201 Created 用于创建服务器对象的请求,服务器必须在发送这个状态码之前创建好对象
202 Accepted 请求已接受,但服务器还未对其执行任何动作
203 Non-Authoriative 实体首部所包含信息不是来自源端服务器,是资源的一个副本
204 No Content 响应报文中没有主体的实体部分,只有首部与状态行;
205 Reset Content 让浏览器清除当前页面的所有HTML表单元素
206 Parial Content 成功执行了一个部分请求
3. 300~399 重定向状态码
状态码 原因短语 含义
300 Multiple Choice 客户端请求一个实际指向多个资源的URL时返回这个状态码,让用户进行选择
301 Moved Permanently 在请求的URL已被移除时使用,响应的首部会包含资源现在所处的URL
302 Found 与301类似,使用首部给出的URL来临时定位资源,但将来的请求仍使用老的URL
304 Not Modified 带这个状态码的响应不会包含实体的主体部分
305 Used Proxy 说明必须通过代理来访问资源,代理位置由Location首部给出
307 Temporaty Redirect 与302类似
4.400-499 客户端错误状态码
状态码 原因短语 含义
400 Bad Request 发送了一个错误的请求
401 Unauthorized 在得到资源前,需要对客户端的身份进行验证
402 Payment Required 保留,还未使用
403 Forbidden 请求被拒绝
404 Not Found 请求的资源没有找到
405 Method Not Allowed 使用不被允许的方法对资源进行访问,响应的Allows首部会包含可以使用的方法
406 Not Acceptable 客户端指定参数说明它们可以接收什么类型的实体,服务器没有客户端所希望的类型的资源时,返回该状态码
407 Proxy Authentication Required 与401类似,用于要求对资源认证的代理服务器
408 Request Timeout 请求超时
409 Conflict 请求可能会在资源上引发冲突,响应中会包含描述冲突的主体
410 Gone 与404类似,但服务器曾经存在该资源
411 Length Required 服务器要求请求报文中包含Content-Length首部时使用
412 Proconditin Failed 客户端发起条件请求,但其中一个条件失败了
413 Request Entity Too Large 客户端发送的实体比服务器希望处理的要大
414 Request URI Too Long 请求URI过长
415 Unsupported Media Type 服务器无法支持客户端所发实体的内容类型
416 Request Range Not Satisfiable 请求的范围无效或无法满足
417 Expectation Failed 服务器无法满足请求报文中Except首部中的期望
5.500~599 服务器错误状态码
状态码 原因短语 含义
500 Internal Server Error 服务器遇到一个妨碍它为请求提供服务的错错误
501 Not Implemented 请求超出服务器的能力范围(如,使用了服务器不支持的请求方法)
502 Bad Gateway 代为代理或网关的服务器无法连接到其父网关
503 Service Unavailable 服务器现在无法为请求提供服务
504 Gateway Timeout 网关或代理在请求另一服务器响应时超时了
505 HTTP Version Not Supported 服务器无法或不愿支持请求的协议版本