《GET方式和POST方式》由会员分享,可在线阅读,更多相关《GET方式和POST方式(5页珍藏版)》请在金锄头文库上搜索。
1、文档来源为 :从网络收集整理 .word 版本可编辑 .欢迎下载支持 .1、Get 是用来从服务器上获得数据,而 Post 是用来向服务器上传递数据。2、Get 将表单中数据的按照 variable=value的形式,添加到 action 所指向的 URL 后面,并且两者使用 “?”连接,而各个变量之间使用 “&”连接; Post 是将表单中的数据放在 form 的数据体中,按照变量和值相对应的方式,传递到action所指向 URL 。3 、Get 是不安全的,因为在传输过程,数据被放在请求的URL 中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求 URL 记录到日志文件中,然后放
2、在某个地方, 这样就可能会有一些隐私的信息被第三方看到。 另外,用户也可以在浏览器上直接看到提交的数据, 一些系统内部消息将会一同显示在用户面前。 Post 的所有操作对用户来说都是不可见的。4 、Get 传输的数据量小,这主要是因为受URL 长度限制;而 Post 可以传输大量的数据,所以在上传文件只能使用Post (当然还有一个原因,将在后面的提到)。5 、Get 限制 Form表单的数据集的值必须为ASCII字符;而 Post 支持整个ISO10646字符集。默认是用ISO-8859-1编码6 、Get 是 Form 的默认方法。以下的比较非常非常使用:做 java 的 web 开发有段
3、日子了,有个问题老是困扰着我,就是乱码问题,基本上是网上查找解决方案(网上资料真的很多) ,都是一大堆的介绍如何解决此类的乱码问题,但是没几个把问题的来龙去脉说清楚的,有时候看了些文章后,以为自己懂了, 但是在开发中乱码问题又像鬼魂一样出来吓人, 真是头大了! 这篇文章是我长时间和乱码做斗争的一些理解的积累, 还希望有更多的朋友给出指点和补充。form有 2 中方法把数据提交给服务器,get 和 post, 分别说下吧。(一) get 提交1. 首先说下客户端(浏览器)的 form 表单用 get 方法是如何将数据编码后提交给服务器端的吧。对于 get 方法来说,都是把数据串联在请求的url
4、后面作为参数,如:(很常见的一个乱码问题就要出现了, 如果 url 中出现中文或其它特殊字符的话,如: /servlet?msg= 杭州,服务器端容易得到乱码) ,url 拼接完成后,浏览器会对 url 进行 URL encode ,然后发送给服务器, URL encode 的过程就是把部分 url 做为字符,按照某种编码方式(如: utf-8,gbk 等)编码成二进制的字节码,然后每个字节用一个包含 3 个字符的字符串 %xy 表示,其中 xy 为该字节的两位十六进制表示形式。 我这里说的可能不清楚, 具体介绍可以看下 URL encode 的过程,我们能看到 2 个很重要的问题,第一:需要
5、 URL encode 的字符一般都是非 ASCII 的字符(笼统的讲),再通俗的讲就是除了英文字母以外的文字(如:中文,日文等)都要进行 URL encode ,所以对于我们来说,都1文档来源为 :从网络收集整理 .word 版本可编辑 .欢迎下载支持 .是英文字母的 url 不会出现服务器得到乱码问题,出现乱码都是url 里面带了中文或特殊字符造成的;第二: URL encode到底按照那种编码方式对字符编码?这里就是浏览器的事情了,而且不同的浏览器有不同的做法,中文版的浏览器一般会默认的使用 GBK ,通过设置浏览器也可以使用 UTF-8 ,可能不同的用户就有不同的浏览器设置,也就造成不
6、同的编码方式,所以很多网站的做法都是先把 url 里面的中文或特殊字符用 javascript做 URLencode ,然后再拼接 url提交数据,也就是替浏览器做了URL encode ,好处就是网站可以统一 get方法提交数据的编码方式。 完成了 URL encode ,那么现在的 url 就成了 ASCII 范围内的字符了,然后以 iso-8859-1 的编码方式转换成二进制随着请求头一起发送出去。这里想多说几句的是,对于 get 方法来说,没有请求实体,含有数据的 url 都在请求头里面,之所以用 URL encode ,我个人觉的原因是:对于请求头来说最终都是要用iso-8859-1
7、编码方式编码成二进制的101010.的纯数据在互联网上传送,如果直接将含有中文等特殊字符做iso-8859-1编码会丢失信息,所以先做URL encode是有必要的。2 。服务器端( tomcat )是如何将数据获取到进行解码的。第一步是先把数据用 iso-8859-1进行解码,对于 get方法来说, tomcat获取数据的是 ASCII 范围内的请求头字符,其中的请求 url里面带有参数数据,如果参数中有中文等特殊字符, 那么目前还是 URL encode后的 %XY 状态,先停下,我们先说下开发人员一般获取数据的过程。通常大家都是request.getParameter(name)获取参数
8、数据,我们在 request 对象或得的数据都是经过解码过的, 而解码过程中程序里是无法指定, 这里要说下, 有很多新手说用 request.setCharacterEncoding(字符集 ) 可以指定解码方式,其实是不可以的 ,看 servlet 的官方 API 说明有对此方法的解释: Overridesthe name of the character encoding used in the body of this request.This method must be called prior to reading request parameters orreading inpu
9、t using getReader().可以看出对于 get 方法他是无能为力的。那么到底用什么编码方式解码数据的呢, 这是 tomcat 的事情了,默认缺省用的是 iso-8859-1, 这样我们就能找到为什么get 请求带中文参数为什么在服务器端得到乱码了,原因是在客户端一般都是用UTF-8 或 GBK 对数据 URL encode,这里用 iso-8859-1 方式 URL decoder显然不行,在程序里我们可以直接Java 代码1.newString(request.getParameter(name).getBytes(iso-8859-1),客 户端指定的 URL encode
10、编码方式 )还原回字节码, 然后用正确的方式解码数据, 网上的文章通常是在 tomcat 里面做个配置Xml 代码1. 这样是让 tomcat 在获取数据后用指定的方式 URL decoder ,URL decoder 的介绍在这里(一) post 提交1. 客户端(浏览器)的 form 表单用 post 方法是如何将数据编码后提交给服务器端的。在 post 方法里所要传送的数据也要 URL encode ,那么他是用什么编码方式的呢?在 form所 在 的 html文 件 里 如 果 有 段 ,那么 post就会用此处指定的编码方式编码。一般大家都认为这段代码是为了让浏览器知道用什么字符集来
11、对网页解释,所以网站都会把它放在 html 代码的最前端,尽量不出现乱码,其实它还有个作用就是指定 form 表单的 post 方法提交数据的 URL encode 编码方式 。从这里可以看出对于 get 方法来数,浏览器对数据的 URL encode 的编码方式是有浏览器设置来决定,(可以用 js 做统一指定),而 post 方法,开发人员可以指定。2 。服务器端( tomcat)是如何将数据获取到进行解码的。如果用tomcat默认缺省设置,也没做过滤器等编码设置,那么他也是用iso-8859-1解码的,但是 request.setCharacterEncoding(字符集 ) 可以派上用场。我发现上面说的 tomcat 所做的事情前提都是在请求头里没有指定编码方式,如果请求头里指定了编码方式将按照这种方式编码。有 2 篇文章推荐下,地址分别是深入浅出 URL 编码:;表单用 post 方法提交数据时乱码问题:用post很 重 要 的 在form所 在 的html文 件 里 如 果 有 段 强烈建议使用post提交3