客户端提交数据到服务器端有两种方式GET和POST,get是将数据拼接到url上,而post是将数据封装在request body中,发送过去。顾名思义,get即请求数据,有时需要其附带部分参数;post即发送数据,所以需要携带数据。

一、GET方式

  get请求是安全和幂等的。

  1、安全性:get操作不会修改服务器的数据,无论多少次get请求,服务器的数据都不会改变。

  2、幂等性:幂等是说,同一个请求原封不动的发送N次和M次,服务器上资源的状态最终都是一致的,相应的服务器返回的内容也是一致的。

  get请求发送数据量较小。

  1、http协议中的get/post并没有发送数据大小的限制,对发送数据大小产生限制的是浏览器以及操作系统、服务器,http本身没有对url长度有所限制

  url长了,服务器处理也是一种负担。原本一个会话就没有多少数据,如果恶意构造几个几M大小的URL,并不停的访问你的服务器,服务器的并发数就会下降。

  get能被缓存,post不能被缓存

  打开一个页面,如果之前被打开,那么很明显这次打开速度会加快,这是因为html/js/css/img等文件都能被浏览器缓存,而这些文件的获取,都是用的get请求。 post请求目前为止我只在ajax和form表单中见过。

二、POST 方式

  post请求是安全的

  get是将数据拼接到url上,而post是将数据封装在request body中。get的请求附加的参数有可能被人在浏览器地址栏上直接看到,或者查看浏览器的历史记录或者日志,就能看到参数。而post因为不能被缓存,也不能被保存为书签,所以请求过了就没有记录了? 请求参数就不能被截获了?非也,抓个包就可以看到了。

所以,post请求只是相对的安全的。

三、GET请求乱码

  (1)get请求中数据是直接在url上进行拼接,使用&分隔key-value对.但有时key,value会出现中文等对于html标准来说不安全的字符
  (2)html标准说,除了字符”a”-”z”,”A”-”Z”,”0″-”9″,”.”,”-”,”*”,和”_” 其他的字符都是不安全的,需要进行编码.其中” “空格会被编码成+号。当出现不安全字符时,在发送到服务器之前,浏览器会将这些参数值进行编码。

  (3)一般推荐是使用utf-8编码格式。也可以使用JavaScript对数据进行encodeURIComponent(url);

  引起乱码的原因

  现在的url就成了ASCII范围内的字符了,然后以iso-8859-1的编码方式转换成二进制随着请求头一起发送出去,对于get方法来说,没有请求实体,含有数据的url都在请求头里面。请注意,其实这里进行了两次编码,第一次是使用UTF8,第二次使用iso-8859-1编码成能在网络上传输二进制101010….。  现在问题来到了服务器端,每种服务器默认的编码方式都可能不同,比如tomcat默认编码就是iso-8859-1。按道理服务器端也会做两次的解码动作,第一次是对二进制内容的iso-8859-1的解码,第二次是使用服务器默认的编码对数据进行解码,因此我们使用request.getParameter(“name”)得到的数据是经过两次解码的.
  当tomcat使用iso-8859-1对数据进行第二次解码时,因为对应客户端编码是utf8,因此我们使用request.getParameter(“name”)就肯定乱码.如果我们不去改变tomcat的默认编码,可以使用new String(request.getParameter(“name”).getBytes(“iso-8859-1″), “utf-8″);手工重新解码.
request.setCharacterEncoding(“utf-8″)这种方式对于get方式提交数据是无效的,但是对post方式提交数据却是有效的.因为get没有request body.

  解决方案

  1.通常的做法还是修改tomcat的默认编码:在server.xml中的connector加上URIEncoding=”UTF-8″即可

  2.post方式
  post方式提交的数据也是必须进行编码的.如果form所在html文件指定了编码,就使用那个编码进行url编码.

  为了防止出现乱码,一般系统相关的文件都设成utf8格式,web服务器,Java服务器,数据库的编码格式都设为utf8.这样一般比较少出现乱码问题.
还有就是尽量使用post方式提交数据,一个是因为url的长度是有限制的,而get方式是将数据拼接到url上的.

WEB中的GET和POST的更多相关文章

  1. 优化Web中的性能

    优化Web中的性能 简介 web的优化就是一场阻止http请求最终访问到数据库的战争. 优化的方式就是加缓存,在各个节点加缓存. web请求的流程及节点 熟悉流程及节点,才能定位性能的问题.而且优化的 ...

  2. 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常

    毕竟人不是神,谁写的程序都会有bug,有了bug不可怕,可怕的是出错了,你却不知道错误在哪里.所以我们需要将应用程序中抛出的所有异常都记录起来,不然出了错,找问题就能要了你的命.下面我们主要讨论的是如 ...

  3. 命名空间“System.Web”中不存在类型或命名空间名称“Optimization”(是否缺少程序集引用?)

    今天,在.net4.5,mvc4下新建了个区域,运行起来就报这个错误: 命名空间"System.Web"中不存在类型或命名空间名称"Optimization"( ...

  4. 在web中使用windows控件,实现摄像头功能

    最近做的一个Web版的视频会议项目,需要在网页中播放来自远程摄像头采集的实时视频,我们已经有了播放远程实时视频的使用C#编写的windows控件,如何将其嵌入到网页中去了?这需要使用一种古老的技术,A ...

  5. 在Web中使用Windows控件

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+] 将Net控件转化为ActiveX控件 1GUID 2实现IObjectSafety接口 3程序集设定 制作安装程序 Web集 ...

  6. RDIFramework.NET ━ Web中打印的各种方案参考-欢迎补充

    RDIFramework.NET ━ Web中打印的各种方案参考-欢迎补充 做Web开发的同志应该都深有体会,在web程序中打印不再象应用程序中那样便于控制了,web程序天生的一些特性造成了这个缺点, ...

  7. HTML5 UI框架Kendo UI Web中如何创建自定义组件(二)

    在前面的文章<HTML5 UI框架Kendo UI Web自定义组件(一)>中,对在Kendo UI Web中如何创建自定义组件作出了一些基础讲解,下面将继续前面的内容. 使用一个数据源 ...

  8. HT for Web中3D流动效果的实现与应用

    流动效果在3D领域有着广泛的应用场景,如上图中医学领域可通过3D的流动直观的观察人体血液的流动,燃气领域可用于监控管道内流动的液体或气体的流向.流速和温度等指标. 如今企业数据中心机房普遍面临着设备散 ...

  9. Web中的图标

    随着时代的变迁与技术的不断的更新,在当今这个时代,Web中的图标(Icons)不再仅仅是局限于<img>.除了<img>直接调用Icons文件之外,还有Sprites(俗称雪碧 ...

  10. HTML5 Web app开发工具Kendo UI Web中Grid网格控件的使用

    Kendo UI Web中的Grid控件不仅可以显示数据,并对数据提供了丰富的支持,包括分页.排序.分组.选择等,同时还有着大量的配置选项.使用Kendo DataSource组件,可以绑定到本地的J ...

随机推荐

  1. Oracle去掉字符串首尾

    今天刚注册博客,与大家分享一下今天的新的: 今天在报表中碰到这样一个需求,数据库里面的一个字段是其他的3个字段合成的,但是现在读取数据只要中间的那一部分, 思考了许久这个字段的中间部分不是固定的,头和 ...

  2. linux命令之chmod 2011.11.24转载于网络

    使用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 说明 : Linux/Unix 的档案调用权限分为三级 : 档案 ...

  3. Happy New Year

    今年的元旦能明显感觉到节日的狂欢.一方面,论文的事情,压抑了好久,另一方面,把自己融入节日之中.所以才有了节日的深度参与. 早上还是按时的起床,看了朋友圈,内心却能专注于平静.因为见到了优秀的人,才发 ...

  4. NOIP模拟赛-护花

    [题目描述] 约翰留下他的N(N<=100000)只奶牛上山采木.他离开的时候,她们像往常一样悠闲地在草场里吃草.可是,当他回来的时候,他看到了一幕惨剧:牛们正躲在他的花园里,啃食着他心爱的美丽 ...

  5. HTML解析原理

    Web页面运行在各种各样的浏览器当中,浏览器载入.渲染页面的速度直接影响着用户体验 简单地说,页面渲染就是浏览器将html代码根据CSS定义的规则显示在浏览器窗口中的这个过程.先来大致了解一下浏览器都 ...

  6. js+html5 +devexpress属性总结

    //获取某行某列的值 onSelectionChanged: function (selectedItems) { var data = selectedItems.selectedRowsData[ ...

  7. Value must be an existing directory配置tomcat问题

    今天tomcat配置遇到了这么个问题,表示tomcat下少什么文件夹,一般是你的安装目录tomcat文件夹下面少了一个temp文件夹,在tomcat的安装文件夹下建一个temp文件夹再加一次tomca ...

  8. java8之接口增强

    Java8是由oracle公司于2014年3月正式发布,它是继java5 以来最重要的发布版本.Java8包含了很多新的特性,可以简化开发,提升代码的可读性. Java8的一些重要新特性包括: l 接 ...

  9. java性能调优工具

    windows调优工具: 任务管理器(ctrl+alt+delete或).资源管理器(任务管理器->性能进入或运行resmon.exe):JVM分析工具Jconsole,jProfile,Vis ...

  10. hashMap的get()方法,错用并发造成cpu和负载高

    一次线上问题的解决 线上发现服务cpu使用达到98%,负载高达200多,64核心cpu,下面介绍解决过程: 1.top命令查出占用cpu高的进程pid 2.使用jstack -l pid >du ...