HTTP StatusCode (状态码)

创建时间:
2014-11-15 00:12
最近更新:
2018-05-29 16:41

Resource

  1. http 重定向 301/302/303/307

示例: 百度首页 将 http 临时重定向至 https

请求头:

GET / HTTP/1.1
Host: www.baidu.com
...

响应头:

HTTP/1.1 302 Moved Temporarily
Location: https://www.baidu.com/
...

IIS 状态代码的含义

概要
当用户试图通过 HTTP 或 FTP (文件传输协议) 访问一台正在运行 IIS (Internet 信息服务) 的服务器上的内容时,IIS 返回一个表示该请求的状态的数字代码。
该状态代码记录在 IIS 日志中,同时也可能在 Web 浏览器或 FTP 客户端显示。
状态代码可以指明具体请求是否已成功,还可以揭示请求失败的确切原因。

更多信息
日志文件的位置
在默认状态下,IIS 把它的日志文件放在%WINDIR\System32\Logfiles 文件夹中。
每个万维网 (WWW) 站点和 FTP 站点在该目录下都有一个单独的目录。
在默认状态下,每天都会在这些目录下创建日志文件,并用日期给日志文件命名 (例如,exYYMMDD.log)。

HTTP
1xx-信息提示
这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。
100-继续。
101-切换协议。

2xx-成功
这类状态代码表明服务器成功地接受了客户端请求。
T 注:码:200;状态:OK
200-确定。客户端请求已成功。
T 注:码:201;状态:Created
201-已创建。
T 注:码:202;状态:Accepted
202-已接受。
203-非权威性信息。
T 注:码:204;状态:No content
204-无内容。
205-重置内容。
206-部分内容。

3xx-重定向
客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。

T 注:码:301;状态:Moved Permanently
301-对象已永久移走,即永久重定向。

T 注:码:302;状态:Moved Temporarily
302-对象已临时移动。

T 注:码:304;状态:Not modified
304-未修改。

307-临时重定向。

T 注:码:400;状态:Bad request
4xx-客户端错误
发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。400-错误的请求。
T 注:码:401;状态:Unauthorized
401-访问被拒绝。IIS 定义了许多不同的 401 错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在 IIS 日志中显示:
401.1-登录失败。
401.2-服务器配置导致登录失败。
401.3-由于 ACL 对资源的限制而未获得授权。
401.4-筛选器授权失败。
401.5-ISAPI/CGI 应用程序授权失败。
401.7–访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS6.0 所专用。
T 注:码:403;状态:Forbidden
403-禁止访问:IIS 定义了许多不同的 403 错误,它们指明更为具体的错误原因:
403.1-执行访问被禁止。
403.2-读访问被禁止。
403.3-写访问被禁止。
403.4-要求 SSL。
403.5-要求 SSL128。
403.6-IP 地址被拒绝。
403.7-要求客户端证书。
403.8-站点访问被拒绝。
403.9-用户数过多。
403.10-配置无效。
403.11-密码更改。
403.12-拒绝访问映射表。
403.13-客户端证书被吊销。
403.14-拒绝目录列表。
403.15-超出客户端访问许可。
403.16-客户端证书不受信任或无效。
403.17-客户端证书已过期或尚未生效。
403.18-在当前的应用程序池中不能执行所请求的 URL。这个错误代码为 IIS6.0 所专用。
403.19-不能为这个应用程序池中的客户端执行 CGI。这个错误代码为 IIS6.0 所专用。
403.20-Passport 登录失败。这个错误代码为 IIS6.0 所专用。
T 注:码:404;状态:Page not found
404-未找到。
404.0- (无) –没有找到文件或目录。
404.1-无法在所请求的端口上访问 Web 站点。
404.2-Web 服务扩展锁定策略阻止本请求。
404.3-MIME 映射策略阻止本请求。
405-用来访问本页面的 HTTP 谓词不被允许 (方法不被允许)
406-客户端浏览器不接受所请求页面的 MIME 类型。
407-要求进行代理身份验证。
412-前提条件失败。
413–请求实体太大。
414-请求 URI 太长。
415–不支持的媒体类型。
416–所请求的范围无法满足。
417–执行失败。
423–锁定的错误。

5xx-服务器错误
服务器由于遇到错误而不能完成该请求。
T 注:码:500;状态:Internet server error
500-内部服务器错误。
500.12-应用程序正忙于在 Web 服务器上重新启动。
500.13-Web 服务器太忙。
500.15-不允许直接请求 Global.asa。
500.16–UNC 授权凭据不正确。这个错误代码为 IIS6.0 所专用。
500.18–URL 授权存储不能打开。这个错误代码为 IIS6.0 所专用。
500.100-内部 ASP 错误。
T 注:码:501;状态:Not implemented
501-页眉值指定了未实现的配置。
T 注:码:502;状态:Bad gateway
502-Web 服务器用作网关或代理服务器时收到了无效响应。
502.1-CGI 应用程序超时。
502.2-CGI 应用程序出错。application.
T 注:码:503;状态:Service unavailable
503-服务不可用。这个错误代码为 IIS6.0 所专用。
504-网关超时。
505-HTTP 版本不受支持。

FTP
1xx-肯定的初步答复
这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。
110 重新启动标记答复。
120 服务已就绪,在 nnn 分钟后开始。
125 数据连接已打开,正在开始传输。
150 文件状态正常,准备打开数据连接。
2xx-肯定的完成答复
一项操作已经成功完成。客户端可以执行新命令。200 命令确定。
202 未执行命令,站点上的命令过多。
211 系统状态,或系统帮助答复。
212 目录状态。
213 文件状态。
214 帮助消息。
215NAME 系统类型,其中,NAME 是 AssignedNumbers 文档中所列的正式系统名称。
220 服务就绪,可以执行新用户的请求。
221 服务关闭控制连接。如果适当,请注销。
225 数据连接打开,没有进行中的传输。
226 关闭数据连接。请求的文件操作已成功 (例如,传输文件或放弃文件)。
227 进入被动模式 (h1,h2,h3,h4,p1,p2)。
230 用户已登录,继续进行。
250 请求的文件操作正确,已完成。
257 已创建 "PATHNAME"。

3xx-肯定的中间答复
该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。331 用户名正确,需要密码。
332 需要登录帐户。
350 请求的文件操作正在等待进一步的信息。

4xx-瞬态否定的完成答复
该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。421 服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。
425 无法打开数据连接。
426Connectionclosed;transferaborted.
450 未执行请求的文件操作。文件不可用 (例如,文件繁忙)。
451 请求的操作异常终止:正在处理本地错误。
452 未执行请求的操作。系统存储空间不够。

5xx-永久性否定的完成答复
该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。500 语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。
501 在参数中有语法错误。
502 未执行命令。
503 错误的命令序列。
504 未执行该参数的命令。
530 未登录。
532 存储文件需要帐户。
550 未执行请求的操作。文件不可用 (例如,未找到文件,没有访问权限)。
551 请求的操作异常终止:未知的页面类型。
552 请求的文件操作异常终止:超出存储分配 (对于当前目录或数据集)。
553 未执行请求的操作。不允许的文件名。

常见的 FTP 状态代码及其原因
150-FTP 使用两个端口:21 用于发送命令,20 用于发送数据。状态代码 150 表示服务器准备在端口 20 上打开新连接,发送一些数据。
226-命令在端口 20 上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。
230-客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。
331-客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。
426-命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。
530-该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS 的配置可能拒绝匿名访问。
550-命令未被执行,因为指定的文件不可用。例如,要 GET 的文件并不存在,或试图将文件 PUT 到您没有写入权限的目录。

HTTP 报头状态码---内容重定向

HTTP 报头状态码---内容重定向

每次当用户代理 (可以理解为就是 IE 和 Firefox) 向 Web 站点请求一个 URL 地址,服务器都会给予回复,
回复内容包括两部分:HTTP 报头,和被请求的内容。
但仅从浏览器上我们通常只能看到内容而看不到报头信息。
所以,我们需要通过一些浏览器插件来观察他们。
就我个人而言,IE 我用 WebDeveloper;FireFox 我用 Fiddler。
有兴趣的朋友可以在网上自行下载,两个都是相当流行的。

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

302 (Moved temporarily) 在 asp.net 中有一个很常见的原型:Response.Redirect ()

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

而 Server.Transfer () 后页面对应的状态码是 200,且地址栏的 url 并不会发生改变,仍然是原页面。
这是因为 Server.Transfer 是完全在服务器端进行跳转的。

有一种很流行但可能不那么正确的说法是:应当使用 Server.Transfer () 而不是 Response.Redirect () 来提高性能。
因为在得到 Server.Transfer () 性能提升的同时,你应该权衡:性能的提高,和由此产生的代价。
很难直接给出一个答案,这需要依靠具体的情景来做判断。
但我倾向于尽量不使用 Server.Transfer (),因为:
1、性能提升不大,节约的其实就是报头信息的往返;
2、清晰的 URL 无论对于终端用户,还是开发调试,都有很重要的作用。

302 意味着重定向是暂时的,而 301 则是永久的重定向。

就 SEO 而言,为了延续链接价值和排除重复内容,我们在以下几种情况下都可能会用到 301:
1、域名更换;
2、多个域名间映射;如 www.a.com 和 www.a.cn,两个域名其实指向的是同一个网站,这就会造成大量的重复内容,对网站的排名不利。
3、清除默认索引页的重复问题:比如我们输入 www.AtAdd.com/article/时,如果在 IIS 里进行了设定,将指向 www.AtAdd.com/article/Default.aspx
4、其他的 "不同域名相同内容" 的重复问题,典型的就是 URL 重写后,www.AtAdd.com/article/321.html 和 www.AtAdd.com/article.aspx?id=321 指向的其实都是同一个网页内容。

对于 404,最直观的理解就是页面不存在。
如果网站是纯静态的,这很好理解;
但当网站做成动态之后,如 www.AtAdd.com/article /321.html (映射为 www.AtAdd.com/article.aspx?id=321),
虽然 id=321 的文章已经被删除了,或者根本不存在,但 article.aspx 这个页面始终是存在的,
所以 HTTP 报头的状态码不会是 404,而是 200,表示请求成功。
我们假设一个网站有 id=321/342/6739……的文章都被删除了,但蜘蛛并不知道,它仍然会进行抓取,
结果它发现,这些不同的 URL 对应的居然全是同一个页面。它就会将其当做重复页面进行处理。

500 意味着程序内部出现异常,例如:
protected void Button1_Click (object sender, EventArgs e)
{
int i = 8;
int j = 0;
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)
{
	Response.StatusCode = 404;//如果你希望搜索引擎知道这个 url 将不再使用
	Response.StatusCode = 500;//如果你希望告诉搜索引擎这个 url 只是出现了暂时的故障
	Response.StatusCode = 301;//如果你想永久重定向该页面
	Response.RedirectLocation = @"\website1\target.aspx";
}

System.Net.HttpStatusCode 枚举成员 (From MSDN)

Continue
等效于 HTTP 状态 100。Continue 指示客户端可能继续其请求。

SwitchingProtocols
等效于 HTTP 状态 101。SwitchingProtocols 指示正在更改协议版本或协议。

OK
等效于 HTTP 状态 200。OK 指示请求成功,且请求的信息包含在响应中。这是最常接收的状态代码。

Created
等效于 HTTP 状态 201。Created 指示请求导致在响应被发送前创建新资源。

Accepted
等效于 HTTP 状态 202。Accepted 指示请求已被接受做进一步处理。

NonAuthoritativeInformation
等效于 HTTP 状态 203。NonAuthoritativeInformation 指示返回的元信息来自缓存副本而不是原始服务器,因此可能不正确。

NoContent
等效于 HTTP 状态 204。NoContent 指示已成功处理请求并且响应已被设定为无内容。

ResetContent
等效于 HTTP 状态 205。ResetContent 指示客户端应重置 (或重新加载) 当前资源。

PartialContent
等效于 HTTP 状态 206。PartialContent 指示响应是包括字节范围的 GET 请求所请求的部分响应。

MultipleChoices
等效于 HTTP 状态 300。MultipleChoices 指示请求的信息有多种表示形式。默认操作是将此状态视为重定向,并遵循与此响应关联的 Location 头的内容。

Ambiguous
等效于 HTTP 状态 300。Ambiguous 指示请求的信息有多种表示形式。默认操作是将此状态视为重定向,并遵循与此响应关联的 Location 头的内容。

MovedPermanently
等效于 HTTP 状态 301。MovedPermanently 指示请求的信息已移到 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。

Moved
等效于 HTTP 状态 301。Moved 指示请求的信息已移到 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。

Found
等效于 HTTP 状态 302。Found 指示请求的信息位于 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。

Redirect
等效于 HTTP 状态 302。Redirect 指示请求的信息位于 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求将使用 GET 方法。

SeeOther
等效于 HTTP 状态 303。作为 POST 的结果,SeeOther 将客户端自动重定向到 Location 头中指定的 URI。用 GET 生成对 Location 头所指定的资源的请求。

RedirectMethod
等效于 HTTP 状态 303。作为 POST 的结果,RedirectMethod 将客户端自动重定向到 Location 头中指定的 URI。用 GET 生成对 Location 头所指定的资源的请求。

NotModified
等效于 HTTP 状态 304。NotModified 指示客户端的缓存副本是最新的。未传输此资源的内容。

UseProxy
等效于 HTTP 状态 305。UseProxy 指示请求应使用位于 Location 头中指定的 URI 的代理服务器。

Unused
等效于 HTTP 状态 306。Unused 是未完全指定的 HTTP/1.1 规范的建议扩展。

TemporaryRedirect
等效于 HTTP 状态 307。TemporaryRedirect 指示请求信息位于 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。

RedirectKeepVerb
等效于 HTTP 状态 307。RedirectKeepVerb 指示请求信息位于 Location 头中指定的 URI 处。接收到此状态时的默认操作为遵循与响应关联的 Location 头。原始请求方法为 POST 时,重定向的请求还将使用 POST 方法。

BadRequest
等效于 HTTP 状态 400。BadRequest 指示服务器未能识别请求。如果没有其他适用的错误,或者如果不知道准确的错误或错误没有自己的错误代码,则发送 BadRequest。

Unauthorized
等效于 HTTP 状态 401。Unauthorized 指示请求的资源要求身份验证。WWW-Authenticate 头包含如何执行身份验证的详细信息。

PaymentRequired
等效于 HTTP 状态 402。保留 PaymentRequired 以供将来使用。

Forbidden
等效于 HTTP 状态 403。Forbidden 指示服务器拒绝满足请求。

NotFound
等效于 HTTP 状态 404。NotFound 指示请求的资源不在服务器上。

MethodNotAllowed
等效于 HTTP 状态 405。MethodNotAllowed 指示请求的资源上不允许请求方法 (POST 或 GET)。

NotAcceptable
等效于 HTTP 状态 406。NotAcceptable 指示客户端已用 Accept 头指示将不接受资源的任何可用表示形式。

ProxyAuthenticationRequired
等效于 HTTP 状态 407。ProxyAuthenticationRequired 指示请求的代理要求身份验证。Proxy-authenticate 头包含如何执行身份验证的详细信息。

RequestTimeout
等效于 HTTP 状态 408。RequestTimeout 指示客户端没有在服务器期望请求的时间内发送请求。

Conflict
等效于 HTTP 状态 409。Conflict 指示由于服务器上的冲突而未能执行请求。

Gone
等效于 HTTP 状态 410。Gone 指示请求的资源不再可用。

LengthRequired
等效于 HTTP 状态 411。LengthRequired 指示缺少必需的 Content-length 头。

PreconditionFailed
等效于 HTTP 状态 412。PreconditionFailed 指示为此请求设置的条件失败,且无法执行此请求。条件是用条件请求标头 (如 If-Match、If-None-Match 或 If-Unmodified-Since) 设置的。

RequestEntityTooLarge
等效于 HTTP 状态 413。RequestEntityTooLarge 指示请求太大,服务器无法处理。

RequestUriTooLong
等效于 HTTP 状态 414。RequestUriTooLong 指示 URI 太长。

UnsupportedMediaType
等效于 HTTP 状态 415。UnsupportedMediaType 指示请求是不支持的类型。

RequestedRangeNotSatisfiable
等效于 HTTP 状态 416。RequestedRangeNotSatisfiable 指示无法返回从资源请求的数据范围,因为范围的开头在资源的开头之前,或因为范围的结尾在资源的结尾之后。

ExpectationFailed
等效于 HTTP 状态 417。ExpectationFailed 指示服务器未能符合 Expect 头中给定的预期值。

InternalServerError
等效于 HTTP 状态 500。InternalServerError 指示服务器上发生了一般错误。

NotImplemented
等效于 HTTP 状态 501。NotImplemented 指示服务器不支持请求的函数。

BadGateway
等效于 HTTP 状态 502。BadGateway 指示中间代理服务器从另一代理或原始服务器接收到错误响应。

ServiceUnavailable
等效于 HTTP 状态 503。ServiceUnavailable 指示服务器暂时不可用,通常是由于过多加载或维护。

GatewayTimeout
等效于 HTTP 状态 504。GatewayTimeout 指示中间代理服务器在等待来自另一个代理或原始服务器的响应时已超时。

HttpVersionNotSupported
等效于 HTTP 状态 505。HttpVersionNotSupported 指示服务器不支持请求的 HTTP 版本。