HTTP协议

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请求分为四个部分.

HTTP协议_第1张图片

  1. 请求行(首行). 包含三个部分( 三个部分之间使用空格来分割 )
    1. HTTP的方法
    2. URL
    3. HTTP版本号
  2. 请求头(header). 包含很多行
    • 每一行都是一个键值对
    • 键和值之间使用 冒号+空格(: ) 来分割
  3. 空行.
    • 相当于请求头的结束标记.
  4. 请求正文.
    • 可选,不一定有.
    • 虽然请求正文不一定有,但是空行一定是有的.

2.2.HTTP响应

HTTP响应也分为四个部分.

HTTP协议_第2张图片

  1. 状态行(首行). 包含三个部分( 三个部分之间使用空格来分割 )
    1. HTTP版本号
    2. 状态码
    3. 状态码的描述
      • 通过一个或者一组简单的单词,来描述当前状态码的含义
  2. 响应头(header). 也是包含很多行
    • 每一行都是一个键值对
    • 键和值之间使用 冒号+空格(: ) 来分割
  3. 空行.
    • 相当于响应头的结束标记.
  4. 响应正文(body).
    • 服务器返回给客户端的具体数据.

3.HTTP请求详细解释

3.1.URL

URL的含义就是"网络上唯一资源的地址符" URL中很多项是可以省略的.

HTTP协议_第3张图片

  • 协议方案名
  • 登录信息
    • 认证:很少在用了
  • 服务器地址
    • 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.1
POST 传输实体主体 1.0、1.1
PUT 传输文件 1.0、1.1
HEAD 获得报文首部 1.0、1.1
DELETE 删除文件 1.0、1.1
OPTIONS 询问支持的方法 1.1
TRACE 追踪路径 1.1
CONNECT 要求用隧道协议连接代理 1.1
LINK 建立和资源之间的联系 1.0
UNLINE 断开连接关系 1.0

GET 和 POST 的区别.

首先. GET POST 没有本质区别.
因为现在的网络环境中使用GET的场景是可以替换成POST,使用POST的场景也可以替换成GET

但是细节上GET和POST还是有区别的.

  1. 语义上的区别
    • GET通常是用来取数据
    • POST通常用来上传数据
  2. 通常情况下
    • GET是没有body
      • GET通过query string (查询字符串) 向服务器传递数据
    • POST是有body的
      • POST通过body向服务器传递数据,但是POST没有 query string
    • 注意这里都是通常情况, 如果想让GET有body 或者 想让 POST 带有 query string 都是完全可以的
  3. GET请求一般是幂等的.POST请求一般是不幂等的.(也是建议)
    • 幂等:每次相同的输入得到的输出结果是确定的.
    • 不幂等:每次相同的输入得到的输出结果是不确定的.
  4. GET是可以被缓存的.POST不能被缓存
    • 能不能缓存取决于是不是幂等的.因为只有相同输入得到的结果是相同的情况,才可以被缓存.

你可能感兴趣的:(鱼小飞代码之旅,http,网络,网络协议)