HTTP 请求 报错信息406

 

背景

             和 APP(安卓) 联调 时, APP请求 获取数据时  提示 406 错误

解决过程

             在网上寻找资料(以前没遇到过),一一排除,最终解决(浪费蛮多时间  所以记录下来,等待有缘人)。

 星空的阿斯 的这篇博客 https://blog.youkuaiyun.com/xingkongdeasi/article/details/79946672 

问题的根源

               发送和接收的ContentType格式不匹配。

自己抓了包看了一下 , 后台发送的ContentType 是text/html;charset=utf-8,但是app端准备接收的 ContentType 是text/json;charset=utf-8 。

解决方法

所以根据  星空的阿斯 博客里面介绍的  produces , 修改这个属性的值(或者删除,在解决乱码的前提下),与APP端保持一致。最终解决问题。

 

 

 

 

### HTTP 请求报错 405 的解决方案 HTTP 状态码 `405 Method Not Allowed` 表示客户端尝试使用服务器配置中未启用的 HTTP 方法访问某个资源。以下是可能的原因及其对应的解决方案: #### 原因一:请求方法不被支持 如果服务器上的目标资源未配置为接受特定的 HTTP 方法(如 POST 或 PUT),则会触发此错误。 **解决方案** 1. **确认 API 接口文档中的方法** 检查接口文档,确保调用的是正确的 HTTP 方法[^1]。 2. **修改前端代码以匹配后端支持的方法** 如果后端仅支持 GET 而前端发起了 POST 请求,则需调整前端逻辑以发送正确的请求类型[^2]。 --- #### 原因二:Web 服务器配置问题 某些情况下,可能是 Web 服务器(如 Apache、Nginx 或 IIS)未正确配置允许的 HTTP 方法。 **解决方案** 1. **IIS 配置** 打开 IIS 管理器,在对应网站的属性中,进入“主目录 -> 配置”选项卡,添加或更新所需的 MIME 类型以及允许的 HTTP 动词列表。 2. **Apache/Nginx 配置** 编辑 `.htaccess` 文件或 Nginx 配置文件,确保启用了所需的方法。例如,在 Nginx 中可以这样配置: ```nginx location /api/ { allow_methods GET POST PUT DELETE; } ``` --- #### 原因三:Servlet 过滤器拦截了非法请求 在 Java Servlet 应用程序中,可能会有自定义过滤器捕获并拒绝不符合条件的请求。 **解决方案** 检查是否存在类似的代码片段,它会在接收到非预期方法时主动抛出 `405` 错误: ```java private void sendMethodNotAllowed(HttpServletRequest req, HttpServletResponse resp, String msg) throws IOException { String protocol = req.getProtocol(); if (!protocol.equals("HTTP/0.9") && !protocol.equals("HTTP/1.0")) { resp.sendError(405, msg); } else { resp.sendError(400, msg); } } ``` - 修改该部分逻辑,或者扩展其判断条件以适应新的业务需求。 --- #### 原因四:跨域资源共享 (CORS) 设置不当 当涉及跨域请求时,浏览器会对预检请求(OPTIONS 方法)做出额外的安全校验。如果没有适当地处理这些请求,也可能引发 `405` 错误。 **解决方案** 1. 在服务端设置 CORS 头部信息,允许必要的域名和方法。例如,在 Spring Boot 中可加入以下配置: ```java @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedOrigin("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } ``` 2. 对于 IIS 用户,按照以下步骤操作[^3]: - 添加 HTTP 响应头部 `"Access-Control-Allow-Methods"` 和 `"Access-Control-Allow-Origin"`。 - 示例值分别为 `"GET,POST,PUT,DELETE"` 和 `"*"(表示不限制来源)"。 --- #### 总结 以上列举了几种常见场景下的解决思路。具体实施前建议先排查日志记录,定位实际发生的异常位置后再采取相应措施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值