URL长度过长的问题

最近项目中很多跨域的问题,有时候跨域要传递很多参数,甚至有时候要传递整个对象,处理的方法是把对象转换成JSON形式的字符串再传递。此时该JSON字符串就比较长,作为参数附加到URL后面,URL就会变得很长,而浏览器和服务器对URL长度是有限制的,因此很容易出错。这里记录一下解决该问题的方法。

上网查询得知:

不同浏览器对URL长度的限制不同,不同的Web服务器处理URL的最大长度的能力也不同。

IE中URL的最大长度是2083字符(资料:http://support.microsoft.com/kb/208427

解决URL过长的方法:转为使用POST提交数据

例子:

<iframe id="iframe1" src="" width="100%" height="740px" frameborder="no"></iframe>

用Ajax给iframe赋src值,$("#iframe1").src=url;

问题:当url很长时,很可能超出浏览器和服务器对url长度的限制。

第一种解决方法:

<iframe id="iframe1" src="proxy/proxytest.jsp" width="100%" height="740px" frameborder="no"></iframe>

src中链JSP页面,proxytest.jsp内容如下:

<%@ 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">
<html xmlns="http://www.w3.org/1999/xhtml" >
<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如下:

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值)。如:

$("#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特别长,这种方法也就解决不了了。第一种方法就好用多了

时间: 2024-10-06 16:46:14

URL长度过长的问题的相关文章

HTTP中的URL长度限制

由于之前的一个web项目中,要用get方法去获取数据,但结果时常报错,经过仔细排查才发现原来url长度超过了限制,通过缩短url和发送多次请求的方法解决了该问题,之后在网上查了些资料,发现这个问题还是内藏玄机,要比自己想的复杂. 首先,其实http 1.1 协议中对url的长度是不受限制的,协议原文: The HTTP protocol does not place any a priori limit on the length of a URI. Servers MUST be able t

windows服务器下,URL链接过长处理办法

使用win服务器时,如果URL过长,会碰到无法正常解析的情况 1.限制: WINDOWS 下的路径字符是260个字符,而  IIS 支持最长的URL 长度为254.在IIS7管道中,先进行了路径model,再进HANDLE,在管道运行过程中,会试图去操作系统下寻找文件,无论是MVC形成的路径,还是aspx产生的路径.这时就会报错. 2.解除限制的前提条件 环境必须使用 IIS 7.5, .net framework使用 4.0版本 3.配置文件 在web.config中,加入如下配置 4.修改注

求一个字符串中出现相同且长度最长的字符串

题目:输入一行字符串,找出其中出现的相同且长度最长的字符串,输出它及其首字符的位置.                例如:"yyabcdabjcabceg",输出结果应该为abc 和3. #include<iostream> #include<string> using namespace std; int main() { string str, tep; cout << "输入字符串" << endl; cin &

jQuery Ajax 请求报长度过长的错误:Error during serialization or deserialization using the JSON JavaScriptSerializer

{"Message":"Error during serialization or deserialization using the JSON JavaScriptSerializer. The length of the string exceeds the value set 在web项目的web.config <configuration>节下增加 <system.web.extensions>    <scripting>    

求一个字符串中出现同样且长度最长的字符串

题目:输入一行字符串.找出当中出现的同样且长度最长的字符串,输出它及其首字符的位置.                比如:"yyabcdabjcabceg",输出结果应该为abc 和3. #include<iostream> #include<string> using namespace std; int main() { string str, tep; cout << "输入字符串" << endl; cin &

HDU-1257 最少拦截系统 贪心/DP 最长上升子序列的长度==最长不上升子序列的个数?

题目链接:https://cn.vjudge.net/problem/HDU-1257 题意 中文题咯中文题咯 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹. 怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少

js代码生成form,解决mvc的url参数过长问题

在MVC项目中,通常下载的文件的简单方式是直接采用 location.href+查询参数方式. 1 var searchParams = { 2 studentName: $("#StudentName").val(), 3 birthDate: $("#BirthDate").val() 4 }; 5 var baseurl = "@Url.Action("ExportData", "Student")"

单行长度过长显示为省略号

今天get 了css新样式: 控制一行一行的文本如果太长,就用省略号显示: 样式如下: .myStyle{width:160px;height:50px;line-height:50px;border:4px solid #eee; white-space:nowrap;/*强制文本在一行内显示*/ text-overflow:ellipsis; /*溢出省略号,支持ie.safari(webkit)*/ -o-text-overflow:ellipsis; /*溢出省略号,支持opera*/

使用excel打开文件,修正长度过长的数字后几位变为0的问题

之前一直不知道这个方法,知道的就跳过吧,勿喷. 我们将身份证号,订单号,手机号,银行卡号等存到文本中,但是使用excel打开的时候 通常会变成科学技术法的样式 如果我们是将数据主动存到 excel中可以通过设置单元格格式为文本即可 但是有的时候这些数据并不是从excel录入的,例如我们从网站中导出. 例如商城导出订单信息,订单号往往很长,而且许多网站后台导出的数据是存到 了csv文件中,而这个文件又默认是使用excel打开.当然我们希望使用excel打开,毕竟基于 excel的强大功能. 例如打