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内容如下:

1
2
3
4
5
6
7
8
9
10
11
<%@ 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如下:

1
2
3
4
document.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特别长,这种方法也就解决不了了。第一种方法就好用多了

posted @   夏天的尾巴%  阅读(12849)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示