在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:get和 post
get–>从指定的资源获取数据
post–>向指定的资源提交要被处理的数据
get方法:,查询字符串(名称/值对)是在 get请求的 URL 中发送的,及get把参数包含在URL中
http://www.baudu.com?name1=value1&name2=value2&.....
post:查询字符串(名称/值对)是在 post 请求的 HTTP 消息主体中发送的,及post通过request body传递参数。(见w3school)
POST /test/demo_form.asp HTTP/1.1
Host: w3schools.com
name1=value1&name2=value2
关于GET和POST的区别
get使用URL进行传参 post使用request body 进行
get在浏览器回退/刷新时时无害 post会再次请求
get请求的参数被完整保留在浏览器历史记录里,而POST中的参数不会被保留
get请求的URL是有长度限制的 post没有
get请求的参数会被保存在浏览器的历史记录中 post的参数不会保留
post发送的数据会更大(get限制url长度)
post能发送更多的数据类型(get只能发送ASCII字符)
post比get安全(不会作为URl的一部分 不会被缓存 )
关于get请求和post请求过程
get请求比post请求快
post请求包含更多的请求头 最重要的一条是post在真正接收数据之前会将请求头发送给服务器进行确认 然后在进行真正发数据
get请求:
- 浏览器请求tcp连接
- 服务器答应进行tcp连接
- 浏览器确认,并发送get请求头和数据
- 服务器返回200 OK响应
post请求:
- 浏览器请求tcp连接
- 服务器答应进行tcp连接
- 浏览器确认,并发送post请求头
- 服务器返回100 Continue响应
- 浏览器发送数据
- 服务器返回200 OK响应
理解误区
1 get和post与数据传输是没有任何关系的
get和post是由HTTP协议定义的。在HTTP协议中,Method和Data(URL, Body, Header)是正交的两个概念,也就是说,使用哪个Method与应用层的数据如何传输是没有相互关系的。
2 get和post本质上没有区别
get和post是HTTP发送请求的两种方式.
HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议
HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP.
也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。
3 HTTP没有规定get和post的长度
HTTP协议明确地指出了,HTTP头和Body都没有长度的要求。而对于URL长度上的限制,主要是浏览器和WEB服务器造成的