1、用途的描述
- GET方法请求一个指定资源的表现形式,使用GET请求应该只被用于获取数据
- POST方法用于将实体提交到指定的资源,通常导致状态或服务器上的副作用的更改
2、HTTP几个方法的性质
- Safe-安全:一个方法在语义上需要是只读的,不能修改服务器状态(或者说是数据),GET, HEAD, OPTIONS 和 TRACE 这几个方法是安全的
- Idempotent - 幂等:同一个请求方法执行多次和仅执行一次的效果完全相同。PUT、DELETE 和GET、 HEAD、OPTIONS、TRACE 方法都是幂等的,POST方法是非幂等的
- Cacheable - 可缓存性:一个方法可以被缓存,就是在某些情况下可以被缓存,比如我们请求页面时候,一些静态文件是可以直接从缓存中获取的,比如 css、js、图片等文件。 GET,HEAD 和某些情况下的 POST 都是可缓存的。
3、GET和POST的几个主要区别
- GET在浏览器回退或者刷新时时无害的,而POST会再次提交请求,因为GET请求是幂等的,而POST不是
- GET请求在URL中传送的参数是有长度限制的,而POST没有,因为大多数浏览器通常都会限制url长度在2K个字节,而大多数服务器最多处理64K大小的url
- GET请求只能进行url编码,而POST支持多种编码方式
- GET参数通过URL传递,POST放在Request body中
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
- GET请求参数会被完整保留在浏览器历史记录里,可被收藏为书签,而POST中的参数不会被保留
- GET请求会被浏览器主动cache,而POST不会,除非手动设置
4、URL编码是什么?
URL编码遵循下列规则: 每对name/value由&;符分开;每对来自表单的name/value由=符分开。theName=Ichabod+Crane&gender=male&status=missing& ;headless=yes
url编码就是一个字符ascii码的十六进制。不过稍微有些变动,需要在前面加上“%”。比如“\”,它的ascii码是92,92的十六进制是5c,所以“\”的url编码就是%5c
5、应用场景的区别
- GET
- 从服务器端获取数据,不做增删改(查询数据),请求结果无持续性的副作用
- HTML表单数据仅用来帮助搜索(搜索操作)
- POST
- 向服务器提交数据,如做增删改操作,请求结果有持续性的副作用
- 若使用GET方法,则表单上收集的数据可能让URL过长
- 要传送的数据不是采用7位的ASCII编码
6、扩展
get/post都是http/https协议的方法,加不加密它们说了不算。如果你get/post是在http里面,那就明文;在https里面,就是密文。当然,post的数据本身可以加密,这属于应用数据的加密,跟http等应用协议的加密是两回事,互不影响。
常用的与服务器进行的交互方式是GET和POST,而一般在表单的数据提交中,都会选择POST方式,如使用https进行web数据的完全加密传输,但是因为https是对所有的数据进行加密这样就影响了网页的浏览速率,况且有时只需对关键数据进行加密保护。这时就需要一些小规模的数据加密传输解决方法,用RSA加密算法加密web数据,具体是在客户端用js脚本使用公钥加密数据,再在服务器端用PHP脚本程序使用私钥解密数据。 参考:表单提交对数据进行加密详解(RSA加密)