ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Get和Post请求详解

Get和Post请求详解

原创 Linux操作系统 作者:壹頁書 时间:2013-11-06 21:45:43 0 删除 编辑
1.请求长度
        RFC对于Get和Post请求并没有长度的限制。
        但是浏览器有限制,比如IE浏览器Get请求不能超过2083个字符,而火狐浏览器不能超过65536个字符。浏览器对于Post请求则没有限制。

        服务器对Get和Post请求可以进行限制,以Tomcat为例,Connector中的maxHttpHeaderSize限制了Get请求的长度,而maxPostSize则可以限制Post请求的长度。由此可见两种请求的区别,get请求在Http Header部分,而Post请求在Http Body部分。

2.编码
        Spring的CharacterEncodingFilter和request的setCharacterEncoding仅仅针对Http Body,这两种方式对于Get请求不起作用
        以Tomcat为例,可以调整URIEncoding参数或者启用useBodyEncodingForURI来调整Get请求的编码。URIEncoding默认是ISO-8859-1编码。
        当然,这种方式不具通用性,需要修改中间件的配置。
        还有一种方法,在前台页面通过JS对中文进行两次编码。
        以如下前台页面为例,将两次编码的中文数据提交到后台Servlet。







Click



Servlet解码一次,即可得到中文数据。

String name = URLDecoder.decode(request.getParameter("name"),"utf-8");

以"中文请求"为例
前台JS第一次编码的结果:%E4%B8%AD%E6%96%87%E8%AF%B7%E6%B1%82
前台JS第二次编码的结果:%25E4%25B8%25AD%25E6%2596%2587%25E8%25AF%25B7%25E6%25B1%2582
        在第一次编码之后,数据已经都是ASCII字符,所以二次编码就是将第一次编码中的"%"进一步编码为"%25"
        请求到达Tomcat之后,Tomcat会根据URIEncoding自动解码(默认为ISO-8859-1),所以在进入Servlet的doGet方法之前,数据已经还原为
        “%E4%B8%AD%E6%96%87%E8%AF%B7%E6%B1%82”
        故最后使用String name = URLDecoder.decode(request.getParameter("name"),"utf-8");就可以得出正确的数据。
        这种方式的好处是不用修改中间件的配置。缺点是两次编码会导致URL膨胀。

3.缓存内容
        浏览器会缓存get请求的结果直至过期,这也是JSONP技术需要使用随机数的原因。



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29254281/viewspace-775925/,如需转载,请注明出处,否则将追究法律责任。

上一篇: Oracle函数索引
请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    621
  • 访问量
    5986254