谈谈HTTP那点事

今天看到一个问题问 谈谈HTTP中的GET和POST区别
我看了下有人回答的答案 感受都理解错了
HTTP
按照百度百科的解释 HTTP是一个超文本传输协议 是互联网上应用最普遍的一种网络协议
是基于TCP/IP协议的应用层协议浏览器

HTTP历史缓存

1.HTTP/0.9
1991年发布0.9版本 0.9版本只有一个get
TCP握手后 客户端向服务器请求网页 服务器只能返回HTML格式字符串 服务器发送完毕 握手断开bash

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个持久链接post

其余功能url

添加了一个除get post 之外的put deletespa

以上已经了解了HTTP历史
下面说下题目get post区别
HTTP底层是基于TCP/IP 因此说GET POST也是基于TCP/IP 也说以说GET POST 能够干一样的事情code

get post只是说HTTP设定的一种类别 来区分数据请求的一种方式 本质上(TCP/IP)是没有区别的 都是在传输数据 只是说这样设置这种类型 能够方便好的区分当前数据是某种 好比get携带body体 post写在url中 这也是能够的ip

get post 都是去服务器那边请求一个资源 语义上来讲明get是从服务器那边拿数据 post是更新数据
本质上没有差异都是TCP连接

可是也有个区别

  1. get方式请求 浏览器会把header data一块发送 等待服务器状态码200响应
  2. post 浏览器会先发送header 服务器响应100 continue 浏览器在发送data 等待服务器200响应