1.项目中总会遇到一些get请求参数过长,导致访问失败的问题,首先,get请求参数过长,访问失败的原因不是http协议的限制,是浏览器与服务器对get请求长度限制导致的。

2.常见的浏览器get请求方式长度限制

Http get方法提交的数据大小长度并没有限制,Http协议规范没有对URL长度进行限制。

       目前说的get长度有限制,是特定的浏览器及服务器对它的限制。

        各种浏览器和服务器的最大处理能力如下:

        IE:对URL的最大限制为2083个字符,若超出这个数字,提交按钮没有任何反应。

        Firefox:对Firefox浏览器URL的长度限制为:65536个字符。

        Safari:URL最大长度限制为80000个字符。

        Opera:URL最大长度限制为190000个字符。

        Google(chrome):URL最大长度限制为8182个字符。

        Apache(Server):能接受的最大url长度为8192个字符(这个准确度待定???)

        Microsoft Internet Information Server(IIS):n能接受最大url的长度为16384个字符。

 

3.适用场景:在有些项目中需要签署一些买卖合同协议,合同内容有些值是不固定的,比如说地址,日期等,这些不固定的值可能有上百个,如果用户需要查看协议内容,一般会打开一个新的页面。这时需要将这些不固定的值填充到协议页面上。

4.如果直接使用get传输所有参数 方式打开新页面

 window.open(baseUrl+"/mercAxqSign?param="+param,"_blank");

param做为一个json字符串,可能包含上百个参数,这时会请求出错。

5,处理方式 :通过post请求解决get请求参数过长

先通过post请求,将参数存到后台服务中,如果参数比较重要,可以保存到数据库中,如果不重要,就放在缓存中,五分钟后自动清空。

$.ajax({
    	 	  url: baseUrl+"/yplay/axq_save_params", //这里保存参数信息
    	    type: "post", // 提交方式
    	    contentType : "application/json",
    	    data: JSON.stringify(params),  // data为String类型,必须为 Key/Value 格式。
    	    dataType: "json",    // 服务器端返回的数据类型
    	    async:false,
    	    success: function (data) {      	  
    	    	if (data.code == "000000") { 
    	  		if(freezeVersion == "0"){
    	  			window.open(baseUrl+"/mercAxqSign?id="+id,"_blank"); //通过id去服务器端查找参数
    	  		 } else{
    	  			window.open(baseUrl+"/mercAxqProtocol?id="+id,"_blank");  
    	  		 	}
    	  		

    	        } else {
    	      	  alert(data.message);
    	        }
    	    },
    	 });

服务器端代码,这里使用的jsp页面,返回ModelAndView:

@RequestMapping(value ="/mercAxqSign")
	public ModelAndView mercAxqSign(HttpServletRequest request) {
		String id = (String) request.getParameter("id");
		String data =  jinJianService.axqGetParams(id); //通过id查询保存到数据库的参数
		ModelAndView mv = new ModelAndView();
		mv.addObject("data",JSONObject.parse(data));			
		mv.setViewName("mercAxqSign");
	  return mv;	
	}

 

 

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐