HTTP第二讲——HTTP相关概念

news2025/2/25 3:45:12

与HTTP 相关的各种应用

在这里插入图片描述

1.网络世界

实际的互联网是由许许多多个规模略小的网络连接而成的,这些“小网络”可能是只有几百台电脑的局域网,可能是有几万、几十万
台电脑的广域网,可能是用电缆、光纤构成的固定网络,也可能是用基站、热点构成的移动网络……
互联网世界更像是由数不清的大小岛屿组成的“千岛之国”。
互联网的正式名称是 Internet,里面存储着无穷无尽的信息资源,我们通常所说的“上网”实际上访问的只是互联网的一个子集“万维网”(World Wide Web),它基于 HTTP 协议,传输 HTML 等超文本资源,能力也就被限制在 HTTP 协议之内。
互联网上还有许多万维网之外的资源,例如常用的电子邮件、BT 和 Magnet 点对点下载、FTP 文件下载、SSH 安全登录、各种即时通信服务等等,它们需要用各自的专有协议来访问。
不过由于 HTTP 协议非常灵活、易于扩展,而且“超文本”的表述能力很强,所以很多其他原本不属于 HTTP 的资源也可以“包装”成 HTTP 来访问,这就是我们为什么能够总看到各种“网页应用”——例如“微信网页版”“邮箱网页版”——的原因。综合起来看,现在的互联网 90% 以上的部分都被万维网,也就是 HTTP 所覆盖,所以把互联网约等于万维网或 HTTP 应该也不算大错。

2.浏览器

浏览器的正式名字叫“Web Browser”,顾名思义,就是检索、查看互联网上网页资源的应用程序,名字里的 Web,实际上指的就是“World Wide Web”,也就是万维网。
浏览器本质上是一个 HTTP 协议中的请求方,使用 HTTP 协议获取网络上的各种资源。当然,为了让我们更好地检索查看网页,它还集成了很多额外的功能。浏览器本质上是一个 HTTP 协议中的请求方,使用 HTTP 协议获取网络上的各种资源。当然,为了让我们更好地检索查看网页,它还集成了很多额外的功能。
在 HTTP 协议里,浏览器的角色被称为“User Agent”即“用户代理”,意思是作为访问者的“代理”来发起 HTTP 请求。不过在不引起混淆的情况下,我们通常都简单地称之为“客户端”。

3.Web 服务器

Web 服务器是一个很大也很重要的概念,它是 HTTP 协议里响应请求的主体,通常也把控着绝大多数的网络资源,在网络世界里处于强势地位。
当我们谈到“Web 服务器”时有两个层面的含义:硬件和软件。
硬件含义就是物理形式或“云”形式的机器,在大多数情况下它可能不是一台服务器,而是利用反向代理、负载均衡等技术组成的庞大集群。但从外界看来,它仍然表现为一台机器,但这个形象是“虚拟的”。
软件含义的 Web 服务器可能我们更为关心,它就是提供 Web 服务的应用程序,通常会运行在硬件含义的服务器上。它利用强大的硬件能力响应海量的客户端 HTTP 请求,处理磁盘上的网页、图片等静态文件,或者把请求转发给后面的 Tomcat、Node.js 等业务应用,返回动态的信息。
Web 服务器有:
Apache 是老牌的服务器,到今天已经快 25 年了,功能相当完善,相关的资料很多,学习门槛低,是许多创业者建站的入门产品。
Nginx 是 Web 服务器里的后起之秀,特点是高性能、高稳定,且易于扩展。自 2004 年推出后就不断蚕食 Apache 的市场份额,在高流量的网站里更是不二之选。
此外,还有 Windows 上的 IIS、Java 的 Jetty/Tomcat 等,因为性能不是很高,所以在互联网上应用得较少。

4.CDN

CDN,全称是“Content Delivery Network”,翻译过来就是“内容分发网络”。它应用了HTTP 协议里的缓存和代理技术,代替源站响应客户端的请求。
CDN 有什么好处呢?
简单来说,它可以缓存源站的数据,让浏览器的请求不用“千里迢迢”地到达源站服务器,直接在“半路”就可以获取响应。如果 CDN 的调度算法很优秀,更可以找到离用户最近的节点,大幅度缩短响应时间。
CDN 也是现在互联网中的一项重要基础设施,除了基本的网络加速外,还提供负载均衡、安全防护、边缘计算、跨运营商网络等功能,能够成倍地“放大”源站服务器的服务能力,很多云服务商都把 CDN 作为产品的一部分。

5.爬虫

前面说到过浏览器,它是一种用户代理,代替我们访问互联网。
但 HTTP 协议并没有规定用户代理后面必须是“真正的人类”,它也完全可以是“机器人”,这些“机器人”的正式名称就叫做“爬虫”(Crawler),实际上是一种可以自动访问 Web资源的应用程序。
“爬虫”这个名字非常形象,它们就像是一只只不知疲倦的、辛勤的蚂蚁,在无边无际的网络上爬来爬去,不停地在网站间奔走,搜集抓取各种信息。
据估计,互联网上至少有 50% 的流量都是由爬虫产生的,某些特定领域的比例还会更高,也就是说,如果你的网站今天的访问量是十万,那么里面至少有五六万是爬虫机器人,而不是真实的用户。
爬虫是怎么来的呢?
绝大多数是由各大搜索引擎“放”出来的,抓取网页存入庞大的数据库,再建立关键字索引,这样我们才能够在搜索引擎中快速地搜索到互联网角落里的页面。

6.HTML/WebService/WAF

HTML 是 HTTP 协议传输的主要内容之一,它描述了超文本页面,用各种“标签”定义文字、图片等资源和排版布局,最终由浏览器“渲染”出可视化页面。
HTML 目前有两个主要的标准,HTML4 和 HTML5。广义上的 HTML 通常是指 HTML、JavaScript、CSS 等前端技术的组合,能够实现比传统静态页面更丰富的动态页面。

Web Service 是一种由 W3C 定义的应用服务开发规范,使用 client-server 主从架构,通常使用 WSDL 定义服务接口,使用 HTTP 协议传输 XML 或 SOAP 消息,也就是说,它是一个
基于 Web(HTTP)的服务架构技术,既可以运行在内网,也可以在适当保护后运行在外网。
WAF 是近几年比较“火”的一个词,意思是“网络应用防火墙”。与硬件“防火墙”类似,它是应用层面的“防火墙”,专门检测 HTTP 流量,是防护 Web 应用的安全技术。WAF 通常位于 Web 服务器之前,可以阻止如 SQL 注入、跨站脚本等攻击,目前应用较多的
一个开源项目是 ModSecurity,它能够完全集成进 Apache 或 Nginx。

较偏向于理论的各种 HTTP 相关协议

在这里插入图片描述

1.TCP/IP

TCP/IP 协议实际上是一系列网络通信协议的统称,其中最核心的两个协议是 TCP 和 IP,其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂但有层次的协议栈。
这个协议栈有四层,最上层是“应用层”,最下层是“链接层”,TCP 和 IP 则在中间:TCP属于“传输层”,IP 属于“网际层”。
IP 协议是“Internet Protocol”的缩写,主要目的是解决寻址和路由问题,以及如何在两点间传送数据包。IP 协议使用“IP 地址”的概念来定位互联网上的每一台计算机。可以对比一下现实中的电话系统,你拿着的手机相当于互联网上的计算机,而要打电话就必须接入电话网,由通信公司给你分配一个号码,这个号码就相当于 IP 地址。

TCP 协议是“Transmission Control Protocol”的缩写,意思是“传输控制协议”,它位于IP 协议之上,基于 IP 协议提供可靠的、字节流形式的通信,是 HTTP 协议得以实现的基础。
TCP 协议是“Transmission Control Protocol”的缩写,意思是“传输控制协议”,它位于IP 协议之上,基于 IP 协议提供可靠的、字节流形式的通信,是 HTTP 协议得以实现的基础。

HTTP 是一个"传输协议",但它不关心寻址、路由、数据完整性等
传输细节,而要求这些工作都由下层来处理。因为互联网上最流行的是 TCP/IP 协议,而它刚好满足 HTTP 的要求,所以互联网上的 HTTP 协议就运行在了 TCP/IP 上,HTTP 也就可以更准确地称为“HTTP over TCP/IP”。

2.DNS

在 TCP/IP 协议中使用 IP 地址来标识计算机,数字形式的地址对于计算机来说是方便了,但对于人类来说却既难以记忆又难以输入。
于是“域名系统”(Domain Name System)出现了,用有意义的名字来作为 IP 地址的等价替代。设想一下,你是愿意记“95.211.80.227”这样枯燥的数字,还是“nginx.org”这样的词组呢?
在 DNS 中,“域名”(Domain Name)又称为“主机名”(Host),为了更好地标记不同国家或组织的主机,让名字更好记,所以被设计成了一个有层次的结构。
域名用“.”分隔成多个单词,级别从左到右逐级升高,最右边的被称为“顶级域名”。对于顶级域名,可能你随口就能说出几个,例如表示商业公司的“com”、表示教育机构的“edu”,表示国家的“cn”“uk”等。
但想要使用 TCP/IP 协议来通信仍然要使用 IP 地址,所以需要把域名做一个转换,“映射”到它的真实 IP,这就是所谓的“域名解析”。
继续用刚才的打电话做个比喻,你想要打电话给小明,但不知道电话号码,就得在手机里的号码簿里一项一项地找,直到找到小明那一条记录,然后才能查到号码。这里的“小明”就相当于域名,而“电话号码”就相当于 IP 地址,这个查找的过程就是域名解析。

HTTP 协议中并没有明确要求必须使用 DNS,但实际上为了方便访问互联网上的 Web 服务器,通常都会使用 DNS 来定位或标记主机名,间接地把 DNS 与 HTTP 绑在了一起。

3.URI/URL

URI(Uniform Resource Identifier),中文名称是 统一资源标识符,使用它就能够唯一地标记互联网上资源。
URI 另一个更常用的表现形式是 URL(Uniform Resource Locator), 统一资源定位符,也就是我们俗称的“网址”,它实际上是 URI 的一个子集,不过因为这两者几乎是相同的,差异不大,所以通常不会做严格的区分。
拿 Nginx 网站来举例,看一下 URI 是什么样子的。

http://nginx.org/en/download.html

URI 主要有三个基本的部分构成:
(1)协议名:即访问该资源应当使用的协议,在这里是“http”;
(2)主机名:即互联网上主机的标记,可以是域名或 IP 地址,在这里是“nginx.org”;
(3)路径:即资源在主机上的位置,使用“/”分隔多级目录,在这里是“/en/download.html”。
还是用打电话来做比喻,你通过电话簿找到了小明,让他把昨天做好的宣传文案快递过来。那么这个过程中你就完成了一次 URI 资源访问,“小明”就是“主机名”,“昨天做好的宣传文案”就是“路径”,而“快递”,就是你要访问这个资源的“协议名”。

4.HTTPS

HTTPS ,它的全称是“HTTP over SSL/TLS”,也就是运行在 SSL/TLS 协议上的 HTTP。
注意它的名字,这里是 SSL/TLS,而不是 TCP/IP,它是一个负责加密通信的安全协议,建立在 TCP/IP 之上,所以也是个可靠的传输协议,可以被用作 HTTP 的下层。
SSL 的全称是“Secure Socket Layer”,由网景公司发明,当发展到 3.0 时被标准化,改名为 TLS,即“Transport Layer Security”,但由于历史的原因还是有很多人称之为SSL/TLS,或者直接简称为 SSL。
SSL 使用了许多密码学最先进的研究成果,综合了对称加密、非对称加密、摘要算法、数字签名、数字证书等技术,能够在不安全的环境中为通信的双方创建出一个秘密的、安全的传输通道,为 HTTP 套上一副坚固的盔甲。
你可以在今后上网时留心看一下浏览器地址栏,如果有一个小锁头标志,那就表明网站启用了安全的 HTTPS 协议,而 URI 里的协议名,也从“http”变成了“https”。

5.代理

代理(Proxy)是 HTTP 协议中请求方和应答方中间的一个环节,作为“中转站”,既可以转发客户端的请求,也可以转发服务器的应答。
代理有很多的种类,常见的有:
(1) 匿名代理:完全“隐匿”了被代理的机器,外界看到的只是代理服务器;
(2)透明代理:顾名思义,它在传输过程中是“透明开放”的,外界既知道代理,也知道客户端;
(3)正向代理:靠近客户端,代表客户端向服务器发送请求;
(4)反向代理:靠近服务器端,代表服务器响应客户端的请求;
由于代理在传输过程中插入了一个“中间层”,所以可以在这个环节做很多有意思的事情,比如:
(1) 负载均衡:把访问请求均匀分散到多台机器,实现访问集群化;
(2)内容缓存:暂存上下行的数据,减轻后端的压力;
(3)安全防护:隐匿 IP, 使用 WAF 等工具抵御网络攻击,保护被代理的机器;
(4)数据处理:提供压缩、加密等额外的功能。

小结

1.互联网上绝大部分资源都使用 HTTP 协议传输;
2.浏览器是 HTTP 协议里的请求方,即 User Agent;
3.服务器是 HTTP 协议里的应答方,常用的有 Apache 和 Nginx;
4.CDN 位于浏览器和服务器之间,主要起到缓存加速的作用;
5.爬虫是另一类 User Agent,是自动访问网络资源的程序。
6.TCP/IP 是网络世界最常用的协议,HTTP 通常运行在 TCP/IP 提供的可靠传输基础上;
7.DNS 域名是 IP 地址的等价替代,需要用域名解析实现到 IP 地址的映射;
8.URI 是用来标记互联网上资源的一个名字,由“协议名 + 主机名 + 路径”构成,俗称URL;
9.HTTPS 相当于“HTTP+SSL/TLS+TCP/IP”,为 HTTP 套了一个安全的外壳;
10.代理是 HTTP 传输过程中的“中转站”,可以实现缓存加速、负载均衡等功能。

PS:本文是观看极客之后的笔记。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/483208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL之SQL索引

文章目录 一、索引概述介绍演示优缺点 二、索引结构二叉树B-Tree (多路平衡查找树)BTreeHash 三、索引分类四、索引语法五、SQL性能分析SQL执行频率慢查询日志profile详情 索引使用原则验证索引效率最左前缀法则索引列运算字符串不加引号模糊查询or连接的条件数据分布影响 .SQL…

[LeetCode周赛复盘] 第 103 场双周赛20230429

[LeetCode周赛复盘] 第 103 场双周赛20230429 一、本周周赛总结2656. K 个元素的最大和1. 题目描述2. 思路分析3. 代码实现 2657. 找到两个数组的前缀公共数组1. 题目描述2. 思路分析3. 代码实现 2658. 网格图中鱼的最大数目1. 题目描述2. 思路分析3. 代码实现 2659. 将数组清…

二分(整数二分 浮点数二分)

目录 一、整数二分 模板 右边界二分查找(左开右闭) 左边界二分查找(左闭右开) 应用 数的范围 二、浮点数的二分 模板 应用 算术平方根 三、习题 1.数的三次方根 一、整数二分 tip:满足单调性的数组一定可以…

【Linux】进程优先级 + 环境变量

文章目录 📖 前言1. 进程优先级1.1 什么是优先级:1.2 如何修改优先级: 2. 进程的其他概念2.1 竞争性与独立性:2.2 并行与并发:2.3 进程间优先级的体现:2.4 O(1) 调度算法:2.4 进程上下文&#x…

C语言进阶——数据在内存中的存储,你知道吗?

今天我们深度剖析数据在内存中的存储: 重点知识: 1、数据类型详细介绍 2、整形在内存中的存储:原码、反码、补码 3、大小端字节序介绍及判断 4、浮点型在内存中的存储解析 之前我们涉及关于这一部分的知识只是大致的进行讲解&#xff0…

网络编程:UDP socket

文章目录 阅读前导 服务端定义日志框架成员属性服务端框架 初始化服务器创建套接字绑定 运行服务端读取数据参数解读 处理数据向客户端发送响应数据关闭文件描述符 客户端定义创建套接字绑定发送数据接收服务器的响应数据关闭文件描述符 测试1本地环回作用 本地测试netstat 指令…

继续科普:ChatGPT 最新写论文使用方法

这两天发现了几个国内就能用的ChatGPT,不需要魔法! 给大家推荐两种方法,大家自行选择: 1、电脑端安装VSCode软件,使用GPT插件: 优点: 无需魔法、无需付费、软件简单易用(稍懂电脑就会用) 缺点: ① 只支持电脑端,不支持手机:软件安装虽简单,但不一定所有人都…

行业常识_RFID

文章目录 1 RF2 RFID2.1 RFID的应用场景2.2 RFID工作原理 1 RF RF,是Radio Frequency的缩写, Radio,n. 收音机;无线电通讯; v. 用无线电通讯(或发送消息) Frequency,n. 频率 RF中文…

electron+vue3全家桶+vite项目搭建【16】electron多窗口,pinia状态无法同步更新问题解决

文章目录 引入实现效果展示问题展示解决方案思路整理1.主进程添加handle2.编写pinia插件3.完善pinia插件4.最终实现效果 引入 pinia是vue3官方支持的全局状态管理工具,简单易用,但是electron的多窗口虽然加载的页面是单个路由,但其实已经是另…

【全网首发开源教程】【Labview机器人仿真与控制】Labview与Solidworks多路支配关系-四足爬行机器人仿真与控制

🎉欢迎来到Labview专栏~四足爬行机器人仿真与控制 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒🍹 ✨博客主页:小夏与酒的博客 🎈该系列文章专栏:Labview-3D虚拟平台 文章作者技术和水平有限,如果文中出现错误&#…

【python】keras包:深度学习

Part 0. 环境配置 与 学习数据下载 keras包 与 tensorflow包 WinR ,输入指令: pip install tensorflow pip install keras 推荐镜像:-i https://pypi.tuna.tsinghua.edu.cn/simple/ 关于包 keras包相当于是 tensflow 包的前端 tensflow包…

15 | Qt的自定义信号

1 前提 Qt 5.14.2 2 具体操作 2.1 自定义信号 2.1.1 UI界面设置 2.1.1.1 widget.ui 2.1.1.2 setdialog.ui 2.1.2 headers 2.1.2.1 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui {class Widget; } QT_END_NAMESP…

105-Linux_Libevent库的安装与使用

文章目录 一.Libevent 概述1.Libevent的特点2.Libevent使用模型3.Libevent 支持的事件类型 二.Libevent的安装三.Libevent简单使用实例 一.Libevent 概述 Libevent 是开源社区的一款高性能的 I/O 框架库&#xff0c;使用 Libevent 的著名案例有&#xff1a;高性能的分布式内存…

操作系统之死锁处理策略

概念 一、什么是死锁 哲学家进程问题中&#xff0c;都在等待另外的哲学家放弃另一只筷子&#xff0c;造成了都不能用餐的现象&#xff0c;互相等待对方的资源 二、死锁、饥饿、死循环区别 三、死锁产生的条件 1、互斥条件 只有对互斥使用的资源的争抢才能导致死锁&#xff0…

shell编程、makefile学习笔记

windows :\r\n linux:\n 1.shell介绍 1.1、shell是操作系统的终端命令行 (1)shell可以理解为软件系统提供给用户操作的命令行界面&#xff0c;可以说它是人机交互的一种方式。 (2)我们可以使用shell和操作系统、uboot等软件系统进行交互。具体来说就是我们通过shell给软件…

【SpringBoot 应用打包与部署】

SpringBoot 应用打包与部署 笔记记录 1. Jar包方式打包与部署1.1 添加maven打包插件1.2 双击package打包成功1.3 IDEA中运行jar文件 2. War包方式打包与部署2.1 声明打包方式为War包2.2 双击package2.3 将打包好的war包放在Tomcat的webapps目录下 1. Jar包方式打包与部署 1.1 …

嵌入式开发--无刷电机学习4--SVPWM

SVPWM空间矢量脉宽调节 这张图是基于α和β坐标系&#xff0c;也就是定子磁场坐标系&#xff0c;图中的Uout就是定子磁场的空间矢量&#xff0c;它的角度表示定子线圈产生磁场的方向&#xff0c;长度表示磁场的强度&#xff0c;以电机匀速旋转为例&#xff0c;FOC控制的目标就是…

【Java】抽象类接口Object类

目录 1.抽象类 2.接口 2.1实现多个接口 2.2接口之间的关系 2.3接口使用实例 2.3.1Comparable接口 2.3.2Comparator接口 2.3.2Clone接口 2.4抽象类与接口的区别 3.Object类 3.1getClass方法 3.2equals方法 3.3hashcode方法 1.抽象类 定义&#xff1a;抽象方法&…

[Cursor Tool] 面向编程的ChatGPT工具的入门使用指南

文章目录 0. 面向编程的ChatGPT工具的入门使用指南1. Cursor的下载和安装2. Cursor的基本功能的使用2.1 关于Cursor的Chat模式2.2 关于Cursor的Edit模式 3 关于Cursor的项目级应用4 使用Cursor帮助我们从项目的设计出发来为我们提供建议 0. 面向编程的ChatGPT工具的入门使用指南…

车载软件架构——闲聊几句AUTOSAR BSW(三)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 我特别喜欢一个老话,来都来了。我觉得这就是松弛感,既然来了,就开心起来吧!松弛感来自于专注,焦虑不是靠克服的,是靠忘记的,当你很专注做一件事的时候…