GET和POST是HTTP请求报文中常见的两种方法。
- GET:从指定的资源请求数据
查询字符串(名称/值对)是在 GET 请求的 URL 中发送的,以?分割URL和传输数据,参数之间以&相连
如: /test/demo_form.php?name1=value1&name2=value2 - POST:向指定的资源提交要被处理的数据
查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的,
如:POST /test/demo_form.php HTTP/1.1
Host: runoob.com
name1=value1&name2=value2
GET与POST的区别:
- get在浏览器回退时是无害的,而post会再次提交请求
- get产生的url地址可以收藏为书签,而post不行
- get请求会被浏览器主动cache,而post不会,除非手动设置
- get请求只能进行url编码,而post支持多种编码方式
- get请求参数会被完整保留在浏览器历史记录里,而post中的参数不会被保留
- get请求在url中传送的参数是有长度限制的,因为URL 的长度是受限制的,而post没有限制
- 对参数的数据类型,get只接受ASClI字符,而post没有限制
- post比get更安全,因为get参数直接暴露在url上,所发送的数据是 URL 的一部分,所以不能用来传递敏感信息
- get参数通过url传递,post的参数放在request body中
在实际中,GET和POST的本质是一样的,它们都是 HTTP 请求协议的请求方法,而 HTTP 又是基于TCP/IP的关于数据如何在万维网中如何通信的协议,所以 GET/POST 实际上都是 TCP 链接。