日志
160815 : GET与POST
GET与POST
二者都是明文传输
HTTP请求格式:
request line //http请求行
headers //http请求消息报头
blank line //回车换行
[request-body] //http请求正文HTTP响应格式:
status line //http响应状态行
headers //http响应消息报头
blank line //回车换行
[response-body] //http响应正文
get
目标:从服务器获取资源,负责“增删改查”中的 查
请求数据置于URL之后,与URL之间用 ? 连接,多个参数之间使用 & 连接
数据位于HTTP的head中
如:
login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD
如果数据是英文字母/数字,原样发送,如果是空格,转换为+
如果是中文/其他字符,则直接把字符串用BASE64加密
得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
post
目标:向服务器提交资源,负责“增删改查”中的 增
数据位于HTTP的body中
因为都是明文传输,post也只是相对于get方式有一定意义上的安全提升,因为数据不会存留在url中
可以传输二进制数据
比较
比较项目 | GET | POST |
---|---|---|
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 |
书签 | 可收藏为书签 | 不可收藏为书签 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded or multipart/form-data。为二进制数据使用多重编码。 |
历史 | 参数保留在浏览器历史中。 | 参数不会保存在浏览器历史中。 |
对数据长度的限制 | 当发送数据时,GET 方法向 URL 添加数据;URL 的长度有些条件下是受限制的(取决于浏览器和服务器)。 | 无限制。 |
对数据类型的限制 | 只允许 ASCII 字符。 | 没有限制。也允许二进制数据。 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。 | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |
同步请求与异步请求
同步:提交请求->服务器处理(期间浏览器不能做任何事)->处理完毕返回
异步:请求通过事件触发->服务器处理(期间浏览器仍然可以做其他事情)->处理完毕