专栏名称: 鸭哥聊Java
回复关键字:666 ,领取免费简历模板,Java面试题,Java编程视频等。本号内容涵盖Java源码,JVM源码,Dubbo源码,Spring源码,Spring Cloud微服务架构,分布式高并发架构技术,MySQL性能调优等。
目录
相关文章推荐
宁夏药安早知道  ·  我国海洋经济总量首超十万亿元 ·  22 小时前  
甘肃政务  ·  我国海洋经济总量首超十万亿元 ·  昨天  
安徽省发展改革委  ·  安徽省新能源汽车产业集群建设企业巡展——【2 ... ·  昨天  
安徽省发展改革委  ·  安徽省新能源汽车产业集群建设企业巡展——【2 ... ·  昨天  
地刊速览  ·  EPSL:古太平洋的缺氧事件 ·  昨天  
地刊速览  ·  EPSL:古太平洋的缺氧事件 ·  昨天  
51好读  ›  专栏  ›  鸭哥聊Java

京东面试题:说一下HTTP常用的状态码

鸭哥聊Java  · 公众号  ·  · 2025-02-07 11:07

正文

今天我们来聊一聊HTTP状态码这个话题。作为一个Java开发工程师,在我们开发Web应用或者与外部接口进行交互时,经常会遇到HTTP状态码的相关问题,搞清楚这些状态码的含义以及如何处理它们,是非常重要的。

HTTP状态码是Web通信过程中不可或缺的一部分。它们在客户端和服务器之间的通信中充当着重要角色,帮助我们了解请求的处理结果。

当你用浏览器访问一个网站时,背后其实有大量的状态码在默默地工作。我们常常看到的是200 OK和404 Not Found,但实际上,状态码不仅仅只有这两个,还有很多不同的类型和状态。

HTTP状态码按照标准被划分为五个大类,每一类都有它特定的含义。接下来,我会详细介绍这些状态码的分类,以及它们在实际开发中可能遇到的一些问题。

1xx 类状态码(信息性状态码)

1xx类状态码用于表示请求正在处理过程中,属于协议的中间状态。换句话说,这些状态码并不是最终的结果,而是表示某个操作正在进行,或者服务器正在准备响应。最常见的状态码是100(Continue),这表示客户端可以继续发送请求的剩余部分。实际上,1xx类状态码在实际开发中并不常用。

2xx 类状态码(成功状态码)

2xx类状态码表示服务器成功处理了客户端的请求,结果是成功的,客户端可以放心使用返回的资源。最常见的状态码是200,它表示请求成功,服务器返回了请求的资源。

例如,在Java中使用Spring框架进行RESTful API开发时,返回一个200状态码的示例代码可能是这样的:

@GetMapping("/hello")
public ResponseEntity hello() {
    return ResponseEntity.ok("Hello, World!");
}

这种情况下, ResponseEntity.ok() 方法会自动设置200状态码,表示请求成功。

除了200,2xx类还有一些其他状态码,比如201(Created)表示请求成功并且服务器创建了新的资源,202(Accepted)表示请求已接受,但尚未处理。

3xx 类状态码(重定向状态码)

3xx类状态码用于表示客户端请求的资源已发生变化,需要通过新的URL继续访问。这类状态码通常与重定向相关,常见的有301和302。

  • 301(Moved Permanently) 表示请求的资源已经被永久移动到新的地址,客户端应当使用新的URL进行请求。
  • 302(Found) 表示请求的资源临时被移到一个新的位置,客户端应继续使用原来的URL进行后续的请求。

例如,在Spring中使用 @RequestMapping 时,可以通过设置响应头来进行重定向:

@RequestMapping("/old-path")
public ResponseEntity redirect() {
    return ResponseEntity.status(HttpStatus.FOUND)
                         .location(URI.create("/new-path"))
                         .build();
}

这种情况下,Spring会返回302状态码,并将用户重定向到新的路径。

4xx 类状态码(客户端错误状态码)

4xx类状态码表示客户端请求有问题,服务器无法处理请求。常见的错误包括请求格式不正确、请求的资源不存在等。最常见的状态码是404,它表示请求的资源未找到。

404错误是开发过程中最常见的错误之一,很多时候是由于URL写错或者资源不存在导致的。例如,在开发API时,客户端可能会请求一个不存在的接口,服务器就会返回404。

@RequestMapping("/users/{id}")
public ResponseEntity getUser(@PathVariable("id") Long id) {
    User user = userService.findById(id);
    if (user == null) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).build();
    }
    return ResponseEntity.ok(user);
}

当用户请求的资源不存在时, NOT_FOUND 状态码会被返回,表示资源未找到。

除了404,4xx类还有一些其他状态码,比如400(Bad Request)表示客户端发送的请求有错误,405(Method Not Allowed)表示请求的方法不被允许,403(Forbidden)表示服务器拒绝了请求。

5xx 类状态码(服务器错误状态码)

5xx类状态码表示服务器在处理客户端请求时发生了错误。这类错误通常是由于服务器内部的问题导致的,而不是客户端的问题。常见的状态码是500,它表示服务器内部错误。

例如,当Java后端服务出现异常时,可能会返回500状态码,表示服务器无法处理请求。以下是一个简单的例子,当发生异常时,返回500状态码:

@GetMapping("/cause-error")
public ResponseEntity causeError() {
    throw new RuntimeException("Server error!");
}

在这种情况下,服务器会返回500状态码,表示发生了内部错误。

除了500,5xx类还有一些其他状态码,比如502(Bad Gateway)表示网关错误,503(Service Unavailable)表示服务不可用,504(Gateway Timeout)表示网关超时。

最后,我们来看几道相关的面试题:

1、 什么是HTTP状态码?

HTTP状态码用于表示服务器对客户端请求的响应状态。它们分为五类,分别表示不同的状态:成功、重定向、客户端错误、服务器错误和信息性状态。

2、 常见的HTTP状态码有哪些?

常见的状态码包括:

  • 200:请求成功
  • 301:永久重定向
  • 302:临时重定向
  • 404:请求的资源未找到
  • 405:请求的方法类型不支持
  • 500:服务器内部错误

3、 如何处理HTTP 404错误?

404错误通常表示请求的资源不存在,可以通过确保URL正确、资源存在以及正确配置路由来解决。

4、 如何使用Java代码处理HTTP状态码?

在Spring中,可以通过 ResponseEntity 来返回特定的状态码,例如:

@GetMapping("/example")
public ResponseEntity example() {
    return ResponseEntity.status(HttpStatus.OK).body("Request was successful");
}

这会返回200状态码表示请求成功。

对编程、职场感兴趣的同学,可以链接我,微信:yagebug  拉你进入“程序员交流群”。






请到「今天看啥」查看全文