什么是HTTP?
- HTTP(HyperText Transfer Protocol,超文本传输协议),是一种网络传输协议。
- HTTP是一种无状态的协议(不建立持久的链接,无记忆功能)。
- HTTP是一个客户端和服务器端请求和应答的标准(TCP)。
一个完整的
HTTP请求
,通常有以下7个步骤:
- 建立TCP连接
- web浏览器向web服务器发送请求命令(GET、POST、URL等)
- web浏览器发送请求头信息
- web服务器应答
- web服务器发送应答头信息
- web服务器向web浏览器发送数据
- web服务器关闭TCP连接
GET请求(默认)
- 一般用于查询信息
- 使用URL传递参数,参数都显示在URL中
- 对所发送的信息量有限制,一般在2000个字符
POST请求
- 场景:密码、敏感性文字、数据量大
- 一般用于新建、修改、删除服务器上的资源
- 对所发送的信息量无限制
HTTP状态码,其中首位数字定义了状态码的类型:
- 1XX:信息。
- 2XX:成功。200 OK
- 3XX:重定向。
- 4XX:客户端错误。
- 5XX:服务器错误
- 百度百科:http://baike.baidu.com/link?url=44T_WOCQdcIHb4tUEtSwiDMveUmryRt-Q3H5Pl53E30Uytv9tlj43-BAzfsJ2vwzn33FcCfp2UsC64h-Mhw1F_#7
服务器返回的14种常见HTTP状态码
2016-12-08
Android开发中文站
- 当我们从客户端向服务器发送请求时,服务器向我们返回状态码
- 状态码就是告诉我们服务器响应的状态
- 状态码是由3位数字和原因短语组成的(比如最常见的:200 OK)
- 其中第一位数字表示响应类别,响应类别从1到5分为五种。(add:其实我查阅资料发现还有一个6打头的一个 600 Unparseable Response Headers。表示服务器没有返回响应头部,只返回实体内容,也算做服务器错误状态码吧,不过绝对不常见)
- RFC2616(用来指定HTTP协议标准的文档)标准定义的就有四十多种,加上扩展能达到六十种
不过常见的大概只有十四种
状态码 | 响应类别 | 原因短语 |
1XX | 信息性状态码(Informational) | 服务器正在处理请求 |
2XX | 成功状态码(Success) | 请求已正常处理完毕 |
3XX | 重定向状态码(Redirection) | 需要进行额外操作以完成请求 |
4XX | 客户端错误状态码(Client Error) | 客户端原因导致服务器无法处理请求 |
5XX | 服务器错误状态码(Server Error) | 服务器原因导致处理请求出错 |
2XX 成功
200 OK
表示请求被服务器正常处理
最常见的就是这个了
随着这个状态码返回的信息跟你的请求方法有关
比如GET请求,请求的资源会作为响应实体返回
而HEAD请求,信息只存在于响应报文首部,因为它不会返回报文实体,只返回报文首部
204 No Content
表示请求已成功处理,但是没有内容返回(就应该没有内容返回的状况)
也就是返回的响应报文中没有报文实体(其实是没有报文实体的主体部分)
浏览器向服务器发送请求后收到了204,那么浏览器页面不会发生更新
一般用在只是客户端向服务器发送信息,而服务器不用向客户端返回什么信息的情况
206 Partial Content
表示服务器已经完成了部分GET请求(客户端进行了范围请求)
响应报文中包含Content-Range指定范围的实体内容
3XX 重定向
301 Moved Permanently
永久重定向,表示请求的资源已经永久的搬到了其他位置
就是说资源已经被分配了新的URI
新的URI应该提示在响应报文的Location首部字段
只要不是HEAD请求,响应实体应该包含新URI的超链接和简短的说明
302 Found
临时重定向,表示请求的资源临时搬到了其他位置
请求的资源暂时被配到到了新的URI
和301很像,只不过资源是临时移动,资源在将来可能还会改变
同样地,新的临时URI应该提示在响应报文的Location首部字段
只要不是HEAD请求,响应实体应该包含新URI的超链接和简短的说明
303 See Other
表示请求资源存在另一个URI,应使用GET定向获取请求资源
303功能与302一样,区别只是303明确客户端应该使用GET访问
(很多HTTP/1.1之前的浏览器不能理解303,但是大家都把302当303对待,使用GET请求新URI)
304 Not Modified
表示客户端发送附带条件的请求(GET方法请求报文中的IF…)时,条件不满足
返回304时,不包含任何响应主体
虽然304被划分在3XX,但和重定向一毛钱关系都没有
307 Temporary Redirect
临时重定向,和302有着相同含义
尽管302标准禁止POST变为GET,但没人听他的
而307就会遵照标准,不会从POST变为GET
但处理响应行为,各个浏览器可能不同
4XX 客户端错误
400 Bad Request
表示请求报文存在语法错误或参数错误,服务器不理解
服务器不应该重复提交这个请求
需要修改请求内容后再次发送
401 Unauthorized
表示发送的请求需要有HTTP认证信息或者是认证失败了
返回401的响应必须包含一个适用于被请求资源的WWW-Authenticate首部以质询用户信息
浏览器初次接受401时,会弹出认证窗口
403 Forbidden
表示对请求资源的访问被服务器拒绝了
服务器可以对此作出解释,也可以不解释
想说明的话可以在响应实体的主体部分描述原因
比如说你可能没有访问权限
404 Not Found
表示服务器找不到你请求的资源
也有可能服务器就是不想给你然后骗你找不到(⊙ˍ⊙)
而且大多服务器都是这么玩这个状态码的
5XX 服务器错误
500 Internal Server Error
表示服务器执行请求的时候出错了
可能是Web应用有bug或临时故障
更有可能是服务器源代码有bug…
503 Service Unavailable
表示服务器超负载或正停机维护,无法处理请求
如果服务器知道还需要多长时间,就写入Retry-After首部字段返回