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

在这里插入图片描述

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

2.2.HTTP响应

HTTP响应也分为四个部分.

在这里插入图片描述

  1. 状态行(首行). 包含三个部分( 三个部分之间使用空格来分割 )
    1. HTTP版本号
    2. 状态码
    3. 状态码的描述
      • 通过一个或者一组简单的单词,来描述当前状态码的含义
  2. 响应头(header). 也是包含很多行
    • 每一行都是一个键值对
    • 键和值之间使用 冒号+空格(: ) 来分割
  3. 空行.
    • 相当于响应头的结束标记.
  4. 响应正文(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.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不能被缓存
    • 能不能缓存取决于是不是幂等的.因为只有相同输入得到的结果是相同的情况,才可以被缓存.
  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 36
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魚小飛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值