GET方式和POST方式_第1页
GET方式和POST方式_第2页
GET方式和POST方式_第3页
GET方式和POST方式_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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就会用此处指定的编码方式编码。一般大家都认为这段代码是为了让浏览器知道用什么字符集来对网页解释,所以网站都会把它放在 html 代码的最前端,尽量不出现乱码,其实它还有个作用就是指定 form 表单的 post 方法提交数据的 URL encode 编码方式 。从这里可以看出对于 get 方法来数,浏览器对数据的 URL encode 的编码方式是有浏览器设置来决定,(可以用 js 做统一指定),而 post 方法,开发人员可以指定。2 。服务器端( tomcat)是如何将数据获取到进行解码的。如果用tomcat默认缺省设置,也没做过滤器等编码设置,那么他也是用iso-8859-1解码的,但是 request.setCharacterEncoding(字符集 )

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论