今天看到一个问题问 谈谈HTTP中的GET和POST区别
我看了下有人回答的答案 感觉都理解错了
HTTP
按照百度百科的解释 HTTP是一个超文本传输协议 是互联网上应用最广泛的一种网络协议
是基于TCP/IP协议的应用层协议
HTTP历史
1.HTTP/0.9
1991年发布0.9版本 0.9版本只有一个get
TCP握手后 客户端向服务器请求网页 服务器只能返回HTML格式字符串 服务器发送完毕 握手断开
2.HTTP/1.0
1996年发布1.0版本 除了get 还有post命令
TCP握手后 每次的请求都要包括HTTP header 和用来描述的元数据
还添加了状态码 缓存等
```
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Encoding: gzip
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
```
>可以看到服务器那边返回的信息
Content-Type 字段是服务器回应时候告诉客户端数据格式
Content-Encoding 字段是说明数据是那种压缩方法
**1.0缺点**
HTTP/1.0版本有一个问题就是每个TCP的握手只能发送一个ok后就要关闭 这样就是要每次请求到要建立握手 消耗服务器
**1.0解决**
为了解决每次的请求到握手一次 有些浏览器在请求时候 用了一个非标准的Connection 字段
Connection:keep-alive 这个请求字段表示服务器不要关闭TCP链接 知道客户端或者服务器主动关闭链接复制代码
3.HTTP/1.1
1997年 发布1.1版本 是现在比较流行的版本
1.1版本变化是解决1.0上面的问题 持久连接 TCP连接默认不关闭 可以被多个请求复用 不用像1.0那样声明一个Connection:keep-alive
客户端和服务对方一段时间没有活动 就可以主动关闭链接 不过 规范就是客户端在最后一个请求时候 发送 Connection:close 明确要求服务关闭TCP链接
注 目前对于同一个域名 大多数浏览器允许同时建立6个持久连接
其他功能
添加了一个除get post 以外的put delete
以上已经了解了HTTP历史
下面说下题目get post区别
HTTP底层是基于TCP/IP 所以说GET POST也是基于TCP/IP 也说以说GET POST 可以干同样的事情
get post只是说HTTP设定的一种类别 来区分数据请求的一种方式 本质上(TCP/IP)是没有区别的 都是在传输数据 只是说这样设置这种类型 可以方便好的区分当前数据是某种 比如get携带body体 post写在url中 这也是可以的
get post 都是去服务器那边请求一个资源 语义上来说明get是从服务器那边拿数据 post是更新数据
本质上没有差别都是TCP链接
但是也有个区别
- get方式请求 浏览器会把header data一块发送 等待服务器状态码200响应
- post 浏览器会先发送header 服务器响应100 continue 浏览器在发送data 等待服务器200响应