我们在写html的表单的时候,通常开始第一句为:
<form action="/a" method="post"></form>
其中form标签的属性method有两种选择,一种是get,一种是post;
method
属性method是告诉浏览器使用哪种方式发送表单数据(表单数据提交到到 action 属性所规定的页面),默认值为get,推荐使用post
二者区别
原理不同
GET只允许 ASCII 字符,如果含有非ASCII字符,;POST没有限制,也允许二进制数据;
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。
POST把提交的数据则放置在是HTTP包的包体中。
表象不通
GET提交的数据可以在浏览器的URL直接看到,POST则不会这样
数据量
虽然HTTP对于URL的长度没有限制,但是GET因为浏览器限制,最多提交1k的数据;POST理论上没有限制,但是实际上要受到服务器的限制
安全性
- GET的安全性比POST要差一些,因为GET提交的数据会在浏览器URL中直接看到,这样会容易导致信息泄露,而POST请求则不会;并且GET提交可以被浏览器缓存,POST缓存大多数浏览器都不支持,所以GET的数据可以在浏览器历史记录中查到;
- 还有一种网上说的安全是指的是在规范的定义下,GET操作不会修改服务器的数据
场景不同
GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。