为无为,事无事,味无味。——老子html
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET
和 POST
。服务器
最直观的区别就是GET
把参数包含在URL
中,POST
经过request body
传递参数。POST
和GET
大体区别以下表所示:markdown
# | GET | POST |
---|---|---|
后退按钮/刷新 | 无害 | 数据会被从新提交(浏览器应该告知用户数据会被从新提交) |
书签 | 可收藏为书签 | 不可收藏为书签 |
缓存 | 能被缓存 | 不能缓存 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码 |
历史 | 参数保留在浏览器历史中 | 参数不会保存在浏览器历史中 |
对数据长度的限制 | 当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符) | 无限制 |
对数据类型的限制 | 只容许 ASCII 字符 | 没有限制。也容许二进制数据 |
安全性 | 与 POST 相比,GET 的安全性较差,由于所发送的数据是 URL 的一部分 在发送密码或其余敏感信息时毫不要使用 GET ! | POST 比 GET 更安全,由于参数不会被保存在浏览器历史或 web 服务器日志中 |
可见性 | 数据在 URL 中对全部人都是可见的 | 数据不会显示在 URL 中 |
其实GET
和POST
都是http协议中
的两种发送请求的方法。并发
get请求过程:app
post请求过程:tcp
GET
在浏览器回退时是无害的,而POST
会再次提交请求。GET
产生的URL地址能够被Bookmark
,而POST
不能够。GET
请求会被浏览器主动cache
,而POST
不会,除非手动设置。GET
请求只能进行url
编码,而POST
支持多种编码方式。GET
请求参数会被完整保留在浏览器历史记录里,而POST
中的参数不会被保留。GET
请求在URL
中传送的参数是有长度限制的,而POST
么有。GET
只接受ASCII
字符,而POST
没有限制。GET
比POST
更不安全,由于参数直接暴露在URL
上,因此不能用来传递敏感信息。GE
T参数经过URL
传递,POST
放在Request body
中。http
协议并未规定get
和post
的长度限制get
的最大长度限制是由于浏览器和web
服务器限制了URL
的长度GET
方式的请求,浏览器会把http header
和data
一并发送出去,服务器响应200
(返回数据);而对于POST,浏览器先发送header
,服务器响应100 continue
,浏览器再发送data
,服务器响应200 ok
(返回数据)