get和post都是HTTP中的八个请求方法之一,面试中经常问到post跟get的区别,个人进行一点总结。
从作用上看:
get是为了获取服务器中的某个数据,不尝试修改数据。
post是为了提交某个表单或者请求信息并且需要修改服务器数据。
从安全性上看:
从服务器的数据角度:get只是获取服务器中的某个数据,不修改服务器的状态,因此是较安全的。post表单提交的过程中会导致数据库状态改变,因此有可能导致一些安全问题,post是不安全的。
从传输的角度:get中使用的编码原因,get容易被截获,因此是不安全的。post是可以使用多种编码的,较安全。
但是归根到底http是明文传输的,作者认为两者都是不安全的。
从浏览器缓存的角度:
get的每次请求对于服务器来说都是无状态的,因此浏览器会采取缓存措施进行缓存。
post的每次请求对于服务器都是有状态改变的,因此浏览器不会进行缓存,如果进行缓存会导致同个请求多次发送,是一种不合理的表现。
从请求发送的角度:
get发送是一次将请求头与请求体发送过去,post是分两次,先发送请求头后发送请求体。
因此有了这样子一个说法:get是回退无害的,post是回退有害的。
从请求数据编码的角度:
get一般只可以使用ASCII编码,post由于其请求的类型可能是表单等其他数据,因此其请求体可以是多种编码。
并且post请求体的长度没有限制,get的请求体长度有限制。