zoukankan      html  css  js  c++  java
  • Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors...java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are

    先将异常信息贴出:

    该问题是tomcat进行http request解析的时候报的错,网上的解决办法主要是修改Tomcat的server.xml,在<Connector port="8080"protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443" />的配置中增加maxHttpHeaderSize的配置。

    <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" maxHttpHeaderSize="8192" />

    如果调整了maxHttpHeaderSize还是解决不了,这时候需要设置前端页面的数据格式,需要将method 的属性设置为POST

    但是这种方法对我的代码并未奏效。

    -----------------------------------------------------------------------------------------------------------------

    经过分析,发现此问题与请求参数有关。当在浏览器中访问时 URL中带有特殊字符,如花括号冒号时,就会出现这个错误。例如:http://localhost:8080/index.do?{id:123},在有些情况下,即使没有花括号,只要带有"?+参数"就会报此异常

    比如本文所遇该问题是在使用Layer.js的弹出窗体功能时出现的问题

    (代码中的*代码隐藏的代码,下同)

    js代码:

              var url = **.getWebRootPath()+ "/imagePair/toMakeRegister?cmdUuid=" 
               + cmdUuid+ "&projectId="+**.getProjectId();
    		
    		layer.open({
    			type : 2,
    			area : [ '1000px', '480px' ],
    			fixed : false, 
    			maxmin : true,
    			skin : 'layui-layer-nobg',
    			btn : [ '确定', '取消' ],
    			content : url,
    			
    			yes : function(index, layero) {
    				
    				*****
    				}
    

      java代码:

    @RequestMapping("/toMakeRegister")
    	public String toMakeRegister(HttpServletRequest request,Model model){
    		String cmdUuid = request.getParameter("cmdUuid");
    		String projectId = request.getParameter("projectId");
    		model.addAttribute("cmdUuid", cmdUuid);
    		model.addAttribute("projectId" ,projectId);*/
    		return "modules/data/imagefusionPair";
    	}
    

      原先的思路是通过后台转接得到子页面的url地址,然后使用layer.js组件实现将该url指向的页面作为子页面弹出。由于在url中有带?的参数,所以出现了本文开头的异常。于是,改变url形式,去掉后面的参数,将其通过其他方式进行父子界面的传参。

           因此又引出了另一个问题,如何使用layer.open()的时候进行父子界面传参?

      本文解决办法:直接上代码

    父js:

    	
    		var url = *.getWebRootPath()+ "/imagePair/toMakeRegister";
    	    var projectId=*.getProjectId();
    	    var para={
    	    		"cmdUuid":cmdUuid,
    	    		"projectId":projectId
    	    		};
    	    
    		parent.layer.open({
    			type : 2,
    			area : [ '1000px', '480px' ],
    			fixed : false, // 不固定
    			maxmin : true,
    			skin : 'layui-layer-nobg', // 没有背景色
    			btn : [ '确定', '取消' ],
    			content : url,
    			success: function(layero, index) {
    				$(layero).find('iframe'[0].contentWindow.getParentData(para);
    
    			},
    			yes : function(index, layero) {
    				
    				****
    				}
    

      

    子页面js: 添加获取父页面数据的方法

    function getParentData(para){
    	cmdUuid=para.cmdUuid;
    	projectId=para.projectId;
    }	
    

      

    关键的是

    success: function(layero, index) {
    				$(layero).find('iframe'[0].contentWindow.getParentData(para);
    
    			},

    “success”定义的回掉函数是在子页面加载完成之后执行的,

    $(layero).find('iframe'[0].contentWindow获取子页面窗体对象,然后直接调用在子页面中定义的getParentData(para)方法;

    ---------------------------------------------------------------------------------------------------

  • 相关阅读:
    Tree 点分治
    [LUOGU4149][IOI2011]Race
    [BZOJ2152] 聪聪可可
    [LUOGU3413] SAC#1
    [JZOJ5776]【NOIP2008模拟】小x游世界树
    [JZOJ5775]【NOIP2008模拟】农夫约的假期
    [JZOJ5781]【NOIP提高A组模拟2018.8.8】秘密通道
    [JZOJ5778]【NOIP提高A组模拟2018.8.8】没有硝烟的战争
    [JZOJ5773]【NOIP2008模拟】简单数学题
    [JZOJ5459]【NOIP2017提高A组冲刺11.7】密室
  • 原文地址:https://www.cnblogs.com/yingrufeng/p/7851846.html
Copyright © 2011-2022 走看看