[整理]详记被忽略的Get与Post

[事发]
使用了近5年的项目,来了一个最最基本的bug
画面输入+号,跳转至后画面,+号变成了空格!
[原因]
画面使用url(get)方法传参数,并且没有进行url转码!
恐怖的是,几乎所有页面都是如此...
[解决办法]
1.建立假的form,使用post传参
2.对于弹窗页面,只能通过showModalDialog的参数vArguments,将参数传给中间跳板画面,再由跳板画面通过window.dialogArguments获取参数,制造假的form,再post给目标页面
[延伸]
由此对get与post做了一个较为深入的理解

【正题】

1.GET
通过url进行参数传递,显示于浏览器的地址栏中,可以让用户看清当前的页面层次[有时还还有日期,类别等含义],但是长度有限制,不可以超过某个长度[至于多长,似乎浏览器还各不相同,总之不能太长了]

[跳转流程](以java servlet为例)
js或按钮设定跳转页面路径url[需要代码内进行url编码],浏览器直接发送请求至服务器[浏览器不对url做任何处理],请求到servlet后,默认对url进行url解码操作。[其中还会有字符编码解码问题,浏览器会根据页面charset进行中文或其他语言文字的编码,服务器端也需要进行相应的字符解码]

2.POST
通过表单,将表单内各个空间的内容,通过submit方式,发送给url指定的服务器[对于文件等,需要设定表单为:enctype="multipart/form-data"]

[跳转流程](以java servlet为例)
js或按钮进行form的submit操作,浏览器发送请求至服务器[浏览器会自动对表单内内容进行url以及字符编码],请求到servlet后,默认对url进行url解码操作。
[与get不同在于,浏览器是否进行url编码操作]

3.Ajax
也有get和post两种请求类型

【get/post本质区别】
GET将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;POST是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。

【url编码解码的js函数】
escape,encodeURI,encodeURIComponent

escape不编码字符有69个:
*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:
!,#,$,&,‘,(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:
!, ‘,(,),*,-,.,_,~,0-9,a-z,A-Z

解码函数:
unescape,decodeURI,decodeURIComponent

【何时适用get/post】
http://blog.sina.com.cn/s/blog_78edbfd801012il4.html

1.GET能随在URL之后的请求参数长度是有限的,过长的请求参数,或像文件上传这类的大量数据,就不适合用GET请求,而应该改用POST。
2.GET的请求参数会出现在地址栏上,敏感性或保密性的请求参数(例如信用卡号码、用户名、密码等),就不应该使用GET请求来发送。

3.POST请求的请求参数不会出现在地址栏上,所以无法添加到浏览器的书签之中,如果有些页面是根据请求参数进行不同的页面显示(例如论坛的文章发表),而你应该希望可以让用户设置书签,以使日后可以直接点击书签进行浏览,则此时应该使用GET。

4.有些浏览器会根据地址栏缓存数据,如果地址栏是相同的URL,则会直接从浏览器缓存中取出数据,而不会真正发送请求而服务器上查询最新的数据,如果不希望服务器状态改变,而浏览器仍从缓存中取得旧数据,则可以改用POST(使用GET基本上也有方法避免缓存,例如在地址栏上附加时间戳记,让每次GET请求的地址栏都不相同)。

5.GET是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的
[其实post也不安全,代理服务器可以轻而易举的获取数据]

时间: 2024-10-13 22:29:58

[整理]详记被忽略的Get与Post的相关文章

CSS position属性整理详解

在css布局中position的使用非常广泛.在一些面试题目中也会常见到position的问题.所以在这篇博客里面整理一下position属性的使用,在以后的深入学习中还会在补充的. 1.position有哪些属性? static:所以元素的默认定位是position:static,这意味着元素没有被定位,元素出现在正常流中. relative:生成相对定位的元素,相对于其正常位置定位,还占有原来的位置,元素通过top,right,left,bottom属性进行规定. absolute:生成绝对

压缩文件及office密码破解软件 详记

今日因为公司的office文件被加密(而且是没意义的加密)问题而有心去找一款可以破解office加密的软件.  好吧.之前有更加大的事情我都没去寻找直接给了20块别人让别人给我破了.虽然还是某公司机密文件.唉.服了自己了. 先记一下官网: office破解的官网:http://www.passwordrecovery.cn/xiazai.html rar破解的官网:https://www.elcomsoft.com/archpr.html(不知道是不是) 先说一下rar的压缩破解软件, 忘记在哪

个人应用开发详记. (三)

好久没来更新了... IM即时通讯已进入最后阶段.  各个功能模块 框架基本写好. 剩下的就是细节上的优化了 由于内容上并没有什么大幅度的变动 . 就不上图了 .  元旦回家 放假3天~  争取年前搞定此APP

个人应用开发详记. (二)

好久没更新. 最近太忙了. 公司项目版本更新. 一大波需求和BUG.  咳咳, 扯远了. 来看看新界面吧~ 画面改了下. 总感觉哪里不对劲啊!!!  不过暂时先这样了  .  新增了发现 和消息模块.   这2个模块的内容 暂时还没想好该装点什么东西. 没有产品经理的烦恼. 又得码代码 又要想需求. 感觉头发都要白了. ╥﹏╥... 我的模块. 基本雏形出来了.   以后的改动 应该也不会太大. 吐槽下自己的画图能力..  下面4个小图标搞了我一个下午时间 (?_?) 编辑个人资料页面.  基本

HTML5干货整理详解canvas的学习方法及学习曲线(收藏保存)

还记得在过去的Web前端开发中,如果你需要绘图或者生成相关图形的话,使用Flash可能是你唯一或者说最强大的实现方式,而在近些年的技术热点HTML5标准中,(画布)能够更加方便的帮助你实现2D绘制图形图像及其各种动画效果功能. 首先我们先来了解一下什么是HTML Canvas? 我们可以在HTML中使用属性width和height来定义Canvas.但是实现Canvas的相关功能主要还依赖于Javascript实现,即HTML5 Canvas API.我们使用javascript来访问和控制Ca

常见定理整理——老夫记不住系列

最小的素数:2 0除余任何数都是 0 中位数: 原文地址:https://www.cnblogs.com/czc1999/p/10134807.html

ubuntu server安装之后的整理工作

又重装了ubuntu server,用的64的13.10.现在把安装过程中及安装完成后的整理工作记下来. 1.语言选择英文,键盘布局美国,时区香港或上海.不安装更新,选择安装软件有LAMP,JAVA,SAMBA. 2.设置网络,ifconfg 查看网络连接,设置自动启动并静态IP, //etc/network/interfaces /* 代码 auto 连接名(如:eth0.p4p1) iface 连接名 inet atatic(静态)---如自动,则为dhcp address 192.168.

Python忽略warning警告错误

从网上整理了一下Python忽略warning警告错误 方法一:直接运行脚本的时候加入参数 python -W ignore yourscript.py 方法二:代码中加入参数 import warnings with warnings.catch_warnings(): warnings.filterwarnings("ignore",category=DeprecationWarning) import pymssql #需忽略警告的模块 yourcode() 原文地址:http:

swift学习之元组

元组在oc中是没有的,在swift中是新加的,学oc数组概念时还在想既然可以存储相同类型的元素,那不同类型的元素有没有东西存储呢,答案很悲伤,oc没有元组这个概念,不过swift中添加了这个东西,也挺有意思的,下面就我个人说一下对元组的理解,如果有不对的,请指出,共同进步,谢谢 元组(touples)就是可以存储不同数据类型的一个集合,用()表示,举个栗子 let touples = ("xiaoyu",16,"math",98.5) println(touples