GET 和 POST
浏览器的 GET 和 POST
特指浏览器中 非 Ajax 的 HTTP 请求,即从 HTML 和浏览器诞生就一直使用的 HTTP 协议中的 GET/POST
- 浏览器用GET请求来获取一个html页面/图片/css/js等资源
- 用POST来提交一个
GET
读取一个资源,并且反复读取不应该对访问的数据有副作用
因此,可以对 GET 请求的数据做缓存,这个缓存可以做到浏览器本身上(彻底避免浏览器发请求),也可以做到代理上(如 nginx),或者做到 server 端(用 Etag,可以减少带宽消耗)
当浏览器发出一个 GET 请求时,要么是用户自己在浏览器的地址栏输入,要不就是点击了 HTML 中 a 标签的 href 的 url,并在后面携带请求的参数
POST
在页面里 标签会定义一个表单,点击其中的 submit 元素会发出一个POST请求让服务器做一件事,得到一个结果的网页
因此,不能随意多次执行,不能做成缓存,如果尝试重新执行 POST 请求,浏览器会弹出一个框提示,是否要继续操作
表单的数据被浏览器编码到 HTTP 请求的 body 里
接口中的 GET 和 POST
是指通过浏览器的 Ajax API或者 Java 的 commons-Httpclient
此时的 GET/POST 请求不光用在前端和后端的交互中,还能用在后端各个子服务的调用中(即当一种 RPC 协议使用)
GET和POST是什么?HTTP协议中的两种发送请求的方法。
HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。
HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。
GET和POST还有一个重大区别,简单的说:
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header 和 data 一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,由服务器先检查 header 是否符合要求(如数据的格式是否正确等),符合的话,服务器响应100 continue,浏览器再发送 data,服务器响应 200 (返回数据)