一 HTTP状态码

状态码
消息
描述
 
100
Continue
只有一部分请求被服务器接收,但只要没被服务器拒绝,客户端就会延续这个请求
 
101
Switching Protocols
服务器交换机协议
 
200
OK
请求被确认
 
201
Created
请求时完整的,新的资源被创建
 
202
Accepted
请求被接受,但未处理完
 
203
Non-authoritative Information
 
204
No Content
 
205
Reset Content
 
206
Partial Content
 
300
Multiple Choices
一个超链接表,用户可以选择一个超链接并访问,最大支持5个超链接
 
301
Moved Permanently
被请求的页面已经移动到了新的URL下
 
302
Found
被请求的页面暂时性地移动到了新的URL下
 
303
See Other
被请求的页面可以在一个不同的URL下找到
 
304
Not Modified
 
305
Use Proxy
 
306
Unused
已经不再使用此状态码,但状态码被保留
 
307
Temporary Redirect
被请求的页面暂时性地移动到了新的URL下
 
400
Bad Request
服务器无法识别请求
 
401
Unauthorized
被请求的页面需要用户名和密码
 
402
Payment Required
目前还不能使用此状态码
 
403
Forbidden
禁止访问所请求的页面
 
404
Not Found
服务器无法找到所请求的页面
 
405
Method Not Allowed
请求中所指定的方法不被允许
 
406
Not Acceptable
服务器只能创建一个客户端无法接受的响应
 
407
Proxy Authentication Required
在请求被服务前必须认证一个代理服务器
 
408
Request Timeout
请求时间超过了服务器所能等待的时间,连接被断开
 
409
Conflict
请求有矛盾的地方
 
410
Gone
被请求的页面不再可用
 
411
Length Required
"Content-Length"没有被定义,服务器拒绝接受请求
 
412
Precondition Failed
请求的前提条件被服务器评估为false
 
413
Request Entity Too Large
因为请求的实体太大,服务器拒绝接受请求
 
414
Request-url Too Long
服务器拒绝接受请求,因为URL太长。多出现在把"POST"请求转换为"GET"请求时所附带的大量查询信息
 
415
Unsupported Media Type
服务器拒绝接受请求,因为媒体类型不被支持
 
417
Expectation Failed
 
500
Internal Server Error
请求不完整,服务器遇见了出乎意料的状况
 
501
Not Implemented
请求不完整,服务器不提供所需要的功能
 
502
Bad Gateway
请求不完整,服务器从上游服务器接受了一个无效的响应
 
503
Service Unavailable
请求不完整,服务器暂时重启或关闭
 
504
Gateway Timeout
网关超时
 
505
HTTP Version Not Supported
服务器不支持所指定的HTTP版本


 
HTTP请求与HTTP响应的格式相近,都有着如下结构:
 以状态行+CRLF(回车换行)开始
 零行或多行头模块+CRLF
 一个空行,比如CRLF
 可选的消息体比如文件,查询数据,查询输出
 
举例来说,一个服务器响应头看起来就像下面这样:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
状态行包含HTTP版本,一个状态码,和状态码相对应的短消息。

三 JSP对HTTP状态码的编程
<一>
HttpServletResponse 类中用来设置状态码的方法:
 
方法 & 描述

1
public void setStatus ( int statusCode )
 此方法可以设置任意的状态码。如果您的响应包含一个特殊的状态码和一个文档,请确保在用PrintWriter返回任何内容前调用setStatus方法

2
public void sendRedirect(String url)
 此方法产生302响应,同时产生一个 Location 头告诉URL 一个新的文档

3
public void sendError(int code, String message)
 此方法将一个状态码(通常为 404)和一个短消息,自动插入HTML文档中并发回给客户端

<二> HTTP状态码程序示例

例子将会发送407错误码给浏览器,然后浏览器将会告诉您"Need authentication!!!"。

 <html>
<head>
<title>Setting HTTP Status Code</title>
</head>
<body>
<%// 设置错误代码,并说明原因response.sendError(407, "Need authentication!!!" );
%>
</body>
</html>

四 Asp.Net对HTTP状态码的编程
每次当用户代理(可以理解为就是IE和Firefox)向Web站点请求一个URL地址,服务器都会给予回复,回复内容包括两部分:HTTP报头,和被请求的内容。但仅从浏览器上我们通常只能看到内容而看不到报头信息。所以,我们需要通过一些浏览器插件来观察他们。IE用

WebDeveloper;FireFox用Fiddler。

对SEO而言,我们需要了解的状态代码有:
重定向:301和302
被删除:404
服务器错误:500

302在asp.net中有一个很常见的原型:Response.Redirect(),请看代码:

protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/target.aspx");
        //Server.Transfer("~/target.aspx");
    }
source.aspx页面上一个Button,Click事件中代码为Response.Redirect(~/target.aspx),点击source.aspx页面Button,查看该页面对应的状态码,结果就是302。

客户端/服务器之间往返的过程其实是这样的:
1. 点击Button,产生回发,回发的目标页面仍然是source.aspx,所以请求仍由source.aspx页面进行处理,这样才能进入source.aspx页面的Click事件;
2. Click事件中,Response.Redirect(~/target.aspx)所作的事情实际上就是:
    2.1 将回复中Http报头的状态码改成302;
    2.1 指明302指向的页面就是target.aspx;
3. 浏览器(用户代理)收到回复的报头信息后,
    3.1 将URL地址栏的地址改成target.aspx;
    3.2 向target.aspx发出请求

和Response.Redirect()同样著名的是Server.Transfer()。但使用Server.Transfer,你会发现,页面对应的状态码是200,且地址栏的url并不会发生改变,仍然是source.aspx!这是因为Server.Transfer是完全在服务器端进行跳转的。所以一种很流行但我觉得不那么正

确的说法就是:应当使用Server.Transfer()而不是Response.Redirect()来提高性能。因为在得到Server.Transfer()性能提升的同时,你应该权衡:性能的提高,和由此产生的代价。很难直接给出一个答案,这需要依靠具体的情景来做判断。但我倾向于尽量不使用

Server.Transfer(),因为:1. 性能提升不大,节约的其实就是报头信息的往返;2. 清晰的URL无论对于终端用户,还是开发调试,都有很重要的作用。
       
302意味着重定向是暂时的,而301则是永久的重定向。
就SEO而言,为了延续链接价值和排除重复内容 ,我们在以下几种情况下都可能会用到301:
1. 域名更换;
2. 多个域名间映射;如www.freeflying.com和www.freeflying.cn,两个域名其实指向的是同一个网站,这就会造成大量的重复内容,对网站的排名不利。
3. 清除默认索引页的重复问题:比如我们输入www.freeflying.com/article/时,如果在IIS里进行了设定,将指向www.freeflying.com/article/Default.aspx
4. 其他的“不同域名相同内容”的重复问题,典型的就是URL重写后,www.freeflying.com/article/321.html和www.freeflying.com/article.aspx?id=321指向的其实都是同一个网页内容。

对于404,最直观的理解就是页面不存在。如果网站是纯静态的,这很好理解;但当网站做成动态之后,如www.freeflying.com/article/321.html(映射为www.freeflying.com/article.aspx?id=321),虽然id=321的文章已经被删除了,或者根本不存在,但

article.aspx这个页面始终是存在的,所以HTTP报头的状态码不会是404,而是200,表示请求成功。
我们假设一个网站有id=321/342/6739……的文章都被删除了,但蜘蛛并不知道,它仍然会进行抓取,结果它发现,这些不同的URL对应的居然全是同一个页面。它就会将其当做重复页面进行处理。

500意味着程序内部出现异常,比如3/0,代码如下:
    protected void Button1_Click(object sender, EventArgs e)
    {
        int i, j;
        i = 8;
        j = 0;
        this.Label1.Text = (i / j).ToString();
    }

如果搜索引擎接到一个500的状态码时,搜索引擎会理解程序只是出现了暂时性的错误,它会在之后继续抓取,查看问题是否已经解决,这并不会给网站带来太大的问题——只要你能够尽快恢复。但是,Asp.net自带的个custom error的web.config配置,会让我们在不经

意间“失误”。理由和上面讲到的404变200类似,当转向自定义的error.aspx之后,蜘蛛得到的是成功链接error.aspx的200代码,所以蜘蛛会以为报错的originpage.aspx正常的显示内容就是error.aspx的内容。不同url参数的originpage.aspx会被蜘蛛认为是不同的url

,所以蜘蛛会认为这些所有的url都重复了——后果是很严重的。

认识到问题的严重性之后,我们来看解决问题的办法,

    protected void Page_Load(object sender, EventArgs e){//如果你希望搜索引擎知道这个url将不再使用Response.StatusCode = 404;//如果你希望告诉搜索引擎这个url只是出现了暂时的故障Response.StatusCode = 500;//如果你想永久重定向该页面Response.StatusCode = 301;Response.RedirectLocation = @"\website1\target.aspx";}

HTTP状态码和编程相关推荐

  1. bash-shell高级编程--退出和退出状态码

    退出和退出状态码 大家都知道exit是用来退出一个脚本,既可以使用exit来结束一个脚本,像常用的C语言一样,它也会返回一个值,这个值会传递给脚本的父进程,父进程会使用这个值做下一步的处理. 其实在l ...

  2. HTTP简介、请求方法与响应状态码

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! Https相关的文章,请看这一篇:TCP.IP协议族之数字签名与HTTPS详解 接下来想系统的回顾 ...

  3. TCP/IP协议族(一) HTTP简介、请求方法与响应状态码

    接下来想系统的回顾一下TCP/IP协议族的相关东西,当然这些东西大部分是在大学的时候学过的,但是那句话,基础的东西还是要不时的回顾回顾的.接下来的几篇博客都是关于TCP/IP协议族的,本篇博客就先简单 ...

  4. bash之流程控制for循环及bash命令退出和退出状态码

    一.for循环定义: 将一段代码反复执行:----->进入条件;------> 退出条件; 二.语法格式: for 变量名 in LIST do statement1 ... done f ...

  5. ABAP应用服务器的HTTP响应状态码(Status Code)

    最近Jerry参与了SAP Commerce Cloud的标准开发,我们调用微软云平台Azure上创建Lambda Function的Restful API来创建Lambda Function: 在开 ...

  6. 【前端 · 面试 】HTTP 总结(四)—— HTTP 状态码

    最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正.交流. 争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火. 前言 通过前面的总结,我们都知道, ...

  7. HTTP状态码完整介绍

    2019独角兽企业重金招聘Python工程师标准>>> HTTP状态码是什么?HTTP状态码有什么用处?如何处理HTTP状态码能够和搜索引擎更友好?技巧在哪里?更有利于网站优化?HT ...

  8. 详解重定向(HTTP状态码301/302/303/307/308)附案例

    关注 前端瓶子君,回复"交流" 加入我们一起学习,天天进步 今天打算好好把状态码301.302.303.307.308好好撸一遍,并会测试下一些例子. 状态码的解释 我们都知道重定 ...

  9. HTTP就绪状态和HTTP状态码

    HTTP就绪状态 前面提到,服务器在完成请求之后会在XMLHttpRequest的onreadystatechange属性中查找要调用的方法.这是真的,但还不完整.事实上,每当HTTP就绪状态改变时它 ...

最新文章

  1. 关于mac的一些常用操作记录
  2. css transform旋转属性
  3. PostSharp的AOP设计在.NET Remoting中的应用
  4. linux_软件安装策略和升级策略
  5. 山西上党残疾男子“只”手脱贫 带领村民增收
  6. python实现多智能体一致性_促进产学研,多智能体协同控制——科研与实践教学齐飞...
  7. azure 安全组_具有安全性和设计注意事项的Azure成本跟踪
  8. T-SQL 之 DDL语法
  9. java pdf 中文_java pdf中文乱码怎么办
  10. 爬取千库网ppt_Python——如何实现千图成像:初级篇(从图片爬取到图片合成)...
  11. 谷歌金山词霸,免费又好用(附下载地址)
  12. 小米无线显示与电脑连接到服务器,小米手机和电脑进行怎么无线连接
  13. Qt使用Windows蓝牙API搜索蓝牙设备并建立串口服务的方法
  14. 怎么把dicom数据转成nifty数据
  15. 清除IBM小型机橙色告警灯方法
  16. 抖音壁纸表情包小程序搭建部署说明、广告分佣规则说明以及迭代新计划
  17. Oracle 表空间详解(tablespace)
  18. 内存管理(五)——内存回收
  19. ESP8266开发之旅 阿里云生活物联网平台篇② 使用云智能App,配置自己的App,无需开发
  20. Https 忽略证书验证

热门文章

  1. 三层架构:软件设计架构
  2. 用MATLAB编程求出三位数中全部的水仙花数
  3. MVC %%与%=%与区别
  4. leetcode 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭
  5. leetcode 38. 外观数列 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。前五项如下
  6. CTFshow 爆破 web27
  7. SDUT_2122 数据结构实验之链表七:单链表中重复元素的删除
  8. MATLAB常用命令(窗口命令、标点符号特殊功能和帮助命令)
  9. 图像窗口方面 window
  10. SVD理论以及Python实现