码迷,mamicode.com
首页 > 其他好文 > 详细

nginx+tomcat报400的坑

时间:2019-06-07 00:22:33      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:parse   toc   网上   htm   href   app   后端   war   问题   

  nginx+tomcat的网页,在手机上通过浏览器可以正常访问,但是在自己的app的webview中访问就报400。查了访问日志,每次app中访问该页面,tomcat中就出现一个GET null的申请,但不知道怎么来的,真是百思不得其解。

  直到在网上找到这个:《记一次nginx+tomcat8请求400错误的坑》,这个跟我的问题应该是一模一样。核心原因就是申请中包含了特殊字符|{}或者空host参数。估摸着浏览器对这种字符进行了转码,而app的webview控件处理过于简单,然后被tomcat拒绝了。

  记录下,备用。

  1. request header过大所引起,request过大,通常是由于cookie中写入了较大的值所引起。 在nginx.conf中,将client_header_buffer_sizelarge_client_header_buffers都调大,可缓解此问题。
  2. 客户端的调用方式没有使用host 参数,传递了空的Host头给服务端,一旦Nginx设置了proxy_set_header Host $host,空Host头就传给了后端。然而,在http 1.1的规范中,Host只要出现空,就会返回400,所以出现了这个故障。而对于需要在Host字段里带上端口信息的,则仍需要配置proxy_set_header Host $host:$server_port
  3. 在server下加入server_name _;
  4. 在tomcat的server.xml中加入以下配置:
     <Valve className="org.apache.catalina.valves.RemoteIpValve"
                      portHeader="x-forwarded-port"
                      remoteIpHeader="x-forwarded-for"
                      proxiesHeader="x-forwarded-by"
                      protocolHeader="x-forwarded-proto" />
  5. 配置tomcat支持|{}等字符的方法是:在 catalina.properties中添加 tomcat.util.http.parser.HttpParser.requestTargetAllow=|{} 但是只支持7.0.76, 8.0.42, 8.5.12 之后的版本(这些版本之后支持设置上述属性)

  需要强调的是app中访问错误信息中有一行:java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

           

nginx+tomcat报400的坑

标签:parse   toc   网上   htm   href   app   后端   war   问题   

原文地址:https://www.cnblogs.com/badwood316/p/10987228.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!