1.HTTP
HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的 应用层协议.
- HTTP 在传输层是基于 TCP 协议实现的. - (HTTP1.0, HTTP1.1, HTTP2.0 均为TCP, HTTP3 基于 UDP 实现)- 目前我们主要使用的还是 HTTP1.1 和 HTTP2.0 .- 这里我们讨论的 HTTP 协议以 1.1 版本为主.
- HTTP 属于一个文本格式的协议 - (UDP/TCP/IP 这些协议属于二进制的协议)
- 我们可以借助抓包工具(Fiddler)来观察HTTP报文格式.
2.HTTP 协议格式
HTTP协议格式分为请求格式和响应格式.
2.1.HTTP请求
HTTP请求分为四个部分.
- 请求行(首行). 包含三个部分( 三个部分之间使用空格来分割 ) 1. HTTP的方法2. URL3. HTTP版本号
- 请求头(header). 包含很多行 - 每一行都是一个键值对- 键和值之间使用 冒号+空格(: ) 来分割
- 空行.- 相当于请求头的结束标记.
- 请求正文.- 可选,不一定有.- 虽然请求正文不一定有,但是空行一定是有的.
2.2.HTTP响应
HTTP响应也分为四个部分.
- 状态行(首行). 包含三个部分( 三个部分之间使用空格来分割 ) 1. HTTP版本号2. 状态码3. 状态码的描述 - 通过一个或者一组简单的单词,来描述当前状态码的含义
- 响应头(header). 也是包含很多行 - 每一行都是一个键值对- 键和值之间使用 冒号+空格(: ) 来分割
- 空行.- 相当于响应头的结束标记.
- 响应正文(body).- 服务器返回给客户端的具体数据.
3.HTTP请求详细解释
3.1.URL
URL的含义就是"网络上唯一资源的地址符" URL中很多项是可以省略的.
- 协议方案名
- 登录信息 - 认证:很少在用了
- 服务器地址 - IP地址或者域名
- 服务器端口号 - 省略的情况下会有默认值:HTTP 80 HTTPS 443
- 文件路径 - 可能是真实路径,也可能是虚拟路径
- 查询字符串 - query string- 可以有也可以没有- 键值对之间用&分割- 键和值用=分割
- 片段标识符 - 描述要访问当前页面具体的哪个子部分,跳到相对位置
3.1.1.URL encode/decode
- 当query string(查询字符串) 中包含特殊字符,就需要对特殊字符进行转义
- 转义过程就叫做 url encode
- 把转义以后的内容还原回来,就叫做 url decode
- 转移规则 - 把要转义的内容的ASCII值,取出来用十六进制表示,同时在前面加上%(每个字节都这样处理)
3.2.方法
认识"方法"(method)
方法说明支持的HTTP协议版本GET获取资源1.0、1.1POST传输实体主体1.0、1.1PUT传输文件1.0、1.1HEAD获得报文首部1.0、1.1DELETE删除文件1.0、1.1OPTIONS询问支持的方法1.1TRACE追踪路径1.1CONNECT要求用隧道协议连接代理1.1LINK建立和资源之间的联系1.0UNLINE断开连接关系1.0
GET 和 POST 的区别.
首先. GET POST 没有本质区别.
因为现在的网络环境中使用GET的场景是可以替换成POST,使用POST的场景也可以替换成GET
但是细节上GET和POST还是有区别的.
- 语义上的区别 - GET通常是用来取数据- POST通常用来上传数据
- 通常情况下 - GET是没有body - GET通过query string (查询字符串) 向服务器传递数据- POST是有body的 - POST通过body向服务器传递数据,但是POST没有 query string- 注意这里都是通常情况, 如果想让GET有body 或者 想让 POST 带有 query string 都是完全可以的
- GET请求一般是幂等的.POST请求一般是不幂等的.(也是建议) - 幂等:每次相同的输入得到的输出结果是确定的.- 不幂等:每次相同的输入得到的输出结果是不确定的.
- GET是可以被缓存的.POST不能被缓存 - 能不能缓存取决于是不是幂等的.因为只有相同输入得到的结果是相同的情况,才可以被缓存.
版权归原作者 魚小飛 所有, 如有侵权,请联系我们删除。