报错: Error parsing HTTP request header

这篇具有很好参考价值的文章主要介绍了报错: Error parsing HTTP request header。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


问题描述

Bug:也是奇怪哦, 测试环境上好好的没问题, 到了生产环境上项目有接口就直接500了:

例如:Bug主体就是 Error parsing HTTP request header 和非法字符的问题.

java.lang.IllegalArgumentException:Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
org.apache.coyote.http11.AbstractHttp11Processor process
信息: Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:283)

原因分析:

提示:导致上述问题是因为tomcat自8.5.x系列的:8.5.12 之后版本、8.0.x系列的:8.0.42 之后版本、7.0.x系列的:7.0.76 之后版本对URL参数做了比较规范的限制,必须遵循RFC 7230 and RFC 3986规范,对于非保留字字符(json格式的请求参数)必须做转义操作,否则会抛出Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986错误信息。

就是严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。


解决方案:

  • 降低tomcat版本(不推荐),将tomcat版本改到tomcat8.5以下
  • 在SpringBoot工程中增加一个tomcat 配置,配置文件代码如下
import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 解决springboot项目请求出现非法字符问题
 */
@Configuration
public class TomcatConfig {

    @Bean
    public TomcatServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers((Connector connector) -> {
            connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
            connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
        });
        return factory;
    }
}

问题大致就是前后台交互的时候往往使用json格式的字段串参数,其中含有“{}”“[]”这些特舒符号,在高版本的tomcat中含有这些字符的请求会被拦截文章来源地址https://www.toymoban.com/news/detail-731551.html

到了这里,关于报错: Error parsing HTTP request header的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何处理postman报错:Error: Parse Error: Expected HTTP/

    遇到这个问题,应该是响应报文没有通过校验。下图是postman里的报错。 我们怎么去分析响应报文,可以用curl --verbose url来调试。 通过查看curl --verbose的输出,可以发现响应报文非头部分的长度超过了Content-Length,使得postman校验失败。当然,每个人的出错原因会不一样,这

    2024年02月11日
    浏览(39)
  • postman能访问,程序不行,报错信息:Message“:“internal error, Unacceptable header specified in request

      在开发过程中发现一个奇怪的现象,同样的ip地址postman能获取到正确的返回,程序中不行,返回的是 error\\\":{\\\"code\\\":\\\"Base.1.0.GeneralError\\\",\\\"@Message.ExtendedInfo\\\":{\\\"Message\\\":\\\"internal error, Unacceptable header specified in request\\\"         解决办法:最后发现是程序中没有设置请求头信息,而postma

    2024年02月12日
    浏览(93)
  • Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error:报错处理

    在进行VUE+springboot项目前后端数据传输时,出现如下错误 Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type java.lang.String from Object value (token JsonToken.START_OBJECT )] Controller层 前端传递的参数 报错原因是传参错误报错,因此检查前端

    2024年02月13日
    浏览(28)
  • 解决Apache Tomcat “Request header is too large“ 异常 ‍

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础

    2024年02月09日
    浏览(31)
  • git报错:error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413

    如图: error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 send-pack: unexpected disconnect while reading sideband packet fatal: the remote end hung up unexpectedly Everything up-to-date 原因是上传的文件过大,网上解决方案很多种,但是亲测有效的是把https传输改为ssh即可。 首先查看远程仓库: 这

    2024年02月05日
    浏览(34)
  • git push 报错“error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413”

    事先声明本方法只适用于上传文件较小的友友们!!! 状态码413是表示请求实体太大,就是push的内容太多了。检查自己的文件,发现超过了300MB(一些没用的东西忘删了┭┮﹏┭┮),于是删了一些不需要的文件,再次commit + push ,还是失败。 按照下面的方法改提交缓存,

    2024年02月11日
    浏览(31)
  • Nginx 代理调用 IIS报错:Bad Request Invalid Hostname HTTP Error 400. The request hostname is invalid

    由于Nginx配置文件中的proxy_set_header参数与请求的IIS 主机名不匹配所导致。使用Nginx代理调用IIS时,出现Bad Request - Invalid Hostname HTTP Error 400错误,由于IIS的主机头(Host Header)和Nginx代理请求的主机名不匹配所导致的。 解决问题的方法:在IIS站点的绑定中正确的主机头,确保和

    2024年02月04日
    浏览(49)
  • Proxy error: Could not proxy request /XXX localhost to http://localhost:8080/ (ECONNRE)报错处理

    今天在进行前后端联调时,联调不通,前端出现如下报错 通过在网上查找相关问题有很多种原因,因此博主根据资料进行相关解决方法的整理。 修改vue.config.js中的代理port 修改正确的地址或端口 博主是这个问题导致,一开始前端代理端口配置是8080,后端配置是8084,因此启

    2024年02月11日
    浏览(38)
  • HTTP:400 Request Header Or Cookie Too Large

    有时候在访问页面时会遇到400 Bad Request(Request Header Or Cookie Too Large)错误,如下图所示: 先了解一下关于400 Bad Request状态码的解释: 由于明显的客户端错误(例如,格式错误的请求语法,太大的大小,无效的请求消息或欺骗性路由请求),服务器不能或不会处理该请求。

    2024年02月04日
    浏览(31)
  • HTTP Header定制,客户端使用Request,服务器端使用Response

     在服务器端通过request.getHeaders()是无效的,只能使用response.getHeaders()。  

    2024年02月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包