HTTP的报文与状态码
本文是《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 | 服务器无法或不愿支持请求的协议版本 | 
HTTP的报文与状态码的更多相关文章
- HTTP请求响应报文&&相关状态码&&GET_POST请求方法  总结
		HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行 请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GE ... 
- HTTP请求响应报文 - 相关状态码 - GET_POST请求方法
		HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行 请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GET ... 
- 《图解Http》 2-6章: 基础,报文,状态码,首部。
		HTTP协议和Cookie 是stateless协议,自身不对请求和响应之间的通信状态进行保存.但随着技术发展,为了实现保存状态的功能,引入了Cookie技术. Cookie在请求和响应报文中写入信息 ... 
- HTTP权威指南-报文与状态码
		所有的报文都向下流动 报文流向 报文组成 HTTP方法 状态码 GET示例 HEAD示例 100~199 信息性状态码 200~299 成功状态码 300~399重定向状态码 400~499 客户端错 ... 
- HTTP响应报文应答状态码及含义
		本应答报文状态码是老猿结合多方资料收集综合后并加以老猿自己的理解进行说明的应答报文状态码,应该是最新最全解释最详尽的,供大家参考: 
- Http报文 状态码
		一.HTTP报文 1.HTTP报文介绍 HTTP报文:用于HTTP协议交互的信息. HTTP报文由报文头部和报文主体(非必须)构成,中间由空行来分隔. 1.1 请求报文:客户端发起的报文. 1).报文 ... 
- HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端
		协议简介 协议,自然语言里面就是契约,也是双方或者多方经过协商达成的一致意见; 契约也即类似于合同,自然有甲方123...,乙方123...,哪些能做,哪些不能做; 通信协议,也即是双方通过网络通信必 ... 
- http的报文结构和状态码的含义
		HTTP响应报文解剖 响应报文结构 HTTP的响应报文也由三部分组成(响应行+响应头+响应体): 以下是一个实际的HTTP响应报文: ①报文协议及版本: ②状态码及状态描述: ③响应报文头,也是由多个 ... 
- (第三章,第四章)http报文内的http信息,返回结果的http状态码
		第三章 http报文内的http信息 用于http协议交互的信息被称为http报文,包括请求报文和响应报文. 1.编码提升传输速率,在传输时编码能有效的处理大量的访问请求.但是编码的操作是计算机完成的 ... 
随机推荐
- NYOJ 762
			容斥原理 http://blog.csdn.net/shiren_bod/article/details/5787722 
- 3.bootstrap练习笔记-媒体内容
			bootstrap练习笔记-多媒体对象 1.在bootstrap中,如果想存放内容,一种解决的方式就是利用media这个class 首先要设置一个div.container作为一个总的容器来存放内容 ... 
- c#读写xml文件
			using System; using System.Collections.Generic; using System.Xml; using System.Text.RegularExpressio ... 
- PAT 1032. 挖掘机技术哪家强(20)
			为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位 ... 
- kendo ui简介
			Kendo UI Web包含所有创建高速HTML5 web app的必备元素:UI组件.数据源.验证.一个MVVM框架.主题.模板等等. 移动HTML5带UI的开发框架层出不穷,常见的有Sencha ... 
- DayPilot 7.9.3373 去掉DEMO
			更新升级倒是蛮快的,多了Gantt图,此处下载先: http://files.cnblogs.com/files/pccai/DayPilot_2.0_4.0_7.9.3373.rar 
- Tarjan
			//求强连通分量 void uni(int x,int y){ if (rank[x]<rank[y]){ fa[x]=y; size[y]+=size[x]; }else{ rank[x]+= ... 
- php根据地址的经纬度查询周围的城市例子
			目前的工作是需要对用户的一些数据进行分析,每个用户都有若干条记录,每条记录中有用户的一个位置,是用经度和纬度表示的.还有一个给定的数据库,存储的是一些已知地点以及他们的经纬度,内有43W多条的数据.现 ... 
- .Net Core Linux centos7行—vscode开发,linux部署运行
			前面搭建好啦linux运行环境,下面搭建windows下的开发环境.并完成调试 参考地址:https://www.microsoft.com/net/core#windows. 按照步骤来就好.安装. ... 
- 记一次MYSQL更新优化
			引言 今天(August 5, 2015 5:34 PM)在给数据库中一张表的结构做一次调整,添加了几个字段,后面对之前的数据进行刷新,刷新的内容是:对其中的一个已有字段url进行匹配,然后更新新加的 ... 
