HTTP几种常用状态码的使用

标准

稻子:

http协议发送头详解:

GET /hrsys/%7B$web_url%7D/images/js/ajax.js HTTP/1.1【表示发送的get请求,请求的资源是ajax.js 使用的http1.1协议】 Accept: /【表示客户端可以接受任何数据】 Referer: http://localhost/hrsys/index.php【表示请求从哪儿来】 Accept-Language: zh-CN【页面接受语言】 User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET 【客户浏览器的信息】CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) Accept-Encoding: gzip, deflate【表示接受什么样的数据压缩格式】 Host: localhost【主机名,默认80端口】 Connection: Keep-Alive【连接方式,表示不要立即断掉请求】 Cookie: PHPSESSID=7ugb35h6i2il1m2jpihug7srj4【cookie】

http协议响应头详解:

HTTP/1.1 200 OK【200 OK 表示客户端请求成功】 Date: Mon, 17 Sep 2012 06:28:59 GMT【告诉浏览器,请求的页面更新时间】 Server: Apache/2.2.21 (Win64) PHP/5.3.8【表示告诉浏览器,服务器情况】 X-Powered-By: PHP/5.3.8【PHP版本】 Expires: Thu, 19 Nov 1981 08:52:00 GMT【返回时间】 Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0【缓存控制】 Pragma: no-cache Content-Length: 289【表示会送的数据的长度有289字节】 Keep-Alive: timeout=5, max=100【长连接控制】 Connection: Keep-Alive Content-Type: text/html; charset=utf-8【内容说明】

状态码的说明:

  • 100-199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程

  • 200-299 表示成功接收请求并已完成整个处理过程,常用200

  • 300-399 未完成请求,客户需要进一步细化,例如,请求的资源已经移动一个新地址,常用302,304

  • 400-499 客户端的请求有错误,常用404

  • 500-599 服务器端出现错误,常用500

几种常用状态码的使用:

1、302状态码的使用

比如我们现在希望访问a.php,让其重定向到b.php

a.php

<?php header("Location:b.php"); ?>

服务器便会响应:

HTTP/1.1 302 Found【注意这里是返回的302】 Date: Mon, 17 Sep 2012 08:29:16 GMT Server: Apache/2.2.21 (Win64) PHP/5.3.8 X-Powered-By: PHP/5.3.8 Location: b.php Content-Length: 0 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html

2、404状态码的使用

一般是页面不存在,服务器会返回404码,一般用作防止用户访问到不存在的页面,如果是网站,可以做一个404页面,提示用户页面找不到,并返回首页或前一页。

3、304码的使用(一般很少用)

当浏览器向服务器请求图片资源时,如果本地已经有缓存资源,浏览器会向服务器发送请求:

GET /test/http/a.png HTTP/1.1 Accept: */* Referer: http://localhost/test/http/a.php Accept-Language: zh-CN User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) Accept-Encoding: gzip, deflate If-Modified-Since: Sun, 08 Jul 2012 07:16:07 GMT【缓存文件的修改时间】 If-None-Match: "8000000000c9b-3b90-4c44c4569d7b8" Host: localhost Connection: Keep-Alive Cookie: PHPSESSID=7ugb35h6i2il1m2jpihug7srj4

服务器然后返回304状态码:

HTTP/1.1 304 Not Modified【304状态码,告诉浏览器文件未修改】 Date: Mon, 17 Sep 2012 08:20:38 GMT Server: Apache/2.2.21 (Win64) PHP/5.3.8 Connection: Keep-Alive Keep-Alive: timeout=5, max=97 ETag: "8000000000c9b-3b90-4c44c4569d7b8"

304码相当于是浏览器和服务器之间交互的一个暗号,浏览器告诉服务器我这儿已经有这个资源的缓存了,发送给服务器一个此资源的时间信息,服务器接收以后用这个信息跟服务器上的资源相比较,如果是一个资源,服务器便会返回304 Not Modified,告诉浏览器文件未修改,不需要再重新下载。

 

发表评论