1. 什么是HTTP?
- 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议。
- HTTP在客户端和服务器之间以request-response protocol(请求-回复协议)工作。
2. 最基本的HTTP的请求方法有以下几种:
方法 | 描述 |
---|---|
GET | 从服务器获取数据 |
HEAD | 与GET类似,但服务器只返回HTTP头部信息,没有页面内容 |
POST | 向服务器提交数据 |
PUT | 上传指定URL的描述 |
DELETE | 删除指定资源 |
3. GET和POST的特点
URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的 查,改,增,删 4个操作。
即,GET一般用于 获取/查询 资源信息,而POST一般用于 更新 资源信息。
3.1 根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的
幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。
在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。
(1) 所谓 安全的意味着该操作用于获取信息而非修改信息。
换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
* 注意:这里安全的含义仅仅是指是非修改信息
(2) 幂等 的意味着对同一URL的多个请求应该返回同样的结果。
GET请求的数据会附在URL之后(就是把数据放置在 HTTP协议头 中),以 ? 分割URL和传输数据,参数之间以 & 相连,如:
login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD
如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
特点:
- GET请求能够被缓存
- GET请求会保存在浏览器的浏览记录中
- 以GET请求的URL能够保存为浏览器书签
- GET请求有长度限制(来自浏览器的限制)
- GET请求主要用以获取数据
3.2 根据HTTP规范,POST表示可能修改变服务器上的资源的请求
POST把提交的数据放置在是 HTTP包的包体 中。
使用POST方法时,查询字符串在POST信息中 单独存在,和HTTP请求一起发送到服务器:
POST /test/demo_form.jsp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
特点:
- POST请求不能被缓存下来
- POST请求不会保存在浏览器浏览记录中
- 以POST请求的URL无法保存为浏览器书签
- POST请求没有长度限制
- POST请求主要用以修改数据
4. GET与POST的主要区别
对比 | GET | POST |
---|---|---|
点击返回/刷新按钮 | 没有影响 | 数据会 重新发送(浏览器将会提示用户“数据被从新提交”) |
添加书签 | 可以 | 不可以 |
缓存 | 可以 | 不可以 |
历史记录 | 有 | 没有 |
长度限制 | 有 | 没有 |
数据类型限制 | 只允许ASCII字符类型 | 没有限制。允许二进制数据 |
安全性 | 查询字符串会显示在地址栏的URL中,不安全,请不要使用GET请求提交敏感数据 | 因为数据不会显示在地址栏中,也不会缓存下来或保存在浏览记录中,所以看POST求情比GET请求安全,但也不是最安全的方式。如需要传送敏感数据,请使用加密方式传输 |
可见性 | 查询字符串显示在地址栏的URL中,可见 | 查询字符串不会显示在地址栏中,不可见 |
5. 总结
Get是向服务器发 索取 数据的一种请求,而Post是向服务器 提交 数据的一种请求。
[Edited on 2015年5月8日]