HTTP相关内容

发布于:2025-05-23 ⋅ 阅读:(22) ⋅ 点赞:(0)

应用层

自定义应用层协议,协议:约定

1.约定好通信传输的信息

2.约定好数据的组织格式(xml, json(重点), protobuf)

也可以基于现成的应用层协议,来进行开发

协议的种类非常多(HTTP 协议属于翘楚,1.手机,2 网站)

跟正确的说,咱们现在使用的是 HTTPS 这个协议,HTTP和HTTPS 有非常大的关系

HTTP (全称为"超文本传输协议") 基于文本格式的协议(TCP UDP,以太网,IP...都是基于二进制格式的协议)

二进制 VS 文本

超文本,文本中包含了一些更加复杂的内容(图片,视频,音频,特殊字体,链接)

HTTP 诞生于 1991 年(计算机圈子的"奇迹年" 诞生了很多知名的产品(HTTP, Python, Linux, Vim, Qt(C++知名库)))

HTTP/1.1是最广泛使用的(HTTP/3.0)

HTTP 是应用层协议,传输层 依赖 TCP 来进行实现(HTTP 2.0 及其之前,是基于 TCP(传输效率) , 到了 HTTP/3.0 基于 UDP)

HTTP 协议是一个非常经典的 "一问一回"模型

关心 HTTP 交换过程的时候,需要关系 HTTP 请求是什么样子的,HTTP 响应是什么样子的(HTTP 的协议格式)

需要用抓包软件,观察 HTTP 的协议格式

抓包软件,本质上是一个"代理程序"

代理分成两类

1.正向代理(代替客户端干活)

2.反向代理(代替服务器干活)

电脑上安装了抓包软件之后,抓包软件就可以监听你的网卡上通过的数据了

本来是你的客户端通过网卡,把数据发给目标服务器;

有了抓包软件 你的客户端把数据通过网卡,先发给抓包软件,抓包软件在把数据通过网卡发给目标服务器

服务器返回的数据,也是先到达抓包软件,在回到你的客户端

HTTP 报文格式

请求

响应

在 fiddler 抓取到的"请求/响应"列表中需要找到咱们主动触发的这个请求响应

1)看域名

2)看颜色,要表示本次响应是一个HTML 的内容

构成网页的关键部分

一个网页通常是由三个部分构成

1)HTML 网页结构 (骨)

2)CSS 网页样式 (皮) (包括但不限于 颜色, 字体, 对其方式, 位置,边框, ...)

3)JavaScript 网页的交互 (魂) (用户和网页之间的交换方式,点击某个地方,有 xxx效果)

浏览器和服务器之间,就会存在多次这样的 HTTP 交互

其中有的 HTTP 交互会获取到 HTML

有的会获取到 CSS

还有的会获取到 JavaScript

还有的会获取到一些依赖的资源(图片,视频,音频,字体..)

通过直接点击刷新按键,很有可能是看不到获取CSS/JS这样的HTTP 交互的(浏览器带有缓存)

一个计算机,访问存储设备的速度

1)CPU 寄存器

2)内存

3)硬盘

4)网络(不绝对,万兆网卡,大概率是比硬盘快的...家用的设备一把是没有这种的)

搜狗的主页,要想能够正确的显示,就需要把 HTML CSS JS 这些内容都加载出来,页面才可以正确显示...

为了优化上述的加载速度,引入了"浏览器缓存"

第一次访问搜狗,会把上述的所有资源都加载(CSS,JS,图片..保存到浏览器所在的机器的硬盘上),后面在访问搜狗的时候,只从服务器获取 html 即可,CSS,JS 直接用上次获取过的

通过 ctrl + 点击刷新按钮/ctrl + F5 都会触发"全量获取数据",忽略本地的缓存,从服务器获取到完整的数据

HTTP 请求格式

1.首行(请求的第一行)

2.请求头(header)从第二行开始,往后若干

3.空行(请求头结束的标记)

4.请求正文(body)(有的请求有,有的请求没有)

HTTP 响应,可能被压缩的

本来是文本,压缩了就变成二进制了,网络通信的过程中,最贵的就是网络带宽

直接把原始数据进行传输,比较大,消耗的网络带宽就多了,可以把数据进行压缩,压缩之后数据就变少了,通过网络传输的内容就少了,数据到达对端在通过 cpu 来继续解压缩,(压缩和解压缩是通过一系列算法来进行的)

HTTP 的响应格式

1.首行

2.响应头(header)

3.空行(响应报头的结束标记)

4.正文(body)(当前的正文部分就包含了网页的 HTML)

URL

唯一的资源定位符,描述了网络上的某个资源的具体位置,需要明确访问网络上的哪个资源

URL 不是给 HTTP 专属使用的,可以搭配很多的网络协议使用

完整的 URL 包含了很多信息,重点关心的主要是四个部分

1)IP

2)端口

3)路径

4)查询字符串

有的只有 IP 地址,其他的好像都没有,没有端口,也没有查询字符串

在一个 URL 中,有一部分是可以省略的

如果没有端口号,浏览器会给一个默认值

一次通信,需要

源 IP (浏览器客户端,端口号,系统分配的空闲端口)

源端口

目的 IP

目的端口(URL 中的端口,描述了你访问的服务器的端口,不是你浏览器客户端的端口)

URL 中的端口如果不写,浏览器会给默认值,根据协议类型确定的

http://  => 端口给 80 (http 服务器的端口号 也是作为"知名端口号")

https://  => 端口给 443 (https 服务器的端口号 也是作为"知名端口号")

带层次的路径也是可以省略的,省略之后,其实是一个 /(表示根目录)访问一个服务器管理资源/目录 中的最顶层的目录/资源 通过就对应着一个网站的主页

query string 本身就不是必须的,都是程序员自行约定的

片段标识符,也可以省略