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)方法;

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM