HTTP - 406

今天在进行代码调试的时候,遇到一个奇怪的bug,昨天还是好好的一个接口,第二天调用就变成了406报错,真是相当无语。
报错时的效果如下:
avatar

反复的查找原因,没有发现代码有啥错误,后台的同事也表示他没有进行任何更改,后来对其他没有问题的接口进行比对,发现如下差异
avatar

发现前者是没有Content-Type这个参数,百度http-406发现如下描述

HTTP Status 406 (不接受)
->无法使用请求的内容特性响应请求的网页。

然后按照content-type这个思路去查找,发现自己ajax配置项中的Accept有错误,修正后就好了。
avatar

这真是个让人无语不bug!!!

<think>好的,用户想了解HTTP状态码406的含义及解决方法。首先我需要回忆一下相关知识,并查看提供的引用资料。根据引用1和引用2,406表示客户端无法解析服务器返回的内容,通常是因为内容类型不匹配。引用3提到Spring框架中的异常,可能与媒体类型有关。引用4指出SpringMVC中请求以html结尾时不会返回JSON,这可能导致406错误。 接下来要组织回答,先解释406状态码的定义,再分析常见原因,比如Accept头与Content-Type不匹配,服务器不支持客户端请求的格式,或者SpringMVC配置问题。然后给出解决方案,比如检查请求头、配置服务器支持的类型、调整SpringMVC设置等。需要注意引用对应的资料来支持每个点,比如引用4提到的.html请求问题。 用户可能遇到的具体场景可能是使用SpringMVC时返回JSON却被要求HTML格式,这时候需要检查produces配置或添加消息转换器。另外,确保示例代码正确,比如设置正确的Accept头。还要提醒用户检查服务器日志,如引用3中的异常信息,帮助定位问题。 最后生成相关问题,覆盖相关状态码、调试方法、与其他错误的区别以及Spring中的具体处理。需要确保问题与用户查询相关,帮助进一步理解。</think>### HTTP状态码406 Not Acceptable解析 #### 定义与触发条件 HTTP状态码406表示**客户端请求的资源格式无法被服务器满足**,即客户端通过`Accept`头声明的可接受内容类型(如`application/json`,`text/html`)与服务器实际返回的`Content-Type`不匹配[^2][^3]。 #### 常见原因分析 1. **客户端请求头缺失/错误** 示例:客户端未携带`Accept: application/json`却要求解析JSON响应,或请求`.html`结尾的URL但期望JSON响应[^4]。 2. **服务器配置限制** ```java // SpringMVC示例:请求路径以.html结尾时强制返回HTML类型 @RequestMapping(value="/data.html", produces="application/json") public String getData() { /*...*/ } ``` 此时即使方法声明`produces`,仍会因路径后缀触发类型冲突[^4]。 3. **缺少消息转换器** Spring框架未配置`Jackson`等JSON处理器时,无法将Java对象转换为客户端需要的格式[^3]。 #### 解决方案(附代码示例) 1. **客户端修正请求头** ```http GET /api/data HTTP/1.1 Accept: application/json # 明确声明可接受类型 ``` 2. **服务器配置调整** ```xml <!-- Spring MVC配置支持JSON --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ``` 3. **强制指定响应类型** ```java @RequestMapping(value="/data", produces=MediaType.APPLICATION_JSON_VALUE) public @ResponseBody DataObject getData() { /*...*/ } ``` 4. **禁用路径后缀影响** ```java // Spring Boot配置 @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.favorPathExtension(false); } } ``` #### 调试建议 1. 使用`curl -v`查看完整请求/响应头 2. 检查服务器日志中的`HttpMediaTypeNotAcceptableException` 3. 通过Postman验证不同`Accept`头的响应差异
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值