HTTP状态码
2016-09-13 10:09
239 查看
状态码的职责是当客户端向服务器发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。
状态码的类别
浏览器客户端会自动用Location中提供的地址,重新发送新的Request。 这个过程对用户来说是透明的。
* 1. 在不获取资源的情况下了解资源的情况(比如判断其类型)
* 2. 通过查看Response中的状态码, 看看某个对象是否存在
* 3. 通过查看Header, 测试资源是否被修改了。
实例:先打开Fiddler, 然后启动浏览器访问ditu.google.cn, 你会捕获到很多204
浏览器: 发送Get 方法请求. header中包含 Range: bytes=5303-5336. (意思是请求得到5303-53363这个范围的数据)。
Web服务器:返回一个206 的响应. header中包含Content-Range: bytes 5303-5336/12129(表明这次返回的内容范围)应用场景:
* 1. FlashGet, 迅雷或者HTTP下载工具都是使用206状态码来实现断点续传
* 2. 将大文档分解为多个下载段,实现同时下载 比如,在线看视频
实例:
一些流媒体技术比如在线视频,可以边看边下载。 就是使用206来实现的。
打开Fiddler, 然后用浏览器打开“搜狐视频中的绿箭侠”http://tv.sohu.com/20121011/n354681393.shtml,然后你在Fiddler中就能看到一堆的206
* 1. 浏览器客户端访问 http://map.google.cn
* 2. Web服务器返回Response 301,Location=http://titu.google.cn (告诉客户端我们的资源位于这里, )
* 3. 浏览器客户端会自动再发送一个Request 去访问http://titu.google.cn
访问下面的URL, 会被服务器拒绝. 并且返回403状态http://t2.baidu.com/it/u=1791561788,200960144&fm=0&gp=0.jpg
我个人认为状态码405Method Not Allowed和501 Not Implemented 是一样的意思。都是不支持Request的方法。 (目前我还不知道这两个的区别)
实例: 发送一个是trace方法的Request 给www.google.com
实例:ASP.NET 程序出错
实例:
使用Fiddler Composer 给www.qq.com, 发送一个OPTIONS 方法的Request。服务器就能返回501了。
参考博文:
状态码的类别
状态码 | 类别 | 说明 |
1XX | 信息性状态码(Information) | 接收的请求正在处理 |
2XX | 成功状态码(Success) | 请求正常处理完毕 |
3XX | 重定向状态码(Redirection) (Success) | 需要进行附加操作以完成请求 |
4XX | 客户端错误状态码(Client Error) | 服务器无法处理请求 |
5XX | 服务器错误状态码(Server Error) | 服务器请求出错 |
1XX 信息性状态码
这些状态码是HTTP 1.1引入的。 对于这些状态码的价值还存在争论。状态码 | 状态消息 | 含义 |
---|---|---|
100 | Continue(继续) | 收到了请求的起始部分,客户端应该继续请求 |
101 | Switching Protocols 切换协议 | 服务器正根据客户端的指示将协议切换成 Update Header列出的协议 |
2XX 成功状态码
客户端发起请求时, 这些请求通常都是成功的。服务器有一组用来表示成功的状态码,分别对应于不同类型的请求。状态码 | 状态消息 | 含义 | 实例 |
---|---|---|---|
200 | OK 服务器成功处理了请求 | HTTP协议详解-200 | |
204 | No Content(没有内容) | 请求成功,但没有资源返回 (Response不包括实体的主题 内容, 浏览器不会更新) | 状态码204 |
206 | Partial Content(部分内容) | 对资源的某一部分请求成功 | 状态码206 |
3XX 重定向状态码
重定向状态码用来告诉浏览器客户端,它们访问的资源已被移动, Web服务器发送一个重定向状态码和一个可选的Location Header, 告诉客户端新的资源地址在哪。浏览器客户端会自动用Location中提供的地址,重新发送新的Request。 这个过程对用户来说是透明的。
状态码 | 状态消息 | 含义 | 实例 |
---|---|---|---|
301 | Moved Permanently (永久移除) | 请求的URL已移走。Response中应该包含一个Location URL, 说明资源现在所处的位置 | 状态码301 |
302 | Found(已找到) | 与状态码301类似。但这里的移除是临时的。 客户端会使用Location中 给出的URL,重新发送新的HTTP request | HTTP协议详解-302 |
303 | See Other(参见其他) | 类似302 | |
304 | Not Modified(未修改) | 客户的缓存资源是最新的, 要求客户端使 用缓存 | HTTP协议之缓存-304 |
4XX 客户端错误状态码
有时客户端会发送一些服务器无法处理的东西,比如格式错误的Request, 或者最常见的是, 请求一个不存在的URL。状态码 | 状态消息 | 含义 | 实例 |
---|---|---|---|
400 | Bad Request (坏请求) | 请求报文中存在语法错误 | 状态码400 |
401 | Unauthorized(未授权) | 客户端需要通过HTTP认证 | HTTP协议之基本认证-401 |
403 | Forbidden(禁止) | 请求被服务器拒绝了 | 状态码403 |
404 | Not Found(未找到) | 未找到资源 | HTTP协议详解-404 |
405 | Method Not Allowed (不允许使用的方法) | 不支持该Request的方法。 | 状态码405 |
5XX服务器错误状态码
有时,客户端发送了一条有效Request, Web服务器自身却出错了。可能是Web服务器运行出错了,或者网站都挂了。 5XX就是用来描述服务器错误的。状态码 | 状态消息 | 含义 | 实例 |
---|---|---|---|
500 | Internal Server Error(内部服务器错误) | 服务器遇到一个错误,使其无法为请求提供服务 | 状态码500 |
501 | Not Implemented(未实现) | 客户端发起的请求超出服务器的能力范围(比如,使 用了服务器不支持的请求方法)时,使用此状态码。 | 状态码501 |
502 | Bad Gateway(网关故障) | 代理使用的服务器遇到了上游的无效响应 | 状态码502 |
503 | Service Unavailable(未提供此服务) | 服务器处于超负载或正在停机维护,无法处理请求) | |
505 | HTTP Version Not Supported (不支持的HTTP版本) | 服务器收到的请求使用了它不支持的HTTP协议版本。 | 状态码505 |
状态码详细例子:
204 No Content(没有内容)
返回的Response中只有一些Header和一个状态行,没有实体的主题内容(没有response body)204状态码的作用在于:* 1. 在不获取资源的情况下了解资源的情况(比如判断其类型)
* 2. 通过查看Response中的状态码, 看看某个对象是否存在
* 3. 通过查看Header, 测试资源是否被修改了。
实例:先打开Fiddler, 然后启动浏览器访问ditu.google.cn, 你会捕获到很多204
206 Partial Content(部分内容)
206状态码表示客户端进行了范围请求,同时服务器成功地执行了这部分的GET请求。详解:浏览器: 发送Get 方法请求. header中包含 Range: bytes=5303-5336. (意思是请求得到5303-53363这个范围的数据)。
Web服务器:返回一个206 的响应. header中包含Content-Range: bytes 5303-5336/12129(表明这次返回的内容范围)应用场景:
* 1. FlashGet, 迅雷或者HTTP下载工具都是使用206状态码来实现断点续传
* 2. 将大文档分解为多个下载段,实现同时下载 比如,在线看视频
实例:
一些流媒体技术比如在线视频,可以边看边下载。 就是使用206来实现的。
打开Fiddler, 然后用浏览器打开“搜狐视频中的绿箭侠”http://tv.sohu.com/20121011/n354681393.shtml,然后你在Fiddler中就能看到一堆的206
301 Moved Permanently(永久移除)
请求的URL已移走。Response中应该包含一个Location URL, 说明资源现在所处的位置。例* 1. 浏览器客户端访问 http://map.google.cn
* 2. Web服务器返回Response 301,Location=http://titu.google.cn (告诉客户端我们的资源位于这里, )
* 3. 浏览器客户端会自动再发送一个Request 去访问http://titu.google.cn
400 Bad Request(坏请求)
发送的Request中的数据有错误(比如:表单有错误,Cookie有错误)。403 Forbidden(禁止)
Web客户端发送的请求被Web服务器拒绝了, 如果服务器想说明为什么拒绝请求,可以包含实体的主体部分来对原因进行描述。但这个状态码通常是服务器不想说明拒绝原因。访问下面的URL, 会被服务器拒绝. 并且返回403状态http://t2.baidu.com/it/u=1791561788,200960144&fm=0&gp=0.jpg
405 Method Not Allowed(不允许使用的方法)
405是指Web服务器不支持Request中的方法。我个人认为状态码405Method Not Allowed和501 Not Implemented 是一样的意思。都是不支持Request的方法。 (目前我还不知道这两个的区别)
实例: 发送一个是trace方法的Request 给www.google.com
500 Internal Server Error(内部服务器错误)
这个太常见了, 我们开发网站的时候,当我们的程序出错了时,就会返回500错误。实例:ASP.NET 程序出错
501 Not Implemented(未实现)
客户端发起的请求超出服务器的能力范围 (比如,使用了服务器不支持的请求方法)时,使用此状态码)。 一般的Web服务器只支持GET和POST方法。实例:
使用Fiddler Composer 给www.qq.com, 发送一个OPTIONS 方法的Request。服务器就能返回501了。
参考博文:
http://kb.cnblogs.com/page/168720/#code5xx
相关文章推荐
- 大型网络不得不考虑的几个问题?
- HTTP常见状态码
- 打印机共享为什么老是出现“操作无法完成(错误 0X00000709)。再次检查打印机名称、并确保打印机连接网络
- https://material.google.com/material-design/environment.html
- 简单介绍一下android studio中网络请求方法的步骤和环境搭建
- 前博客 http://bbs.landingbj.com/mytopic.jsp?action=mytopic&username=57071
- Vert.x核心模块 HTTP客户端推送 (九【4】)
- Vert.x 内核模块 编写HTTP服务器(八【3】)
- Vert.x 内核模块 编写HTTP服务器(七【2】)
- Vert.x 内核模块 编写HTTP服务器(六【1】)
- Vert.x 核心模块 编写TCP服务器端(五)
- Android缓存机制:LruCache+AsyncTask缓存和显示网络图片
- scala sbt proxy https error解决办法
- Linux不能连接网络问题
- Wireshark找不到网络接口问题
- VMware 网络连接模式
- 网络编程(8)—— IP地址和域名之间的转换
- HTTP协议1
- javase计算机网络功能
- 【OVS2.5.0源码分析】sFlow实现分析(2)