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特别长,这种方法也就解决不了了。第一种方法就好用多了
URL长度过长的问题的更多相关文章
- ASP.NET MVC, Url长度过长问题解决,404.15问题
最近在处理一个问题的时候,发现他们存在一个大量数据放在URL中传递的过程,当数据达到一定数量的时候就会报出404.15问题. 运行环境是在IIS8,经过查询之后发现,URL此时最大长度为2048,肯定 ...
- HTTP中的URL长度限制(资料整理)
HTTP中的URL长度限制 首先,其实http 1.1 协议中对url的长度是不受限制的,协议原文: The HTTP protocol does not place any a priori l ...
- 浏览器和服务器 对http请求(post get) url长度限制
1. GET URL长度限制 在Http1.1协议中并没有提出针对URL的长度进行限制,RFC协议里面是这样描述的,HTTP协议并不对URI的长度做任何的限制,服务器端 必须能够处理任何它们所提供服 ...
- HTTP中的URL长度限制
首先,其实http 1.1 协议中对url的长度是不受限制的,协议原文: The HTTP protocol does not place any a priori limit on the leng ...
- js方法encodeURI后,关于get请求url长度的限制测试与总结
(本文仅作个人记录只用比较啰嗦,重点只看红字部分即可) Test.jsp 请求test1.jsp IE11环境下,get请求url最多4096个字节: 请求的是http://localhost:908 ...
- 浏览器和服务器 对post get请求 url长度限制
1. URL长度限制 2. Post数据的长度限制 3. Cookie的长度限制 1. GET URL长度限制 在Http1.1协议中并没有提出针对URL的长度进行限制,RFC协议里面是这样描述的, ...
- 图解Http协议 url长度限制
http请求报文的格式 一般请求所带有的属性: http响应报文的格式: 响应首部一般包含如下内容: 一.技术基石及概述 问:什么是HTTP? 答:HTTP是一个客户端和服务器端请求和响应的标准TCP ...
- mvc中多参数URL会很长,首次加载不传参数让url很短,路由规则实现方法[bubuko.com]
如要实现列表中地址全路径“bubuko-11-2.html”,在首次进入时,使用短路径“bubuko.html”,只有再次href后才显示全路径“bubuko-11-2.html”,下面使用路由规则来 ...
- URL不能过长,否则summit方法提交失败
MVC5.0+EF6.0,和浏览器的版本有关系.IE最多1024KB. URL不能过长,否则summit方法提交失败.
随机推荐
- Symbol.iterator的理解
https://blog.csdn.net/margin_0px/article/details/82971545
- Sql Server 跨服务器连接
用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB', 'sql服 ...
- 数据注解特性--NotMapped
NotMapped特性可以应用到领域类的属性中,Code-First默认的约定,是为所有带有get,和set属性选择器的属性创建数据列.. NotManpped特性打破了这个约定,你可以使用NotMa ...
- Android和IOS开发学习路线
图片看上去太小,直接另存为吧 图片来自:http://www.finalshares.com/
- getActionBar().setDisplayHomeAsUpEnabled(true)报空指针(已解决)
今天捣鼓了一下午.getActionBar().setDisplayHomeAsUpEnabled(true)总是报空指针.在我的还有一个Android4.4.2的项目中就没有一点问题.我还以为是我自 ...
- ios开发之--AVAudioPlayer/AVPlayer的应用
项目当中用到了音频播放器,所以就参考官方文档,写了一个,代码如下: .h #import <UIKit/UIKit.h> @interface hAudioPlayViewControll ...
- SELECT中常用的子查询操作
MySQL中的子查询 是在MySQL中经常使用到的一个操作,不仅仅是用在DQL语句中,在DDL语句.DML语句中也都会常用到子查询. 子查询的定义: 子查询是将一个查询语句嵌套在另一个查询语句中: 在 ...
- python commands模块在python3.x被subprocess取代
subprocess 可以执行shell命令的相关模块和函数有: os.systemos.spawnos.popen --废弃popen2.* --废弃commands.* --废弃,3.x中被移除 ...
- [Linux] 如何修改 Linux 主机名
该方法适用于安装了 Linux 系统的Raspberry Pi & Cubieboard. 在终端执行: sudo vi /etc/hosts 你看到的 hosts 文件应该是这样的: 127 ...
- 使用jquery的 $.grep实现es6的filter效果
现在es6是趋势,习惯了es6会方便的多,但是有时候由于项目的限制,会限制es6的使用,在处理数组的时候,往往会想将一个数组进行过滤产生另一个新数组,如es6的filter 如下,我又一个数组,[1, ...