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方法提交失败.
随机推荐
- python使用类作为装饰器
1.普通就是一个函数作为装饰器,也可以用类名作为装饰器. 因为类和函数都是callable的,都可以使用括号来调用运行他. 2.上上篇的缓存一段时间的还是函数作为装饰器,类只是充当了比模块更下一级的命 ...
- XMPP协议实现即时通讯底层书写 (一)--从RFC6121阅读開始
Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence ok,额瑞巴蒂,说好的阅读RFC61 ...
- ios开发之--使用AFN上传3.1.0上传视频,不走成功回调原因及解决方法
在测试接口的时候,发现接口称走走了,但是success的回调不走,检查了下代码,发现没有初始化下面两个方法: manage.responseSerializer = [AFHTTPResponseSe ...
- 【代码审计】EasySNS_V1.6 前台任意文件下载漏洞分析
0x00 环境准备 EasySNS官网:http://www.imzaker.com/ 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/i ...
- IIS中采用ISAPI-Rewrite防盗链
本规则支持白名单排除式防盗链,搜索引擎友好(不屏蔽),被盗链后的错误提示转向,支持各种文件类型,经作者亲验真的能用,第一时间在itmop.com原创发表,请继续往下阅读. 近来小站遇到了盗链问题,至使 ...
- bat批处理文件按顺序执行exe
start /d "deepstream.io-windows-3.1.0" deepstream.exe rem 等待1秒钟 choice /t 1 /d y /n cd &qu ...
- [Vim] Vim 常用基本操作
1. 导航 1.1. 查看行号 :set number 显示行号 :set number! 隐藏行号 :.= 在底部显示当前行号 := 在底部显示总行号 1.2. 移动光标 0 或 ^ ...
- iOS - UICollectionView 瀑布流 添加表头视图的坑
UICollectionView 瀑布流 添加表头视图的坑 首先是,需求加了个头视图在顶部,在collectionView中的头视图跟TableView的不一样,TableView的表头只要设置tab ...
- 关于使用Delphi XE10 进行android开发的一些总结
RAD,可以快速开发出来,但是问题较多最好别用 说实话 做出来的app 太!大!了! 十分的特别的占内存! FireMonkey 真心太大了... 太占内存了 开发一般应用还可 ...
- html css float left与 float right的使用说明(转)
点评: CSS中很多时候会用到浮动来布局,也就是经常见到的float:left或者float:right,简单点来说,前者是左浮动(往左侧向前边的非浮动元素飘,全是飘得元素的话,就按照流式来浮动从左到 ...