- 从缓存角度来说:GET请求的东西会被浏览器缓存,POST不会,例如:
- 从编码角度:GET进行URL编码,只能接收ASCII字符,而POST没有限制
- 从参数角度:GET参数一般放在URL上,POST放在body里
- 从幂等角度来说,GET是幂等的,POST不是
什么是幂等请求?
幂等请求(Idempotent Request)是指在一个计算或者请求操作中,不论进行多少次重复执行,其结果都是一致的,对系统产生的影响也相同。换句话说,执行一次请求和多次执行该请求的效果是等价的,不会因为重复操作而导致额外的变化或副作用。这对于需要确保操作安全或在网络不稳定情况下重试请求的场景尤为重要。
在HTTP方法中,GET、HEAD、PUT、DELETE和OPTIONS等方法被设计为幂等的,而POST方法通常不是幂等的,但这也取决于实际的实现情况:
- GET:请求获取资源,多次请求同一个URL应该总是返回相同的数据,不改变服务器状态。
- HEAD:类似于GET,但只返回响应头信息,同样幂等且不改变服务器状态。
- PUT:用于替换一个资源,如果请求多次,每次都用相同的数据替换,服务器状态保持不变。
- DELETE:用于删除资源,成功执行一次后,再次执行应该不会改变结果,因为资源已经被删除。
- POST:用于创建资源,通常不是幂等的,因为每次请求可能会创建不同的资源或有不同的副作用,但某些场景下也可以设计成幂等,比如总是创建相同的结果或基于条件创建。
幂等性的保证对于提升系统的可靠性和用户体验至关重要,特别是在分布式系统和网络应用程序中,它有助于处理请求重试、缓存和一致性问题。
注意点:在面试的过程中,面试官问你get和post的区别时尽量不要提及安全性之分,因为get和post并未安全之分,我们只是看到get请求可以在浏览器的地址栏中看到就以为get请求不安全,实则不是这样:
GET请求可以被浏览器缓存,可能会保存在浏览历史中,也可能被收藏为书签。这意味着敏感数据可能无意中被保存或泄露;而POST请求可以F12在浏览器窗口的网络中看到请求参数,一些非法用户可以通过工具拦截请求并篡改参数来窃取服务资源;所以安全性并无强弱之分,如果不使用HTTPS加密,数据在网络上都是明文传输的,容易被截取。使用HTTPS可以为这两种请求方式提供同等的安全保障,确保数据在传输过程中不被窃听或篡改。