1.HTTP协议

1.什么是HTTP

HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议.
所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些其他的资源, 比如图片, 视频, 音频等二进制的数据。

2.HTTP 协议的工作过程

当我们在浏览器中输入一个 "网址", 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应.

事实上, 当我们访问一个网站的时候, 可能涉及不止一次的 HTTP 请求/响应 的交互过程.
可以通过 chrome 的开发者工具观察到这个详细的过程.
通过 F12 打开 chrome 的开发者工具, 切换到 Network 标签页. 然后刷新页面即可看到如下图效果. 每一条记录都是一次 HTTP 请求/响应

3.HTTP 协议格式

请求和响应的格式第一行不一样,后边的都一样。都分四个部分:

  1. 行信息(请求=>请求行,响应=>响应行/状态行)
  2. 头信息(请求=>请求头,响应=>相应头)
  3. 空行
  4. body(正文)(请求=>请求正文,响应=>响应正文)

思考问题: 为什么 HTTP 报文中要存在 "空行"?

因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 "报头的结束标记", 或者是 "报头和正文之间的分隔符".
HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 "粘包问题".

2.抓包工具Fiddler的用法

HTTP 是一个文本格式的协议. 可以通过 Chrome 开发者工具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节。

1.Fiddler的使用

  • 左侧窗口显示了所有的 HTTP请求/响应, 可以选中某个请求查看详情.
  • 右侧上方显示了 HTTP 请求的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
  • 右侧下方显示了 HTTP 响应的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
  • 请求和响应的详细数据, 可以通过右下角的 View in Notepad 通过记事本打开.

可以使用 ctrl + a 全选左侧的抓包结果, delete 键清除所有被选中的结果.

2.Fiddler的原理

Fiddler 相当于一个 "代理".
浏览器访问 sogou.com 时, 就会把 HTTP 请求先发给 Fiddler, Fiddler 再把请求转发给 sogou 的服务器.
当 sogou 服务器返回数据时, Fiddler 拿到返回数据, 再把数据交给浏览器.
因此 Fiddler 对于浏览器和 sogou 服务器之间交互的数据细节, 都是非常清楚的.

3.抓包结果

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

HTTP请求

POST http://wup.imtt.qq.com:8080/?encrypt=17&tk=903001ea781d0525bf86d9561ed04ccb50fbb265bbb3304ad8a3d31d7ab428d5323f6e7f03b881db21133b1bf2ae5bc5&iv=80AD8969948C4f0c HTTP/1.1
Q-UA2: PR=PC&CO=WBK&QV=3&PL=WIN&PB=GE&PPVN=10.9.0.4626&COVC=047700&CHID=43665&RL=1920*1080&MO=QB&VE=GA&BIT=64&OS=10.0.19044
Q-GUID: 1216EFF507D5E2D9B21BAE1180D82E2C8B1BFFFD6C7CB6105EC913AF1C157CB3
QQ-S-ZIP: gzip
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36 QQBrowser/9.3
Host: wup.imtt.qq.com:8080
Content-Length: 288
Pragma: no-cache
  • 首行: [方法] + [url] + [版本]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;

HTTP响应

HTTP/1.1 200 OK
Cache-Control: no-cache
Connection: close
Content-Length: 112
Content-Type: application/multipart-formdata
Date: Wed, 08 Jun 2022 09:22:17 GMT
QQ-S-Encrypt: 17
QQ-S-ZIP: gzip
  • 首行: [版本号] + [状态码] + [状态码解释]
  • Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
  • Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中.

HTTP协议的基本格式和Fiddler的用法相关推荐

  1. [JavaWeb开发中]HTTP 协议的基本格式和Fiddler抓包工具

    目录 1.HTTP是什么? 2.经典的模型图 3.当我们按下回车发生了什么? 4.理解 HTTP 协议的工作过程 5.HTTP 协议格式 1.常用的抓包工具 2.抓包原理 3.抓包结果 4.协议格式总 ...

  2. HTTP协议和抓包工具Fiddler

    HTTP,Fiddler 1.HTTP是什么 2.HTTP协议与客户端和服务器 3.HTTP协议的报文格式 1.抓包工具 2.HTTP报文格式 1.HTTP请求的报文格式 2.HTTP响应的报文格式 ...

  3. 计算机网络数据分析报告,贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式...

    贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 贵州大学GUIZHOU UN ...

  4. 【FFmpeg】ffmpeg 命令查询二 ( 比特流过滤器 | 可用协议 | 过滤器 | 像素格式 | 标准声道布局 | 音频采样格式 | 颜色名称 )

    FFmpeg 系列文章目录 [FFmpeg]Windows 搭建 FFmpeg 命令行运行环境 [FFmpeg]FFmpeg 相关术语简介 ( 容器 | 媒体流 | 数据帧 | 数据包 | 编解码器 ...

  5. 【音视频零基础入门 1】视频播放器原理、流媒体协议、封装格式、视频编码、音频编码

    [音视频零基础入门 1]视频播放器原理.流媒体协议.封装格式.视频编码 一.视频播放器原理 1.1 解协议 1.2 解封装 1.3 解码 1.4 视音频同步 二.流媒体协议 三.封装格式 四.封装格式 ...

  6. HTTP协议报文基本格式

    HTTP协议报文基本格式     HTTP协议(Hypertext Transfer Protocol――超文本传输协议),浏览器端(客户端)向WEB服务器端访问页面的过程和HTTP协议报文的格式. ...

  7. ICMP协议及报文格式

    摘自:<深入理解计算机网络> 王达著 机械工业出版社 相关知识链接 1. IPV4数据报头部格式请点击这里 2. IPv6数据报头部格式请点击这里 3. IPv4数据报的封装与解封装请点击 ...

  8. 计算机网络考试数据包格式,计算机网络实验 分析ICMP协议数据包格式.doc

    计算机网络实验 分析ICMP协议数据包格式 实 验 报 告 实验课程名称 计算机网络实验 实验项目名称 分析ICMP协议数据包格式 年 级 08 专 业 电子信息科学与技术 学生姓名 郎子龙 学 号 ...

  9. HTTP协议的请求格式解析

    HTTP协议是一个使用较多的应用层协议,它是一个请求/响应式的一个协议,就是我客户端给你发一个请求,你客户端需要返回给我一样响应.首先我们来看一下HTTP协议的请求格式. HTTP请求格式: HTTP ...

最新文章

  1. ViewPager一屏显示多个item,及边缘滑动事件优化
  2. 换血吃药改基因,硅谷富豪们想用钱收买死神丨视频
  3. python 格式化方法 从其他信息构建字符串
  4. 微服务发展的历史_Spring Cloud Alibaba#03. 微服务的发展史
  5. [PSA]-PSA Certified简介
  6. Tomcat7出现HTTP Status 500 - java.lang.ClassCastException: org.apache.jasper.el.ELContextImpl cannot b
  7. LayaAir graphics 矢量绘图之 多边形、矩形
  8. 满月啦,Linux公众号!
  9. python arp 网关_python使用arp欺骗伪造网关的方法
  10. 上,下拉电阻的作用与计算
  11. 进销存系统功能结构图
  12. Unity场景打包AssetBundle并加载
  13. 编译原理 正则表达式_确定有穷自动机(DFA)_化简(最小化)
  14. 自己写的txt分割器
  15. Process finished with exit code -1073740791(0xC0000409)
  16. 策略路由 本地策略+接口策略
  17. 敏友的【敏捷个人】有感(1): 敏捷个人-阅读笔记 by 人月神话
  18. DZ插件制作简易入门教程(自学手记)第二篇
  19. Java编程验证鬼谷猜想,山河令:阿絮是什么时候知道老温是鬼谷谷主的?老温心里没点数吗?...
  20. vscode在windows端远程连接ubuntu工作站

热门文章

  1. 笔记本cpu天梯图2022年11月新版 笔记本cpu排行榜2022
  2. xss for u7 BOM
  3. Deep Learning — LeCun, Yann, Yoshua Bengio and Geoffrey Hinton
  4. linux下的sh文件变成可执行文件
  5. Atom插件下载失败解决办法
  6. JavaScript:createElement
  7. R&S,数通HCIE|IGMP 协议
  8. 微软群集MSCS系统介绍
  9. 滑动(左滑右滑加载下一页)
  10. 发送HTTP POST请求工具类