[整理]详记被忽略的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也不安全,代理服务器可以轻而易举的获取数据]
[整理]详记被忽略的Get与Post的更多相关文章
- h5整理--详解css的相对定位和绝对定位
浏览器默认状态下position的属性默认值是static也就是没有定位,元素出现在正常的文档流中,这个时候给元素设置的left,right.bottom.top这些偏移属性是没有效果的,不会生效: ...
- 详解 git 忽略文件 删除远端仓库的文件
要解决的问题 忽略指定类型的文件 或 某个指定文件(夹) 将已经push到github的文件删除, 但本地的文件不删除 (写忽略规则之前就把这个文件夹push了 T_T ) 将想要忽略掉的文件的相关记 ...
- thinkphp6.0.x 反序列化详记(一)
前言 这几天算是进阶到框架类漏洞的学习了,首当其冲想到是thinkphp,先拿thinkphp6.0.x来学习一下,体验一下寻找pop链的快乐. 在此感谢楷师傅的帮忙~ 环境配置 用composer指 ...
- JAVA IDE IntelliJ IDEA 快捷键使用详记
一.高效定位代码 1.项目之间的跳转 Ctrl + Alt + [ :切换到下一个项目窗口 Ctrl + Alt + ] : 切换到上一个项目窗口 2.文件之间的跳转↑↓←→ Ctrl + E ...
- 【详记MySql问题大全集】四、设置MySql大小写敏感(踩坑血泪史)
系列目录 一.安装MySql 二.安装并破解Navicat 三.没有my.in配置文件怎么办 四.设置MySql的大小写敏感 五.重置MySql登陆密码 这一篇可以说是我的踩坑的血泪史了... MyS ...
- 【详记MySql问题大全集】三、安装之后没有my.ini配置文件怎么办
系列目录 一.安装MySql 二.安装并破解Navicat 三.没有my.in配置文件怎么办 四.设置MySql的大小写敏感 五.重置MySql登陆密码 之前说过,Windows操作系统中,我们安装M ...
- 【详记MySql问题大全集】二、安装并破解Navicat
Navicat for MySql 11.1.13 企业版 下载地址: 链接:https://pan.baidu.com/s/1N3ZQXNyx-W8D4AsuZdsMug 密码:x0rd 第二个是N ...
- 【详记MySql问题大全集】一、安装MySql
最近公司要从SqlServer转到MySql,期间在安装环境和数据迁移的过程中,遇到了一些不大不小问题,比如怎么重置密码.怎么设置大小写敏感等等. 这些问题都比较细比较杂,这边解决完可能过几天就忘了, ...
- thinkphp6.0.x 反序列化详记(二)
前言 接上文找第二条POP链. 环境配置 同上文 POP链构造 寻找__destruct方法 仍然是寻找__destruct,这次关注AbstractCache.php(/vendor/league/ ...
随机推荐
- javase基础复习攻略《三》
编程语言的发展: 机器语言——直接由计算机的指令组成,指令.地址.数据都是以"0"和"1"的符号串组成,可以被计算机直接执行. 汇编语言——用容易理解和记忆的符 ...
- JAVA--网络编程(UDP)
上午给大家简单介绍了一下TCP网络通信的知识,现在就为大家补充完整网络编程的知识,关于UDP的通信知识. UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可 ...
- Linux:文件权限
Linux:文件权限 1.文件权限 ☆文件所有者 ☆用户组 ☆其他人 ☆ROOT 说明: Linux系统中默认所有系统上的账号与一般身份用户,还有那个root的相关信息记录在/etc/passwd文件 ...
- Android自定义EditText去除边框并添加下划线
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- web接口测试之GET与POST请求
关于HTTP协议,我考虑了一下觉得没必要再花一节内容来介绍,因为网上关于HTTP协议的介绍非常详细.本着以尽量避免介绍一空洞了概念与理论来介绍接口测试,我这里仍然会给出具体实例. 在此之前先简单的介绍 ...
- node.js + mongodb 做项目的详解(一)
想写博客很长时间了,因为一直身患懒癌,所以一直拖到了现在.markdown的语法也是刚刚学,试验一下效果好了不说了,直接上干货了.----------------------------------- ...
- Java 类库和常用类库
Java 类库概念: Java 的应用程序接口 (API) 以包的形式来组织,每个包提供了大量的相关类.接口和异常处理类,这些包的集合就是 Java 的类库 包名以 Java 开始的包是 Java 核 ...
- apache解析多个域名
之前搭建了一个网站在这台服务器上,今天心血来潮准备搭建个word press 博客,准备使用二级域名 blog.xdlxb.cn 来解析. 只需要设置httpd.conf 文件就可以了 如下 开启重定 ...
- 转自coolshell--vim的基本操作
开始前导语: 在正式转入python开发后,日常的工作中会和大量linux相关命令和工具接触,从另外一个层面,学习的东西相当的多,而VIM在整个的linux体系中所占据的角色就更不用说了,之前在处理g ...
- 【原创】Kakfa api包源代码分析
既然包名是api,说明里面肯定都是一些常用的Kafka API了. 一.ApiUtils.scala 顾名思义,就是一些常见的api辅助类,定义的方法包括: 1. readShortString: 从 ...