当前位置: 首页 > news >正文

JavaEE: 深入解析HTTP协议的奥秘(1)

文章目录

  • HTTP
    • HTTP 是什么
    • HTTP 协议抓包
      • fiddle 用法
    • HTTP 请求响应基本格式


HTTP

HTTP 是什么

在这里插入图片描述

HTTP 全称为"超文本传输协议".
HTTP不仅仅能传输文本,还能传输图片,传输音频文件,传输其他的各种数据.

因此它广泛应用在日常开发的各种场景中.

在这里插入图片描述
HTTP 往往是基于传输层的 TCP 协议实现的.

  • HTTP1.0 , HTTP1.1 , HTTP2.0 均为 TCP.
  • HTTP3 基于 UDP 实现.

目前互联网上见到的 HTTP 协议,绝大部分都是 HTTP/1.1 版本.

因为 1.1 版本就足够好用了,升级到 2.0 成本比较高(浏览器/服务器的兼容性),带来的收益有限.
有点 IPv6 的感觉~

HTTP 协议,是一种典型的"一问一答"的协议.

  • 客户端发一个请求,服务器返回一个响应(一一对应)

HTTP 协议抓包

借助抓包工具,我们可以观察到 HTTP 请求/响应 的详细情况.

PS: TCP/UDP 也是可以抓包的.

抓包: 把通过网卡上的数据,获取到,并且解析出来.

在这里插入图片描述
代理 又分为正向代理和反向代理.

举个例子:
在这里插入图片描述

fiddle 用法

fiddle 用法.

只要启动 fiddle,此时,抓包工作就自动开始了~

fiddle 开启后,会多一层处理,就可能导致你打开其他网页比较慢~

  1. 左侧是抓到的 HTTP 数据报的列表.
    在这里插入图片描述

  2. 点击某一项,右侧就能看到请求和响应的详细情况.
    右上方是请求的详情.
    在这里插入图片描述

    右下方是相应的详情.
    在这里插入图片描述
    两排标签页:
    在这里插入图片描述
    在这里插入图片描述
    响应这里打开,看到的是二进制.(本身相应也是文本,此处的二进制,是压缩后的)
    在这里插入图片描述

    为啥要压缩呢?
    答: 体积小了,传输时消耗的带宽就低了,带宽是互联网中最贵的硬件资源,比 cpu,内存都要贵~

raw 标签页就是 HTTP 的原始数据.
发送 HTTP 请求就是往 TCP socket 中,按照上述格式,写入一段字符串.
收到 HTTP 响应,就是从 TCP socket 中,读出一段字符串再解析~

HTTP 请求响应基本格式

以下是一个HTTP请求/相应的抓包结果.

HTTP请求:
在这里插入图片描述

  • 首行: [方法] + [URL] + [版本]

    方法: 这次请求的"动作"是啥.
    URL: 访问的资源是啥.
    版本号: 在上图中是 HTTP/1.1

  • 请求头(Header): 从第二行开始的若干行,一直到空行结束. 表示请求的属性, :空格 分隔的键值对; 每组属性之间使用 \n 分割;
  • Body: 空行后面的内容都是 Body. Body 允许为空字符串.如果 Body 存在,则在 Header 中会有一个 Content-Length 属性来标识 Body 的长度.

    HTTP 一般来说,GET 往往是不带 Body. POST 往往是带 Body 的.

HTTP 响应:

在这里插入图片描述
HTTP 响应的基本格式也是四个部分~
在这里插入图片描述

  1. 首行: 在这里插入图片描述
    首行的三个部分,使用空格分隔.(请求也是如此)
  2. 响应头(Header) : 键值对.每行是一个键值对,不确定有几行,以 空行 结尾. 键 与 值 之间使用 :空格 分隔.
  3. 空行
  4. 正文
    对于相应来说,正文通常是 HTML/CSS/JS/JSON/图片/音频/字体…

下一篇文章: JavaEE: 深入解析HTTP协议的奥秘(2)

本文到这里就结束啦~

在这里插入图片描述

http://www.lryc.cn/news/454996.html

相关文章:

  • OpenStack Yoga版安装笔记(十六)Openstack网络理解
  • PEFT库和transformers库在NLP大模型中的使用和常用方法详解
  • 静止坐标系和旋转坐标系变换的线性化,锁相环线性化通用推导
  • AI学习指南深度学习篇-学习率衰减的变体及扩展应用
  • 成都睿明智科技有限公司真实可靠吗?
  • 力扣6~10题
  • IntelliJ IDEA 2024.2 新特性概览
  • C++基础(12)——初识list
  • 系统架构设计师论文《论NoSQL数据库技术及其应用》精选试读
  • 产品经理产出的原型设计 - 需求文档应该怎么制作?
  • phenylalanine ammonia-lyase苯丙氨酸解氨酶PAL功能验证-文献精读61
  • 柯桥生活口语学习之在化妆品店可以用到的韩语句子
  • Ubuntu 安装 Docker Compose
  • C++面试速通宝典——7
  • 毕业设计 大数据电影数据分析与可视化系统
  • 第三届图像处理、计算机视觉与机器学习国际学术会议(ICICML 2024)
  • OJ在线评测系统 微服务技术入门 单体项目改造为微服务 用Redis改造单机分布式锁登录
  • 【机器学习】网络安全——异常检测与入侵防御系统
  • 【C语言】基础篇续
  • 文件丢失一键找回,四大数据恢复免费版工具推荐!
  • 【学习笔记】手写一个简单的 Spring MVC
  • 编程究竟难在哪里?
  • C#医学影像分析源码,医院影像中心PACS系统源码
  • WooCommerce与wordpress是什么关系
  • Web常见的攻击方式及防御方法
  • 基于STM32的超声波测距仪设计
  • 【数据库】Java 集成mongodb— MongoTemplate 详解
  • 腿和脚的动作透露出你的内心“世界”
  • Oracle架构之用户,权限,角色讲解
  • Unity_Obfuscator Pro代码混淆工具_学习日志