URL长度过长的问题
最近项目中很多跨域的问题,有时候跨域要传递很多参数,甚至有时候要传递整个对象,处理的方法是把对象转换成JSON形式的字符串再传递。此时该JSON字符串就比较长,作为参数附加到URL后面,URL就会变得很长,而浏览器和服务器对URL长度是有限制的,因此很容易出错。这里记录一下解决该问题的方法。
上网查询得知:
不同浏览器对URL长度的限制不同,不同的Web服务器处理URL的最大长度的能力也不同。
IE中URL的最大长度是2083字符(资料:http://support.microsoft.com/kb/208427)
解决URL过长的方法:转为使用POST提交数据
例子:
1<iframe id=
"iframe1"
src=
""
width=
"100%"
height=
"740px"
frameborder=
"no"
></iframe>
用Ajax给iframe赋src值,$("#iframe1").src=url;
问题:当url很长时,很可能超出浏览器和服务器对url长度的限制。
第一种解决方法:
1<iframe id=
"iframe1"
src=
"proxy/proxytest.jsp"
width=
"100%"
height=
"740px"
frameborder=
"no"
></iframe>
src中链JSP页面,proxytest.jsp内容如下:
1234567891011<%@ page language=
"java"
contentType=
"text/html; charset=GBK"
pageEncoding=
"GBK"
%>
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<body>
<form id=
"test"
action=
""
method=
"post"
>
<input id=
"testId1"
type=
"hidden"
name=
"testId1"
/>
<input id=
"testId2"
type=
"hidden"
name=
"testId2"
/>
</form>
</body>
</html>
form中的action为空,提交方式是POST,有隐藏域,该<input type="hidden"/>是要提交到后台的参数,所以在Struts2中name值和后台接收的参数保持一致。
使用的时候,JS如下:
1234document.getElementById(
"iframe1"
).contentWindow.document.getElementById(
"testId1"
).value=
"<s:property value='testId1'/>"
;
document.getElementById(
"iframe1"
).contentWindow.document.getElementById(
"testId2"
).value=
"<s:property value='testId2'/>"
;
document.getElementById(
"iframe1"
).contentWindow.document.getElementById(
"test"
).setAttribute(
"action"
,url);
document.getElementById(
"iframe1"
).contentWindow.document.getElementById(
"test"
).submit();
js把需要提交到后台的参数值赋给对应的<input type=”hidden”/>,js把url赋给form的action,并提交form,该form提交到包括它的iframe中。因为参数值可以通过<input type=”hidden”/>提交,而不用非要放到url后边,可以很大程度的缩短url的长度。
第二种解决方法:
把整个iframe用js构造,而不是像现在这样(HTML把iframe写好,然后js赋给src值)。如:
1$(
"#iframe1"
).html(
"<iframe id =\"resultIFrame\" name=\"tag\" src=\" "
+ url +
" \" frameborder=\"0\" scrolling=\"no\" width=\"100%\" height=\"100%\" onload=\"this.height=tag.document.body.scrollHeight\"></iframe>"
);
这种方法使用与url比较长但又不是非常长的时候。经试验,如果url特别长,这种方法也就解决不了了。第一种方法就好用多了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示