零、前言
本文记录了笔者在完善网络和HTTP的基础知识的过程,
若笔者有任何疏忽纰漏之处,烦请不吝赐教。
特别说明:由于这部分内容既是前端的基础知识又是后端的基础知识,而笔者主要的方向是后端,故分类于此。
本文会不断的补充、修改和完善,期待您的宝贵意见。
一、互联网是如何工作的?
谁在运营互联网?
没有人经营互联网。它被组织为一个分散的网络网络。
数以千计的公司、大学、政府和其他实体运营自己的网络,并根据自愿互连协议相互交换流量。
- IETF(互联网工程任务组)组织管理了使互联网工作的共享技术标准。
- ICANN(互联网名称与数字地址分配机构)负责分发域名和IP地址(计算机用来在互联网上相互识别的数字),但是并不控制谁可以连接到互联网。
什么是IPv6?
目前的互联网标准,称为IPv4,只允许大约4亿个IP地址。这在1970年代被认为是一个很大的数字,但今天,IPv4地址的供应几乎耗尽。
因此,互联网工程师开发了一种名为IPv6的新标准。IPv6允许数量惊人,确切的数字是39位数,确保几乎永远不会再耗尽。
具体的结构等细节这里不展开叙述。
无线互联网如何工作?
无线互联网有两种基本类型:
- WIFI:任何人都可以购买WIFI网络设备,为了防止互相干扰,WIFI网络的功率和范围有严格的限制;
- 蜂窝:更加集中,通过将服务区域分解为单元来工作,单元小到一个街区,大到数英里宽,每个单元的重心都有一个塔来提供服务,当设备从一个小区移动到另一个小区时,网络会自动将设备从一个塔转移到另一个塔,允许用户继续通信而不会中断。蜂窝网络使用许可用于其专用的频谱,由于该频谱稀缺,因此通常通过拍卖授予。
什么是云?
云描述了一种在 2000 年代初流行的计算方法。通过将文件存储在服务器上并通过互联网交付软件,云计算为用户提供了更简单、更可靠的计算体验。
什么是数据包?
数据包是通过互联网传输的信息的基本单位。将信息拆分成小的、可消化的部分可以更有效地利用网络的容量。
数据包的组成:
- 标头:包含帮助数据包到达其目标的信息,包括数据包的长度、源和目标,以及帮助接收方检测数据包在传输过程中是否损坏的校验和值。
- 实际数据:一个数据包最多可以包含 64 KB 的数据,大约是 20 页的纯文本。
此外,如果互联网路由器遇到拥塞或其他技术问题,则可以通过简单地丢弃数据包来处理它。发送计算机负责检测数据包未到达其目标并发送另一个副本。这种方法似乎违反直觉,但它简化了互联网的核心基础设施,以更低的成本实现更高的性能。
什么是SSL?
SSL是Secure Sockets Layer安全套接字层的缩写,是一系列加密技术,允许Web用户保护他们通过Internet传输的信息的隐私。
当您访问安全网站时,您会在 URL 旁边看到一个锁,表示您与该网站的通信已加密。
该锁应该表明第三方将无法读取您发送或接收的任何信息。在后台,SSL通过将您的数据转换为只有收件人知道如何破译的编码消息来实现这一点。如果恶意方正在监听对话,它只会看到看似随机的字符串,而不会看到您的电子邮件、Facebook 帖子、信用卡号或其他私人信息的内容。
什么是域名系统?
域名系统DNS是您可以通过在浏览器中键入github.com而不是难以记住的数字地址,如216.148.41.12来访问网页的原因。
域名系统由位于加利福尼亚州的非营利组织ICANN 管理。ICANN成立于1998年。它被美国商务部授予对DNS的权力,尽管它越来越多地声称自己独立于美国政府。
有两种类型的域名。第一个是通用顶级域 (gTLD),例如 .com、.edu、.org 和 .gov。由于互联网起源于美国,因此这些域名往往在那里最受欢迎。这些域的权限通常委托给私人组织。
还有国家代码顶级域 (ccTLD)。世界上每个国家都有自己的 2 个字母代码。例如,美国的 ccTLD 是 .us,英国的 ccTLD 是 .uk,中国的 ccTLD 是 .cn。这些域名由每个国家/地区的当局管理。一些 ccTLD,如 .tv(代表岛国图瓦卢)和 .io(英属印度洋领地),在本国以外的地方很受欢迎。
二、HTTP是什么?
HTTP概述
一句话解释:HTTP 是用于获取 HTML 文档等资源的协议。
它是 Web 上任何数据交换的基础,它是一种客户端-服务器协议,这意味着请求由接收者(通常是 Web 浏览器)发起。 从获取的不同子文档(例如文本、布局描述、图像、视频、脚本等)重建完整的文档。
客户端和服务器通过交换单个消息(而不是数据流)进行通信。
- 客户端(通常是 Web 浏览器)发送的消息称为请求;
- 服务器作为应答发送的消息称为响应。
协议是定义如何在计算机内部或计算机之间交换数据的规则系统。设备之间的通信要求设备就正在交换的数据的格式达成一致。定义格式的规则集称为协议。
基于HTTP的系统组件
HTTP是一种客户端-服务器协议:请求由一个实体发送,即用户代理(或代表它的代理)。 大多数情况下,用户代理是一个Web浏览器,但它可以是任何东西。
每个单独的请求都发送到服务器,服务器处理它并提供称为响应的答案。
在客户端和服务器之间有许多实体,统称为代理Proxy,例如,它们执行不同的操作并充当网关or缓存Cache。
实际上,浏览器和处理请求的服务器之间有更多的计算机:有路由器、调制解调器等。 由于Web的分层设计,这些隐藏在网络和传输层中。 HTTP位于应用程序层的顶部。 虽然对于诊断网络问题很重要,但底层大多与 HTTP 的描述无关。
Proxy:
代理服务器是在互联网的不同网络中导航时使用的中间程序或计算机。它们有助于访问万维网上的内容。
代理拦截请求并提供回响应;它可以转发或不转发请求(例如在缓存的情况下),并且可以修改请求(例如,在两个网络之间的边界处更改其标头)。
代理可以位于用户的本地计算机上,也可以位于用户计算机和 Internet 上的目标服务器之间的任何位置。通常有两种主要类型的代理服务器:由于 Web 堆栈的分层结构,其中大多数在传输、网络或物理级别运行,在 HTTP 层变得透明,并可能对性能产生重大影响。
- 处理来自和发送到互联网上任何位置的请求的转发代理。
- 一种反向代理,从 Internet 接收请求并将其转发到内部网络中的服务器。
代理的功能:
- 缓存(缓存可以是公共的或私有的,就像浏览器缓存一样)
- 过滤(如防病毒扫描或家长控制)
- 负载平衡(允许多个服务器为不同的请求提供服务)
- 身份验证(控制对不同资源的访问)
- 日志记录(允许存储历史信息)
Cache:
缓存(Web 缓存或 HTTP 缓存)是临时存储 HTTP 响应的组件,以便只要满足某些条件,就可以将其用于后续 HTTP 请求。
客户端:用户代理
用户代理是代表用户执行操作的任何工具。
浏览器始终是发起请求的实体,它从来都不是服务器。
网络服务器
通信通道的另一端是服务器,它根据客户端的请求提供文档。 服务器实际上仅显示为一台计算机;
但它实际上可能是共享负载(负载平衡)的服务器的集合,或者是询问其他计算机(如缓存、数据库服务器或电子商务服务器)的复杂软件。
HTTP的基本方面
1. HTTP是可扩展的
HTTP / 1.0中引入的HTTP标头使该协议易于扩展和试验。 新功能甚至可以通过客户端和服务器之间关于新标头语义的简单协议来引入。
2. HTTP是无状态的,但不是无会话的
-
无状态的:在同一连接上连续执行的两个请求之间没有链接。
具体来说,HTTP是无状态的意味着从客户端到服务器的每个请求都被视为一个独立的事务,不知道之前的任何请求。这意味着服务器不存储客户端的会话信息,也不保留任何来自该客户端的先前请求的内存。客户端负责维护状态,如果有必要,可以在每个请求中向服务器发送信息,例如身份验证凭据或会话ID。这种设计在可扩展性和可靠性方面非常有用,因为它允许服务器独立处理每个请求,并确保在服务器出现故障时不会丢失会话数据。
-
有状态会话:HTTP cookie允许使用有状态会话。 使用标头可扩展性,HTTP Cookie 将添加到工作流中,从而允许在每个 HTTP 请求上创建会话以共享相同的上下文或相同的状态。
3. HTTP和连接
连接在传输层进行控制,因此从根本上超出了 HTTP 的范围。
HTTP 不要求基础传输协议基于连接;它只要求它是可靠的,或者不丢失消息。
在互联网上最常见的两种传输协议中,TCP是可靠的,UDP不是。 因此,HTTP依赖于基于连接的TCP标准。
HTTP可以控制什么?
- 缓存: 文档的缓存方式可以通过 HTTP 控制。 服务器可以指示代理和客户端缓存什么以及缓存多长时间。 客户端可以指示中间缓存代理忽略存储的文档。
- 放宽原点约束: 为了防止窥探和其他隐私侵犯,Web 浏览器强制在网站之间严格隔离。 只有来自同一来源的页面才能访问网页的所有信息。 虽然这样的约束对服务器来说是一种负担,但 HTTP 标头可以放松服务器端的这种严格分离,允许文档成为来自不同域的信息的拼凑;这样做甚至可能有与安全相关的原因。
- 身份验证: 某些页面可能受到保护,以便只有特定用户才能访问它们。 基本身份验证可以通过 HTTP 提供,可以使用 WWW-Authenticate 和类似的标头,也可以通过使用 HTTP cookie 设置特定会话来提供。
- 代理和隧道: 服务器或客户端通常位于 Intranet 上,对其他计算机隐藏其真实 IP 地址。 然后,HTTP 请求通过代理来跨越此网络屏障。 并非所有代理都是 HTTP 代理。 例如,SOCKS协议在较低级别运行。 其他协议(如 ftp)可以由这些代理处理。
- 会议: 使用 HTTP Cookie 允许您将请求与服务器的状态相关联。 这会创建会话,尽管基本的HTTP是无状态协议。 这不仅对电子商务购物篮有用,而且对允许用户配置输出的任何站点也很有用。
HTTP流
当客户端想要与服务器,也可能是中间代理通信时,它会执行以下步骤:
-
打开 TCP 连接:
TCP 连接用于发送一个或多个请求并接收应答。 客户端可以打开新连接、重用现有连接或打开与服务器的多个 TCP 连接。
-
发送HTTP消息:
HTTP消息(在HTTP / 2之前)是人类可读的。 使用HTTP / 2,这些简单的消息被封装在框架中,使它们无法直接读取,但原理保持不变。
一个例子:
GET / HTTP/1.1 Host: developer.mozilla.org Accept-Language: fr -
读取服务器发送的响应
一个例子:
HTTP/1.1 200 OK Date: Sat, 09 Oct 2010 14:28:02 GMT Server: Apache Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT ETag: "51142bc1-7449-479b075b2891b" Accept-Ranges: bytes Content-Length: 29769 Content-Type: text/html <!DOCTYPE html>… (here come the 29769 bytes of the requested web page) -
关闭或重新使用连接以处理进一步的请求
HTTP消息
有两种类型的 HTTP 消息:请求和响应,每种都有自己的格式。
请求:
响应:
总结:
HTTP 是一种易于使用的可扩展协议。
客户端-服务器结构与添加标头的能力相结合,允许HTTP随着Web的扩展功能而发展。