如何处理Get请求参数过长
1.项目中总会遇到一些get请求参数过长,导致访问失败的问题,首先,get请求参数过长,访问失败的原因不是http协议的限制,是浏览器与服务器的长度限制导致的。2.常见的浏览器get请求方式长度限制Http get方法提交的数据大小长度并没有限制,Http协议规范没有对URL长度进行限制。目前说的get长度有限制,是特定的浏览器及服务器对它的限制。各种浏览器和服务器的最大处理能力如下:IE:对UR
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;
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)