页面树结构
转至元数据结尾
转至元数据起始

正在查看旧版本。 查看 当前版本.

与当前比较 查看页面历史

« 前一个 版本 2 下一个 »

(本文档仅供参考)

问题

         本地测试在tomcat 9中测试如下URL链接, 测试串(基于产品自带的例子):http://localhost:8080/smartbi/vision/openresource.jsp?paramsInfo=[{"name":"产品名称参数","value":"汽水","displayValue":"汽水"}]&resid=I4028812115561f6c0144956d0aa20117&showtoolbar=true&refresh=true&user=admin&password=admin 

         发现访问的时候提示“HTTP Status 400 -错误的请求”,不传参打开是正常访问的,这个是为什么?

        

解决方案

       经验证发现是由于tomcat中间件的问题导致,这应该是一个比较普通存在的问题。

        一、Tomcat出现版本

  • 7.0.69+

  • 8.0.39+

  • 8.5.7+

        二、问题原因    

         请求的URL在编码后的中文字符串带反斜杠,这是RFC文档中规定的不安全字符,Tomcat在高版本中增加的安全验证,凡是RFC 3986中非URL可携带的字符,都会返回400错误。

         这个问题根本都还没有进入到业务层就已经被拦截返回了。

       RFC 3986文档关于特殊字符的定义

  • RFC3986文档规定,Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符。
  • RFC3986中指定了以下字符为保留字符:
    ! * ' ( ) ; : @ & = + $ , / ? # [ ]
  • 以下为不安全字符
    • 空格 Url在传输的过程,或者用户在排版的过程,或者文本处理程序在处理Url的过程,都有可能引入无关紧要的空格,或者将那些有意义的空格给去掉
    • 引号以及<> 引号和尖括号通常用于在普通文本中起到分隔Url的作用
    • 通常用于表示书签或者锚点

    • % 百分号本身用作对不安全字符进行编码时使用的特殊字符,因此本身需要编码
    • {}|^[]`~ 某一些网关或者传输代理会篡改这些字符

       三、解决办法

             1)配置tomcat/conf下的catalina.properties(tomcat 9测试发现编码后依然存在问题)

                  添加或者修改:

                 tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}           

            2)参数都进行编码(tomcat 9测试发现编码后依然存在问题,可能编码方式不对)           

            3)使用post方式(可以)         

            4)降级tomcat(可以),windows一键安装包自带的tomcat版本比较低,没有此问题。           

            5)cong/server.xml增加 urlencoding编码(测试发现编码后依然存在问题




Viewtracker License Missing

There is a problem with the license of the Viewtracker addon. Please check if you have a valid license.

授权码细节

  • 无标签