HTTP STATE CODE

本文详细介绍了HTTP状态码的分类及具体含义,包括1xx到5xx系列的状态码,并对每种状态码进行了简要说明,有助于理解Web服务交互过程中的各种情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


------------------------------------------------------------------------------

1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求

------------------------------------------------------------------------------------

100 -  继续发送

101 - 切换协议。
-------------------------------
200 - 确定。客户端请求已成功。

201 - 已创建。

202 - 已接受。

203 - 非权威性信息。

204 - 无内容。

205 - 重置内容。

206 - 部分内容。
-------------------------------
302 - 对象已移动。

304 - 未修改。

307 - 临时重定向。
-------------------------------

400 - 错误的请求。

401 - 访问被拒绝。

401.1 - 登录失败。

401.2 - 服务器配置导致登录失败。

401.3 - 由于 ACL 对资源的限制而未获得授权。

401.4 - 筛选器授权失败。

401.5 - ISAPI/CGI 应用程序授权失败。

403 - 禁止访问


403.1 - 执行访问被禁止。

403.2 - 读访问被禁止。

403.3 - 写访问被禁止。

403.4 - 要求 SSL.

403.5 - 要求 SSL 128.

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.这个错误代码为 IIS 6.0 所专用。

403.19 - 不能为这个应用程序池中的客户端执行 CGI.这个错误代码为 IIS 6.0 所专用。

403.20 - Passport 登录失败。这个错误代码为 IIS 6.0 所专用。

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 - 锁定的错误。
-------------------------------

500 - 内部服务器错误。

500.12 - 应用程序正忙于在 Web 服务器上重新启动。

500.13 - Web 服务器太忙。

500.15 - 不允许直接请求 Global.asa.

500.16  - UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用。

500.18  - URL 授权存储不能打开。这个错误代码为 IIS 6.0 所专用。

500.100 - 内部 ASP 错误。

501 - 页眉值指定了未实现的配置。

502 - Web 服务器用作网关或代理服务器时收到了无效响应。502.1 - CGI 应用程序超时。

502.2 - CGI 应用程序出错。

503 - 服务不可用。这个错误代码为 IIS 6.0 所专用。

504 - 网关超时。

505 - HTTP 版本不受支持。

转载于:https://my.oschina.net/zorigin/blog/277690

<think>嗯,用户问的是关于枚举的使用,特别是用Java中的private enum State和private int code进行比较。首先,我需要确认用户的需求是什么。可能他们是在处理状态码相关的逻辑,想要了解如何正确使用枚举来代替整型常量,或者比较枚举和整型的优缺点。 首先,我应该回忆一下枚举的基本概念。枚举在Java中是一种特殊的数据类型,允许变量成为一组预定义的常量。使用枚举的好处包括类型安全、可读性高,以及避免魔法数字的问题。而直接使用int code的话,虽然灵活,但容易出现无效值,维护起来麻烦。 接下来,用户提到的private enum State和private int code的比较,可能需要从多个方面分析。比如类型安全性方面,枚举在编译时就会检查,而int可能传入任何整数值,容易出错。然后是代码可读性,枚举的每个常量可以有名字,更易理解,而int需要用文档或注释说明每个数字的意义。 然后,维护性也是一个重点。如果状态类型需要扩展,枚举只需添加新的常量即可,而int的话,可能需要修改多处代码,容易遗漏。性能方面,虽然枚举占用更多内存,但在大多数情况下影响不大,除非是特别低延迟的场景。 用户可能的实际应用场景是什么?比如处理HTTP状态码,或者订单状态之类的。例如用枚举定义HTTP状态码,每个枚举常量关联一个code和描述,这样比用int更清晰。或者比较两种方法的代码示例,用户可能更容易理解。 另外,用户可能想知道如何在实际代码中选择使用哪种方式。比如当状态是固定的、有限的集合时,用枚举更好;如果需要与外部系统交互,或者状态码是动态变化的,可能用int更合适。不过动态变化的情况可能较少,这时候可能需要其他设计模式。 有没有可能用户遇到了具体的问题?比如他们现在用int code,但遇到了维护困难,或者出现了无效的状态值,想改用枚举。或者他们看到别人的代码用了枚举,想了解好处在哪里。 需要举例子说明,比如订单状态的枚举,每个状态有对应的code,这样在代码中使用枚举常量,而不是数字,提高可读性。同时,可以展示如何将枚举转换为int,或者从int转换回来,如何处理可能的无效值。 还要注意比较时的不同,比如用枚举可以直接用==或者equals比较,而int则需要比较数值,但可能容易出错,比如不同的状态可能有相同的code,或者code被错误赋值。 可能还需要提到枚举的高级用法,比如带有属性的枚举,每个枚举实例可以有多个字段,比如code和description,这样更灵活。例如: public enum State { OK(200), NOT_FOUND(404); private int code; private State(int code) { this.code = code; } public int getCode() { return code; } } 这样在需要code的时候可以调用getCode(),同时保持类型安全。 而如果直接用private int code,可能在代码中多处需要验证code的有效性,比如检查是否在200、404等允许的范围内,否则抛出异常。而枚举的话,变量只能是预定义的实例,不会有无效值。 另外,序列化和持久化方面,存储枚举可能需要保存其名称或code,而int直接存数值即可。但使用JPA等ORM框架时,枚举可以通过@Enumerated注解方便地映射到数据库字段。 可能用户还关心如何在实际中替换现有的int code为枚举,或者两者并存的情况。比如系统内部用枚举,与外部接口交互时转换为int。 总结回答的结构应该是先介绍枚举的基本用法,然后对比枚举和int的优缺点,再给出使用场景的建议,最后提供示例代码说明如何实现带有code的枚举,以及比较时的注意事项。</think>在 Java 中,使用 `private enum` 定义状态和直接使用 `private int code` 存储状态码是两种不同的设计选择,它们的区别和适用场景如下: --- ### **1. 枚举 (`enum`) 的典型使用** 枚举是一种类型安全的方式,适合表示**固定且有限的预定义状态集合**。例如: ```java public class MyClass { private enum State { OK(200), NOT_FOUND(404), ERROR(500); private final int code; // 可关联一个整型 code State(int code) { this.code = code; } public int getCode() { return code; } } private State currentState; // 直接使用枚举类型 } ``` #### **优点**: - **类型安全**:只能赋值枚举中定义的常量,避免无效值。 - **可读性高**:状态名(如 `OK`、`NOT_FOUND`)比数字更直观。 - **扩展性强**:可为每个枚举常量附加属性(如 `code`)或方法。 - **避免魔法数字**:直接使用 `State.OK` 而非 `200`,代码更清晰。 #### **比较方式**: ```java if (currentState == State.OK) { ... } // 直接比较枚举对象 if (currentState.getCode() == 200) { ... } // 比较关联的 code ``` --- ### **2. 直接使用 `int code`** 直接用整型存储状态码,适合需要**高度灵活或与外部系统兼容**的场景: ```java public class MyClass { private int code; // 可能的值如 200, 404, 500 等 } ``` #### **优点**: - **内存占用小**:`int` 类型仅需 4 字节,枚举对象占用更多内存。 - **灵活性强**:可接受任意整数值,适合动态或未知状态码的场景(如与外部 API 交互)。 - **序列化简单**:直接存储数值,无需转换。 #### **缺点**: - **风险高**:可能赋值无效值(如 `123`)。 - **可读性差**:代码中直接出现 `200` 等数字,需注释或文档说明含义。 - **维护困难**:状态码的修改需全局检查硬编码的数字。 #### **比较方式**: ```java if (code == 200) { ... } // 需确保所有地方都正确处理值的含义 ``` --- ### **3. 关键对比** | **维度** | **枚举 (`enum`)** | **`int code`** | |----------------|--------------------------------------------|-------------------------------------| | **类型安全** | ✔️ 编译器检查,禁止无效值 | ❌ 需手动校验有效性 | | **可读性** | ✔️ 名称自解释(如 `State.OK`) | ❌ 需记忆或查文档(如 `200` 的含义) | | **扩展性** | ✔️ 可关联属性、方法,方便扩展逻辑 | ❌ 仅存储数值,逻辑分散在其他地方 | | **性能** | ⚠️ 对象内存开销稍大(通常可忽略) | ✔️ 基本类型,内存高效 | | **灵活性** | ❌ 需预定义所有可能值 | ✔️ 允许任意整数值 | --- ### **4. 使用建议** - **优先用枚举**:当状态集合固定且需要高可读性、类型安全时(如 HTTP 状态码、订单状态)。 - **使用 `int`**:当状态码动态变化、需兼容外部系统(如第三方 API 返回的未知状态码),或对内存有严格限制时。 --- ### **5. 混合方案** 可将枚举与 `int code` 结合,兼顾类型安全和外部兼容性: ```java public enum State { OK(200), NOT_FOUND(404), UNKNOWN(-1); private final int code; State(int code) { this.code = code; } public static State fromCode(int code) { for (State state : values()) { if (state.code == code) { return state; } } return UNKNOWN; // 处理无效 code } } // 使用示例 int externalCode = 404; State state = State.fromCode(externalCode); // 转换为枚举 ``` 这种设计既保留了枚举的安全性,又允许通过 `int` 与外部系统交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值