Java基础(24)HTTP状态码

HTTP状态码是服务器用来告诉客户端,关于其HTTP请求的处理情况的编码。这些状态码被分为五类:

  1. 1xx(信息性状态码):表示接收的请求正在处理。
  2. 2xx(成功状态码):表示请求正常处理完毕。
  3. 3xx(重定向状态码):表示需要进行附加操作以完成请求。
  4. 4xx(客户端错误状态码):表示客户端请求有语法错误或请求无法实现。
  5. 5xx(服务器错误状态码):表示服务器执行请求的过程中发生了错误。

以下是一些常见的HTTP状态码及其含义:

HTTP状态码由三位数字组成,分为五个类别。以下列出了所有的HTTP状态码及其用途,但请注意,某些状态码是在HTTP/1.0和HTTP/1.1中定义的,而一些是后来的扩展,如由WebDAV和HTTP/2添加的状态码。

1xx - 信息性状态码

  • 100 Continue: 客户端应继续其请求
  • 101 Switching Protocols: 客户端请求服务器根据请求头中的Upgrade字段切换协议
  • 102 Processing (WebDAV): 服务器已接受并正在处理请求,但无响应可用
  • 103 Early Hints: 用于在服务器还未完全准备好响应时,提前返回响应头信息

2xx - 成功状态码

  • 200 OK: 请求成功
  • 201 Created: 请求成功并且服务器创建了新的资源
  • 202 Accepted: 服务器已接受请求,但尚未处理
  • 203 Non-Authoritative Information: 服务器已成功处理请求,但返回的信息可能来自另一来源
  • 204 No Content: 服务器成功处理了请求,但没有返回任何内容
  • 205 Reset Content: 服务器成功处理了请求,但没有返回任何内容,并且要求请求者重置文档视图
  • 206 Partial Content: 服务器成功处理了部分GET请求
  • 207 Multi-Status (WebDAV): 代表之后的消息体会是一个XML消息,并且可能依照之前的子请求数量包含多个独立的响应代码
  • 208 Already Reported (WebDAV): 成员的内容已经在之前的多状态响应部分被枚举,且不会被再次列举
  • 226 IM Used (HTTP Delta encoding): 服务器已经完成了对资源的GET请求,并且响应是对当前实例应用的一系列差异的表示

3xx - 重定向状态码

  • 300 Multiple Choices: 请求有多种可能的响应
  • 301 Moved Permanently: 请求的资源已永久移动到新位置
  • 302 Found: 请求的资源现在临时从不同的URI响应请求
  • 303 See Other: 对应当前请求的响应可以在另一个URI上被找到,并且应当使用GET方法获取
  • 304 Not Modified: 自从上次请求后,请求的网页未修改过
  • 305 Use Proxy (废弃): 请求者只能通过代理访问请求的网页
  • 306 Switch Proxy (废弃): 在最新版的规范中,306状态码已经不再被使用
  • 307 Temporary Redirect: 请求的资源现在临时从不同的URI响应请求
  • 308 Permanent Redirect (RFC 7538): 请求的资源现在永久从另一个URI响应

4xx - 客户端错误状态码

  • 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: 服务器不接受不含有效内容长度标头字段的请求
  • 412 Precondition Failed: 服务器未满足请求者在请求中设置的其中一个前提条件
  • 413 Payload Too Large: 请求实体过大
  • 414 URI Too Long: 请求的URI过长,服务器无法处理
  • 415 Unsupported Media Type: 请求的格式不受请求页面的支持
  • 416 Range Not Satisfiable: 请求者请求的范围无效
  • 417 Expectation Failed: 服务器无法满足Expect请求头字段的要求
  • 418 I’m a teapot (HTCPCP): 超文本咖啡壶控制协议下,服务器拒绝冲泡咖啡因为是茶壶
  • 421 Misdirected Request (HTTP/2): 请求针对的是无法产生响应的服务器
  • 422 Unprocessable Entity (WebDAV): 请求格式正确,但是由于含有语义错误,无法响应
  • 423 Locked (WebDAV): 资源被锁定
  • 424 Failed Dependency (WebDAV): 由于之前的请求失败,导致当前请求失败
  • 425 Too Early: 服务器不愿意风险进行处理可能重复的请求
  • 426 Upgrade Required: 客户端应当切换到TLS/1.0
  • 428 Precondition Required: 原服务器要求该请求是有条件的
  • 429 Too Many Requests: 用户在给定的时间内发送了太多的请求
  • 431 Request Header Fields Too Large: 服务器不愿意处理请求,因为头字段过大
  • 451 Unavailable For Legal Reasons: 用户请求的资源非法

5xx - 服务器错误状态码

  • 500 Internal Server Error: 服务器遇到了一个未曾预料到的情况,无法完成客户的请求
  • 501 Not Implemented: 服务器不支持当前请求所需要的某个功能
  • 502 Bad Gateway: 作为网关或代理工作的服务器从上游服务器收到无效响应
  • 503 Service Unavailable: 目前无法使用服务器(由于超载或停机维护)
  • 504 Gateway Timeout: 作为网关或代理的服务器,未及时从上游服务器接收请求
  • 505 HTTP Version Not Supported: 服务器不支持请求中所用的HTTP协议版本
  • 506 Variant Also Negotiates: 服务器存在内部配置错误
  • 507 Insufficient Storage (WebDAV): 服务器无法存储完成请求所必须的内容
  • 508 Loop Detected (WebDAV): 服务器在处理请求时检测到无限循环
  • 510 Not Extended: 获取资源所需要的策略并没有被满足
  • 511 Network Authentication Required: 客户端需要进行身份验证才能获取网络访问权限

请注意,并非所有状态码都被广泛使用或支持。例如,一些状态码可能只在某些特定的HTTP扩展中定义,如WebDAV。而某些状态码如418 I'm a teapot是实验性的或不太正式的。上述列表基于RFC 7231和其他一些RFCs中定义的状态码。

深入解析与源码

HTTP状态码的处理通常在Web服务器软件中实现,如Apache、Nginx或其他HTTP服务器。服务器会根据处理请求的结果返回相应的状态码。例如,当请求的资源找不到时,服务器会返回404状态码。

下面我们看一个简单的示例,展示如何在使用Node.js的HTTP服务器中处理和返回状态码。

首先,安装Node.js环境,并创建一个文件server.js:

const http = require('http');

const server = http.createServer((req, res) => {
    const { pathname } = new URL(req.url, `http://${req.headers.host}`);
    
    // 根据请求的URL路径返回不同的状态码
    switch(pathname) {
        case '/':
            res.statusCode = 200;
            res.end('Home Page');
            break;
        case '/about':
            res.statusCode = 200;
            res.end('About Page');
            break;
        default:
            // 对于未知路径,返回404 Not Found
            res.statusCode = 404;
            res.end('404 Not Found');
    }
});

server.listen(3000, () => {
    console.log('Server running at http://localhost:3000/');
});

在这个例子中,创建了一个简单的HTTP服务器,它会监听3000端口的请求。服务器会检查请求的URL路径,如果是//about,则返回状态码200(OK),以及相应的页面内容。对于所有其他路径,服务器会返回404状态码(Not Found)和相应的文本消息。

要运行这个服务器,先在命令行中进入包含server.js文件的目录,然后执行node server.js命令。之后,通过浏览器访问http://localhost:3000/http://localhost:3000/about以及任何其他非定义路径,观察不同的状态码和响应。

总结

在实际的Web开发过程中,正确使用HTTP状态码对于构建良好的HTTP通信非常重要。它们有助于客户端(如浏览器)理解请求的结果以及如何处理这些结果。大多数Web框架和服务器软件都提供了对这些状态码的支持,允许开发者根据业务逻辑需要返回合适的状态码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辞暮尔尔-烟火年年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值