浅析HTTP中请求GET/POST - 知乎 (zhihu.com)
什么是GET
GET:从服务器请求数据后获取服务端数据
常见发起get请求的方式:
- URL、src/href、表单(form)
格式:
index.php?userName=jack&password=123
语法(key=value&key=value): userName=jack&password=123 叫做查询字符串
特点:
参数名与参数值之间没有空格
参数值不需要单双引号包括
具体情况使用GET方法:
- 1.客户端和服务端的交互像是一个提问(如查询操作、搜索操作、读操作)
- 2.请求是为了查找资源,HTML表单数据仅用来帮助搜索
- 3.请求结果无持续性的副作用(如不会进行搜索,属于一次性的)
- 4.收集的数据及HTML表单内的输入字符按名称的总长不超过1024个字符
- 5.获取参数或者短小的内容时用GET
GET提交数据特点:
- 1.get方式在url后拼接参数,只能以文本的形式传递参数
- 2.传递的数据量小,不同浏览器有差异
- 3.安全性低,还会将信息显示在地址栏
- 4.速度快,通常用于对安全性不高的请求
什么是POST
POST:发送、提交。向服务器发送/提交要处理的数据。
格式:
POST /test/demo_form.asp HTTP/1.1
Host: http://w3schools.com
name1=value1&name2=value2
具体的情况使用POST方法:
- 1.交互是一个命令或订单(order),比提问包含更多信息
- 2.用户改变了服务器端的资源并被用户察觉,例如订阅某项服务
- 3.用户需要对交互产生的结果负责
- 4.请求的结果有持续的副作用。例如:数据库内添加新的数据行
- 5.GET方法可能会产生很长的URL,或许会超过某些浏览器与服务器对URL长度的限制,所以使用POST更佳
- 6.获取大段的内容用POST,通常表单用POST方式提交数据,表单的method必须设置为POST
- 7.对数据有变更的请求(增删)用post(比如发帖,回复的form用的时POST)
二者区别
GET在浏览器回退时是无害的,而POST会再次提交请求
GET产生的URL地址可以被Bookmark(收藏),而POST不可以
GET请求会被浏览器主动cache,而POST不会,除非主动设置
GET请求只能进行url编码,而POST支持多种编码方式
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
GET请求在URL中传送的参数是有长度限制的(浏览器),而POST没有
对于参数的数据类型,GET只接受ASCII字符,而POST没有限制
GET参数通过URL传递,POST放在Request body中
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息