HTTP协议—— 响应状态码

一、 HTTP响应报文的状态码

HTTP响应报文的状态行包括三项内容,即 HTTP的版本,状态码,以及解释状态码的简单短语。

下面三种状态行在响应报文中是经常见到的。

HTTP/1.1 202 Accepted           {接受}
HTTP/1.1 400 Bad Request        {错误的请求}
Http/1.1 404 Not Found          {找不到}

状态码(Status-Code)负责表示客户端 HTTP 请求的返回结果、标记服务器端 的处理是否正常、通知出现的错误等工作。状态码(Status-Code)都是三位数字的,分为5大类。这5大类的状态码都是以不同的数字开头的。

类别原因短语
1xxInformational(信息性状态码)接收的请求正在处理
2xxSuccess(成功状态码)请求正常处理完毕
3xxRedirection(重定向状态码)需要进行附加操作以完成请求
4xxClient Error(客户端错误状态码)服务器无法处理请求
5xxServer Error(服务器错误状态码)服务器处理请求出错

仅记录在 RFC2616 上的 HTTP 状态码就达 40 种,若再加上 WebDAV(Web-based Distributed Authoring and Versioning,基于万维网 的分布式创作和版本控制)(RFC4918、5842) 和附加 HTTP 状态码 (RFC6585)等扩展,数量就达 60 余种。但是,实际上经常使用的大概只有 14 种

查询状态码的建议网址主要有:

二、 常见状态码

2xx 为开头的都表示 请求成功响应。

状态码简单短语含义
200OK成功响应
204No Content请求处理成功,但是没有资源可以返回
206Partial Content客户端进行范围请求,由Content-Range 指定范围的实体内容。服务器对资源某一部分进行响应

3xx 为开头的都表示 浏览器需要进行附加操作以完成请求

状态码简单短语含义
301Moved Permanently永久性重定向,该状态码表示请求的资源已经重新分配 URI,以后应该使用资源现有的 URI
302Found临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
303See Other该状态码表示由于请求对应的资源存在着另一个 URI,客户端应使用 GET 方法定向获取请求的资源。
304Not Modified该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。
307Temporary Redirect临时重定向。该状态码与 302 Found 有着相同的含义, 会遵照浏览器标准,不会从POST变成GET

当 301、302、303 响应状态码返回时,几乎所有的浏览器都会把 POST 改成 GET,并删除请求报文内的主体,之后请求会自动再次发送。

301、302 标准是禁止将 POST 方法改变成 GET 方法的,但实际使 用时大家都会这么做。

4xx 的响应结果表明客户端是发生错误的原因所在。

状态码简单短语含义
400Bad Request该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
401Unauthorized该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。
403Forbidden该状态码表明对请求资源的访问被服务器拒绝了。(原因很有可能是客户端没有访问权限)
404Not Found该状态码表明服务器上无法找到请求的资源。(也可以在服务器端拒绝请求且不想说明理由时使用)

5xx 为开头的响应标头都表示服务器本身发生错误

状态码简单短语含义
500Internal Server Error该状态码表明服务器端在执行请求时发生了错误。
503Service Unavailable该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

参考资料

Hypertext Transfer Protocol (HTTP) Status Code Registry (iana.org)

计算机网络(第7版)-谢希仁 (书籍)

图解HTTP.上野宣 (书籍)

看完这篇HTTP,跟面试官扯皮就没问题了 CSDN博客

HTTP 响应状态码 - HTTP | MDN (mozilla.org)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Java 中,你可以使用 HttpClient 发送请求并获得一个 HttpEntity 对象,如果你想将它转换为 ResponseEntity 对象,可以参考以下代码示例: ```java import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.springframework.http.ResponseEntity; import java.io.IOException; class Program { public static void main(String[] args) throws IOException { String url = "https://example.com"; HttpClient client = HttpClients.createDefault(); HttpPost request = new HttpPost(url); // 设置请求体 String requestBody = "{\"key\":\"value\"}"; StringEntity entity = new StringEntity(requestBody, ContentType.APPLICATION_JSON); request.setEntity(entity); // 发送请求并获取响应 HttpResponse response = client.execute(request); // 将 HttpEntity 转换为 ResponseEntity HttpEntity responseEntity = response.getEntity(); String responseBody = EntityUtils.toString(responseEntity); int statusCode = response.getStatusLine().getStatusCode(); ResponseEntity<String> responseEntity = ResponseEntity.status(statusCode).body(responseBody); // 处理响应 System.out.println("Response Body: " + responseEntity.getBody()); } } ``` 在上述示例中,我们使用 Apache HttpClient 发送 POST 请求,并将请求体设置为 JSON 字符串。然后,我们执行请求并获取响应。 接下来,我们将响应中的 HttpEntity 对象转换为 ResponseEntity。首先,我们使用 EntityUtils 类将 HttpEntity 转换为字符串形式的响应体。然后,我们通过获取响应状态码,并使用 ResponseEntity.status() 和 .body() 方法创建 ResponseEntity 对象。 最后,我们可以根据需要处理 ResponseEntity 中的响应数据。 请注意,这里示例中使用的是 Apache HttpClient,而不是 Spring 的 WebClient。如果你使用的是 Spring WebClient,请使用 WebClient 的相关方法来发送请求和处理响应。 希望对你有所帮助,如果有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值