需要在网页上传输一段很长的字符串,但是会报“Request URL Too Long”的异常,求高手推荐比较高效的压缩与解压缩方式
URL存在长度上限,如果用get方式传输,局限性很大,即使通过压缩,也不会很理想。因为本身长度很小。如果是post传输,基本不可能存在内容过大。对于压缩方面,看具体内容吧,是否存在汉字,符号是否很多。具体的去搜索字符串压缩方面的吧。最终还是建议post传输,理论上post无大小限制
我这边用的是<a href="@Url.Action( 的方法,刚接触web,不是特别明白这几种方法
@不要问我从哪里来123: 这种情况,简单的实现就是通过js实现。点击a标签触发事件,提交form表单。form表单中包含需要提交的数据
@小风疏雨: 请问一下,我这边传输的字符长度大概有1.7万,感觉post也hold不住了,请问下有解决方法吗
@不要问我从哪里来123: 1英文字符=1B,1.7W的话17K左右,完全可以。主流服务器处理100K的post表单没问题
@小风疏雨: 我发现我用post方法加载的参数全都显示在url里面了,造成url太长,请问有比较好的解决方法吗
@不要问我从哪里来123: 把参数放入请求体里,不要放在url上。post传输,参数放在url上,url的参数仍然是get方式传输。既然用的html标签,那就写个form表单,表单上声明method=post action=url(只要?前面的),form元素中写<input /> name=参数名,value=需要放置的值。最后a标签href=javascript: onclick=一个js方法,通过js提交表单
@小风疏雨: 请问一下可以设置“只要显示前面的,不用显示参数”这个可以设置吗?
@不要问我从哪里来123:
<form method="post" action="@Url.Action("Po", "Lo", new { SystemInfo = Info })" enctype="multipart/form-data"> <input type="submit" value="下载" /> </form>
我这样写,url里面还是加载了
@不要问我从哪里来123: action 后只写url的地址,不带参数,<input type="hidden" name=“属性名” value="属性值" />
@小风疏雨: 谢谢你的耐心解答,学习到了
不要用GET方式,用POST方式,具体请看资料
我这边用的是<a href="@Url.Action( 的方法,刚接触web,不是特别明白这几种方法
@不要问我从哪里来123:
简单的说,GET就是你可以在浏览器地址栏看到的字符串,
POST就是提交,URL看不到的。
GET有长度限制,大概是512之类的。
@爱编程的大叔: 请问一下哈,那我用<a href="@Url.Action("","",)"></a>这种方法来将参数传给指定控制器,但是报了“Request URL Too Long”的异常,请问一下这种情况下是不是也需要改成Post方法哈
压缩解决不了问题,要么修改web服务器的设置,要么将数据放在post body中传输。
如果是IIS,需要修改以下2个注册表设置:
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxFieldLength /t REG_DWORD /d 32768 reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxRequestBytes /t REG_DWORD /d 32768
你这跟压不压没关系.就算压了结果任然有可能超过限制.
照你的说法,你的数据是在服务端生成的.那你只要传个数据库ID在在服务端再去取就是了