HTTP状态码有哪些

iamlaosong评:

学习Python的WSGI接口例程时不知道语句:

start_response('200 OK', [('Content-Type', 'text/html')])

其中的'200 OK'是什么意思,查资料才知道是Http的返回码,忏愧!

# -*- coding: cp936 -*-
# server.py
# 从wsgiref模块导入:
from wsgiref.simple_server import make_server
# 我们自己编写的application函数:
def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return '<h1>Hello, %s!</h1>' % (environ['PATH_INFO'][1:] or 'web')

# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:
httpd = make_server('', 8000, application)
print "Serving HTTP on port 8000..."
# 开始监听HTTP请求:
httpd.serve_forever()

上面例程运行后,在浏览器地址栏输入地址:http://localhost:8000/iamlaosong就可以显示:

Hello, iamlaosong!

程序中是不加区分的直接返回“200 OK”表示成功响应http请求,实际应用中应该是根据不同情况返回不同的状态码。

一些常见的HTTP状态码(HTTP Status Code)为:

200 - 服务器成功返回网页 

404 - 请求的网页不存在

503 - 服务不可用


其余详细如下:


1、临时响应:表示临时响应并需要请求者继续执行操作的状态代码。

100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1新)

101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协议(HTTP 1.1新)


2、成功:表示成功处理了请求的状态代码。

200 OK 一切正常,对GET和POST请求的应答文档跟在后面。

201 Created 服务器已经创建了文档,Location头给出了它的URL。

202 Accepted 已经接受请求,但处理尚未完成。

203 Non-Authoritative Information 文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝(HTTP 1.1新)。

204 No Content 没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。

205 Reset Content 没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(HTTP 1.1新)。

206 Partial Content 客户发送了一个带有Range头的GET请求,服务器完成了它(HTTP 1.1新)。


3、重定向:表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

300 Multiple Choices 客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。

301 Moved Permanently 客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。

302 Found 类似于301,但新的URL应该被视为临时性的替代,而不是永久性的。注意,在HTTP1.0中对应的状态信息是“Moved Temporatily”。出现该状态代码时,浏览器能够自动访问新的URL,因此它是一个很有用的状态代码。注意这个状态代码有时候可以和301替换使用。例如,如果浏览器错误地请求http://host/~user(缺少了后面的斜杠),有的服务器 返回301,有的则返回302。严格地说,我们只能假定只有当原来的请求是GET时浏览器才会自动重定向。请参见307。

303 See Other 类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取(HTTP 1.1新)。

304 Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告 诉客户,原来缓冲的文档还可以继续使用。

305 Use Proxy 客户请求的文档应该通过Location头所指明的代理服务器提取(HTTP 1.1新)。

307 Temporary Redirect 和302 (Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是POST,即使它实际上只能在POST请求的应答是303时才能重定 向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码:当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只 能跟随对GET请求的重定向。(HTTP 1.1新)


4、请求错误:这些状态代码表示请求可能出错,妨碍了服务器的处理。

400 Bad Request 请求出现语法错误。

401 Unauthorized 客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填 写合适的Authorization头后再次发出请求。

403 Forbidden 资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。

404 Not Found 无法找到指定位置的资源。这也是一个常用的应答。

405 Method Not Allowed 请求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)对指定的资源不适用。(HTTP 1.1新)

406 Not Acceptable 指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容(HTTP 1.1新)。

407 Proxy Authentication Required 类似于401,表示客户必须先经过代理服务器的授权。(HTTP 1.1新)

408 Request Timeout 在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。

(HTTP 1.1新)

409 Conflict 通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(HTTP 1.1新)

410 Gone 所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和404的不同在于,返回407表示文档永久地离开了指定的位置,而 404表示由于未知的原因文档不可用。(HTTP 1.1新)

411 Length Required 服务器不能处理请求,除非客户发送一个Content-Length头。(HTTP 1.1新)

412 Precondition Failed 请求头中指定的一些前提条件失败(HTTP 1.1新)。

413 Request Entity Too Large 目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头(HTTP 1.1新)。

414 Request URI Too Long URI太长(HTTP 1.1新)。

416 Requested Range Not Satisfiable 服务器不能满足客户在请求中指定的Range头。(HTTP 1.1新)


5、服务器错误:这些状态代码表示服务器在尝试处理请求时发生内部错误。

 这些错误可能是服务器本身的错误,而不是请求出错。

500 Internal Server Error 服务器遇到了意料不到的情况,不能完成客户的请求。

501 Not Implemented 服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求。

502 Bad Gateway 服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。

503 Service Unavailable 服务器由于维护或者负载过重未能应答。例如,Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个 Retry-After头。

504 Gateway Timeout 由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(HTTP 1.1新)

505 HTTP Version Not Supported 服务器不支持请求中所指明的HTTP版本。(HTTP 1.1新)


### 完整的HTTP状态码列表及含义 #### 1xx:信息性状态码 这些状态码表示临时的响应,仅包含状态行和可选的头部字段。 - **100 Continue**:服务器已接收到请求头,并指示客户端继续发送请求体[^1]。 - **101 Switching Protocols**:服务器根据客户端的请求切换协议[^1]。 - **102 Processing (WebDAV)**:服务器已经接收到并正在处理请求,但尚未完成处理[^1]。 #### 2xx:成功状态码 这些状态码表示客户端的请求被成功接收、理解和处理。 - **200 OK**:请求成功[^2]。 - **201 Created**:请求已完成,新资源已被创建[^2]。 - **202 Accepted**:请求已被接受,但未完成处理[^2]。 - **203 Non-Authoritative Information**:返回的信息来自本地或第三方副本而非原始服务器[^2]。 - **204 No Content**:请求成功,但无需返回任何内容。 - **205 Reset Content**:清除表单数据[^2]。 - **206 Partial Content**:部分资源传输成功[^2]。 - **207 Multi-Status (WebDAV)**:操作的结果是一个XML消息,包含了多个独立的操作状态。 #### 3xx:重定向状态码 这些状态码表示客户端需进一步采取行动才能完成请求。 - **300 Multiple Choices**:目标资源有多种表示形式可供选择。 - **301 Moved Permanently**:所请求的资源已永久移动到新的URI。 - **302 Found**:所请求的资源现在暂时从不同的URI响应请求。 - **303 See Other**:建议客户端访问另一个URL来获取资源。 - **304 Not Modified**:如果请求条件中指定的时间戳之后资源没有修改,则不返回实体主体[^1]。 - **305 Use Proxy**:被请求的资源必须通过代理访问[^1]。 - **307 Temporary Redirect**:请求应使用相同的HTTP方法重复向另一URI发出请求。 - **308 Permanent Redirect**:请求及其后续请求都应重新指向给定的URI。 #### 4xx:客户端错误状态码 这些状态码表示客户端可能存在错误行为。 - **400 Bad Request**:由于语法错误,当前请求无法被服务器理解[^1]。 - **401 Unauthorized**:请求未经授权,需要身份验证。 - **402 Payment Required**:保留用于将来可能实现的功能。 - **403 Forbidden**:即使提供凭证,也拒绝执行该请求。 - **404 Not Found**:找不到匹配的资源[^1]。 - **405 Method Not Allowed**:不允许使用请求中的方法访问指定资源。 - **406 Not Acceptable**:无法满足请求Accept头的要求。 - **407 Proxy Authentication Required**:连接到代理所需的认证失败。 - **408 Request Timeout**:服务器等待请求超时[^1]。 - **409 Conflict**:因冲突而无法完成请求。 - **410 Gone**:请求的资源不再可用且不会再次可用。 - **411 Length Required**:服务器拒绝在没有定义Content-Length的情况下接受请求。 - **412 Precondition Failed**:一个或多个前提条件评估为false[^1]。 - **413 Payload Too Large**:服务器拒绝处理过大的请求负载[^1]。 - **414 URI Too Long**:请求的URI太长[^1]。 - **415 Unsupported Media Type**:提交的内容具有服务器不支持的媒体类型。 - **416 Range Not Satisfiable**:范围不可满足。 - **417 Expectation Failed**:Expect头期望的值不能被服务器满足[^1]。 - **421 Misdirected Request**:服务器配置错误导致请求被误导向[^1]。 - **422 Unprocessable Entity (WebDAV)**:语义上有错,未能被执行[^1]。 - **423 Locked (WebDAV)**:源文件锁定,阻止了完成请求[^1]。 - **424 Failed Dependency (WebDAV)**:先前的一个请求失败,导致这个请求失败。 - **426 Upgrade Required**:客户端应当切换到TLS/1.0或其他协议版本[^1]。 - **428 Precondition Required**:原请求缺少必需的前提条件头信息。 - **429 Too Many Requests**:用户在给定时间内发送太多请求[^1]。 - **431 Request Header Fields Too Large**:服务器不愿意处理因为某个头字段过大而导致的请求。 - **451 Unavailable For Legal Reasons**:由于法律原因,资源不可用。 #### 5xx:服务器端错误状态码 这些状态码表示服务器发生内部错误或无法正常运行。 - **500 Internal Server Error**:服务器遇到了意外状况,无法完成请求[^1]。 - **501 Not Implemented**:服务器不具备完成请求的能力。 - **502 Bad Gateway**:作为网关或代理工作的服务器尝试履行请求时,从上游服务器收到了无效响应[^1]。 - **503 Service Unavailable**:服务目前不可用(过载或停机维护)。 - **504 Gateway Timeout**:充当网关或代理的服务器试图完成请求时,未能及时从上游服务器获得响应。 - **505 HTTP Version Not Supported**:服务器不支持请求中使用的HTTP协议版本。 - **506 Variant Also Negotiates**:透明内容协商循环检测到了问题[^1]。 - **507 Insufficient Storage (WebDAV)**:服务器无法存储完成请求所需的内容。 - **508 Loop Detected (WebDAV)**:服务器检测到无限循环[^1]。 - **510 Not Extended**:生产环境扩展不足以满足请求需求[^1]。 - **511 Network Authentication Required**:网络需要认证。 ```python def get_http_status_code(code): status_codes = { 200: "OK", 201: "Created", 202: "Accepted", 203: "Non-Authoritative Information", 204: "No Content", 205: "Reset Content", 206: "Partial Content", 207: "Multi-Status (WebDAV)", # Add more codes as needed... } return status_codes.get(code, "Unknown Status Code") print(get_http_status_code(200)) # Output: OK ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值