HTTP协议
首先,我们应该知道,无论是POST还是GET请求,都是基于超文本传输协议(HTTP)的,而HTTP协议是TCP/IP协议族的应用层协议。
请求方法
- GET:获取资源,用来请求访问已被URI(统一资源标志符,和URL是包含和被包含的关系)识别的资源。
- POST:用来传输实体的主体,虽然GET也可以实现,但是一般不用。
- PUT:传输文件。但是鉴于PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,因此一般网站都不采用该方法。
- HEAD:获得报文首部。和GET请求一样,只是不返回报文主体部分。
- DELETE:删除文件。同样不带验证机制,存在安全性问题。
- OPTIONS:询问指定的请求URI支持哪些方法。
- TRACE:追踪路径,让Web服务器将之前的请求通信环回给客户端的方法。
- CONNECT:要求在与代理服务器通信时建立隧道,实现隧道协议进行TCP通信。
GET与POST
- 本质上都是TCP链接,并无差别
- 但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中会体现出一些区别
区别
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET产生的URL地址可以被Bookmark,而POST不可以。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
- GET请求只能进行url编码,而POST支持多种编码方式。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的,而POST没有。
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET参数通过URL传递,POST放在Request body中
参数长度:
GET请求长度最多1024kb,POST对请求数据没有限制
HTTP 协议没有Body和 URL 的长度限制,对 URL 限制的大多是浏览器和服务器的原因
安全:
POST 比 GET 安全,因为数据在地址栏上不可见
然而,从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文
只有使用HTTPS才能加密安全
GET与POST小结
- 参数长度:GET请求长度最多1024kb,POST对请求数据没有限制
- 请求参数:GET请求参数是通过URL传递的,多个参数以&连接,POST请求放在request body中。
- 请求缓存:GET请求会被缓存,而POST请求不会,除非手动设置。
- 收藏为书签:GET请求支持,POST请求不支持。
- 安全性:POST比GET安全,GET请求在浏览器回退时是无害的,而POST会再次请求。
- 历史记录:GET请求参数会被完整保留在浏览历史记录里,而POST中的参数不会被保留。
- 编码方式:GET请求只能进行url编码,而POST支持多种编码方式。 对参数的数据类型:GET只接受ASCII字符,而POST没有限制。