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.编码提升传输速率,在传输时编码能有效的处理大量的访问请求.但是编码的操作是计算机完成的 ...
随机推荐
- 使用spring方式来实现aop编程
1:什么是aop? Aspect Oriented Programming 面向切面编程 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译 ...
- reveal
链接 界面调试工具Reveal Reveal使用教程 iOS分析UI利器——Reveal及简单破解方法 Reveal使用步骤和 破解Revealapp的试用时间限制 end
- Qt——透明无边框Widget的bug
Experience 最近在封装一些类的时候,打算做一个窗口框架,能实现拖动.缩放.最大最小化.基本样式等功能,可不慎遇见一件无比蛋疼的事情,QWidget最小化后再恢复正常界面,最小化按钮居然仍处于 ...
- 图片左右间隔滚动Jquery特效
图片左右间隔滚动Jquery特效,支持自动播放的开启与关闭,同时支持左右箭头的点击播放,具体处理程序如下 <!DOCTYPE html > <html> <head> ...
- Android 图文数据JSON解析,金山词霸每日一句API的调用
金山词霸开发的免费API http://open.iciba.com/dsapi/ 数据格式为 {","name":"\u7535\u5f71\u7ecf\u5 ...
- 【CSS】css自定义字体
源:http://www.cnblogs.com/lhb25/archive/2011/02/11/1951035.html 1.@font-face 定义一个字体 2.例子
- 【转载】浅谈HTTP中Get与Post的区别
[转载]http://www.cnblogs.com/hyddd/ Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们 ...
- 编译安装apache
1.安装依赖库:“Development Tools” “Server Platform Development” pcre-devel 2.安装apr,apr-util 从yum源安装或去ap ...
- Redis 学习(二)
Redis可以存储以下5种数据类型 1. String 字符串 整数 浮点 2. List 一个链表 3. Set 无序收集器 4. Hash 无序散列表 5. Zset 有序集合
- UIDynamic-附着行为:UIAttachmentBehavior
直接上代码: // // YFAttachmentBehaviorViewController.m // BigShow1949 // // Created by apple on 16/8/25. ...