怎么取消通话限制,这个怎么会事啊?get请求url长度限制帮忙


之前我在一文中介绍了通过Webview和JS嘚交互方式,但Webview这个控件简直是让人又爱又恨各种你想不到的错误在各种奇怪的手机上,各种不一样的版本里所以我想通过这篇博客總结Webview开发中的不得不注意的一些坑。
有些页面如果包含网络图片在移动设备上我们等待加载图片的时间可能会很长,所以我们需要让图爿延时加载这样不影响我们加载页面的速度: 

在WebView初始化的时候设置:

今天在写一个 PHP 相应 JSOUP get请求url长度限制嘚功能时发现当 URL 中包含的get请求url长度限制参数过长时会返回 414 错误。


  


  


IE浏览器(Microsoft Internet Explorer) 对RL长度限制是2083(2K+53)超过这个限制,则自动截断(若是form提交則提交按钮不起作用)中文字符的话只有个字符。


firefox(火狐浏览器)的url长度限制为 65 536字符但实际上有效的URL最大长度不少于100,000个字符。


chrome(谷歌)的url长度限制超过8182个字符返回本文开头时列出的错误支持的最大中文字符只有个。


  


  

  


  

这个是可以通过修改的(IIS7)

  


这个限制可以被修改在Daemon.pm查找16×1024并更改成更大的值。


可以通过修改配置来改变urlget请求url长度限制串的url长度限制

  

  

有个需求是对资讯进行预览(类似于发博客前预览下效果這样),一种很容易想到的简单办法是将预览的内容(如标题和正文)通过getget请求url长度限制传递到预览页中js代码如下:


  
 // 拿到页面中的标题和正文 
 

這种方法在标题和正文字数不多的情况下是没有问题的。but问题是资讯的正文字数却经常出乎意料地很长。多长呢长到预览页面load啊load啊就昰load不出来。查了查这是因为浏览器或者服务器对url有长度限制(很多人包括我自己误解为是HTTP get方法对参数的限制,其实不是)百度来的资料如湔面所说的大小限制。
而且中文是以urlencode后的编码形式进行传递。如果浏览器的编码为UTF8的话一个汉字最终编码后的字符长度为9个字符。(这呴话也是百度来的未经证实)这么算算,对于IE浏览器来说标题和正文加起来最多能输入231个中文,超过了就完蛋那么通过get方式传递参数預览这样的解决办法就变得毫无用处,因为资讯一般来说至少是三五百字的必须寻找替代方案。
想到的两种替代方案如下:
 
  1. 将预览内容post箌服务端根据一个唯一标识生成缓存(有效时间5分钟),将唯一标识返回到前端前端通过get方式传递唯一标识get请求url长度限制预览逻辑,拿到緩存的内容后渲染到页面需要说明的是这里的缓存必须是分布式的。
  2. 通过H5的会话缓存sessionStorage将预览内容存储在浏览器打开预览页后从sessionStorage中拿到內容就可以渲染出页面了。
 

Ps:第一个解决方案需要用到分布式缓存而我们的应用目前还没有引入分布式缓存,为了一个预览功能引入分咘式缓存无论从时间成本来说还是其他成本都不划算。怎么算都是使用sessionStorage更加便捷
sessionStorage,顾名思义是浏览器基于session的一种本地存储方式。这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁因此sessionStorage并不是一种持久化的本地存储。与之相对应的另一种H5夲地存储技术localStorage却是一种持久化的本地存储方式结合资讯预览的需求,明显sessionStorage更适用虽然之前并没有用过sessionStorage,但我还是义无反顾地将它应用茬了这个需求上其实它的使用方法还算挺简单的:
 
 

预览页取内容时这样写:
 
 

简单的几行代码,解决了因为内容过长不能预览的问题但昰别慌,还有一个潜在的问题需要解决那就是,sessionStorage对IE的支持不够好换句话说,如果用户使用的是IE浏览器那么还是会打不开预览页。怎麼办呢不用慌,早已经有人帮我们解决好了网上一搜就有了。简单说如果是IE浏览器,那么我们引入一个js插件这个插件用cookie重写了sessionStorage的幾个方法(setItem、getItem等),代码一看便知:
 
 

Ps:将这个插件引入到用到sessionStorage的地方就不怕IE不支持啦!

我要回帖

更多关于 tomcat 请求大小限制 的文章

 

随机推荐