
在Web 浏览器根据地址栏中指定的 URL,从 Web 服务器端获取文件资源(resource)等信息,返回浏览器中,由浏览器解析返回的信息,渲染出我们看到的 Web 页面。
像这种通过发送请求获取服务器资源的都可称为客户端(client),包括但不限于浏览器。
在这个访问的过程中,使用了HTTP传输协议来处理传输的信息。

HTTP(HyperText Transfer Protocol)是一种超文本传输协议,Web以该协议作为规范,完成从客户端到服务器端等一系列运作处理。可以说,Web 是建立在 HTTP 协议上通信的。
超文本:
超文本也是一种文本,传统文本主要是线性方式组织的,而超文本是非线性方式进行组织的,可以将各种不同空间的文字信息组织在一起,形成区别于传统文本的网状结构的文本。
因特网起源于 美苏冷战时期 美国的阿帕网(ARPANET ),起初目的是美国为了保证在遭受苏联核打击后,仍然具有一定的生存和反击能力, 于是认为有必要设计出一种分散的指挥系统:它由一个个分散的 指挥点组成,当部分指挥点被摧毁后,其它点仍能正常工作, 并且这些点之间,能够绕过那些已被摧毁的指挥点而继续保持联系。这是因特网的设想雏形。
三者之间的关系:互联网包含因特网,因特网包含万维网。即
互联网>因特网>万维网。
这其实是一个概念排序,如果按照一定的量化指标来排个人认为应该是因特网>万维网>互联网。
为啥这样说?
- 互联网本质上是指由通信的设备,如计算机、手机等,组成的网络,就是局域网!一堆硬件设备不管你通过什么协议用什么方法(网线电线还是什么东西)连接起来形成一个互联通路,就能称为互联网。
- 因特网是基于互联网的联网,它是把多个互联网(局域网)连起来的一个公网,表面上是一个软网概念,但是它也是要基于硬件去实现,而且因特网的每个节点(互联网)的基础终端就是一堆硬件设备,所以说因特网是一个软硬件结合集合,它的量化规模一定是比它的单个节点(互联网)大的。
- 万维网则是基于因特网实现的多媒体应用网络,凡是使用
HTTP协议的网络都是万维网,但是因为它生长在因特网之上,所以它的量化规模比因特网小,至于和互联网比规模大小则需要用具体的量化指标才能比较。
1989 年 3 月,当时的互联网还只属于少数人,欧洲核子研究组织的蒂姆 • 伯纳斯 - 李(Tim Berners Lee)博士提出了一种 能让远隔两地的研究者们共享知识 的设想(万维网的奠基思想)。
最初设想的基本理念是:借助多文档之间相互关联形成的超文本(HyperText),连成可相互参阅文档的互联网WWW(万维网)。于是提出了 3 项 WWW 构建技术,分别是:
SGML(Standard Generalized Markup Language)的超文本标记语言HTML(HyperText Markup Language,)作为页面的文本标记语言 ;HTTP协议 );URL(Uniform Resource Locator,)概念,用来指定文档所在地址 。 也就是说。其实HTML、HTTP、URL、WWW等都是与万维网相关的概念。

万维网制定的标准是一个叫做万维网联盟的组织。万维网联盟,又称W3C理事会。
为了理解 HTTP,有必要事先了解一下 TCP/IP 协议族。
通常使用的网络是在 TCP/IP 协议族的基础上运作的。而 HTTP 属于它内部的一个子集,说人话就是HTTP协议是基于TCP/IP 协议族创建出来的协议。
计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为 协议(protocol)
协议中存在各式各样的内容:从电缆的规格到 IP 地址的选定方法、寻找异地用户的方法、双方建立通信的顺序,以及 Web 页面显示需要处理的步骤,等等。
协议族:多个相关协议的集合。例如
TCP/IP 协议族,它包含了TCP、IP、UDP、Telnet、FTP、SMTP等上百个互为关联的协议,其中TCP和IP是最常用的两种底层协议,所以把它们统称为TCP/IP 协议族。
TCP/IP 协议族按层次分别分为以下 4 层:
FTP(FileDNS(Domain Name System,域名系统)服务就是其中两类。HTTP 协议也处于该层。TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据协议)硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。
利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往应用层往上走。我们用 HTTP 举例来说明,首先作为发送端的客户端在应用层(HTTP 协议)发出一个想看某个 Web 页面的 HTTP 请求。接着,为了传输方便,在传输层(TCP 协议)把从应用层处收到的数据(HTTP 请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。在网络层(IP 协议),增加作为通信目的地的 MAC 地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP请求。

发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。这种把数据信息包装起来的做法称为 封装(encapsulate)。
一个请求的过程:客户端应用程序→网卡→网络→网卡→服务端应用程序
其实本质就是 由 应用层 → 物理层 逐层封装,由 物理层 → 应用层 逐层解封
按层次分,IP (Internet Protocol 网际协议)位于网络层,几乎所有使用网络的系统都会用到 IP 协议。TCP/IP 协议族中的 IP 指的就是网际协议,有人会把IP和IP 地址搞混,IP其实是一种协议的名称。
IP 协议的作用是把各种数据包传送给对方。而要保证确实传送到对方那里,则需要满足各类条件。其中两个重要的条件是 IP 地址和 MAC地址(Media Access Control Address)。
IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址可以和 MAC 地址进行配对。IP 地址可变换,但 MAC地址基本上不会更改。
使用 ARP 协议凭借 MAC 地址进行通信
IP 间的通信依赖 MAC 地址。在网络上,通信的双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。而在进行中转时,会利用下一站中转设备的 MAC 地址来搜索下一个中转目标。这时,会采用 ARP 协议(Address Resolution Protocol)。
ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址。

按层次分,TCP 位于传输层,提供可靠的字节流服务。
所谓的字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。
而可靠的传输服务是指,能够把数据准确可靠地传给对方。一言以蔽之,TCP 协议为了更容易传送大数据才把数据分割,而且 TCP 协议能够确认数据最终是否送达到对方。
如何确保数据能到达目标?
为了准确无误地将数据送达目标处,TCP 协议采用了三次握手(three-way handshaking)策略。用 TCP 协议把数据包送出去后,TCP不会对传送后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中使用了 TCP 的标志(flag)——SYN(synchronize)和 ACK(acknowledgement)。
发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后,回传一个带有 SYN/ACK 标志的数据包以示传达确认信息。最后,发送端再回传一个带 ACK 标志的数据包,代表“握手”结束。
若在握手过程中某个阶段莫名中断,TCP 协议会再次以相同的顺序发送相同的数据包。

在TCP的实现机制中,为了保障传输的可靠性,发送方每发送一个报文,接收方接到之后会回发确认信息;
如果发送端的数据过多或者数据发送速率过快,致使接收端来不及处理,则会造成数据在接收端的丢弃;
为了避免这种现象的发生,通常的处理办法是采用流量控制,即控制发送端发送的数据量及数据发送速率;
流量控制的目的是在接收端有限承受能力的情况下,通过流量约束,减少接收瑞处的数据丢失,提高数据发送效率,充分利用接收端资源;
可变滑动窗口流星控制的基本过程如下:
1、在建立TCP连接阶段,双方协商窗口尺寸,同时接收端预留数据缓冲区;
2、发送瑞根据协商的结果,发送符合窗口尺寸的数据字节流,并等待对方的确认;
3、发送端根据确认信息,改变窗口的尺寸。
注:窗口也就是缓冲区,发送方窗口大小决定了一次可以连续发送多少个数据。
DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址之间的解析服务。计算机既可以被赋予 IP 地址,也可以被赋予主机名和域名。比如www.hackr.jp。
用户通常使用主机名或域名来访问对方的计算机,而不是直接通过IP 地址访问。因为与 IP 地址的一组纯数字相比,用字母配合数字的表示形式来指定计算机名更符合人类的记忆习惯。
但要让计算机去理解名称,相对而言就变得困难了。因为计算机更擅长处理一长串数字。
为了解决上述的问题,DNS 服务应运而生。DNS 协议提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。



与 URI(统一资源标识符)相比,我们更熟悉 URL(Uniform Resource Locator,统一资源定位符)。URL 正是使用 Web 浏览器等访问 Web 页面时需要输入的网页地址。比如,下图的 http://hackr.jp/ 就是 URL。
URI 是 Uniform Resource Identifier 的缩写。RFC2396 分别对这3 个单词进行了如下定义。
Uniform:规定统一的格式可方便处理多种不同类型的资源,而不用根据上下文环境来识别资源指定的访问方式。另外,加入新增的协议方案(如 http: 或 ftp:)也更容易。Resource:资源的定义是“可标识的任何东西”。除了文档文件、图像或服务(例如当天的天气预报)等能够区别于其他类型的,全都可作为资源。另外,资源不仅可以是单一的,也可以是多数的集合体。Identifier:表示可标识的对象。也称为标识符。 综上所述,URI 就是由某个协议方案表示的资源的定位标识符。协议方案是指访问资源所使用的协议类型名称。采 用 HTTP 协 议 时,协议方案就是http。除此之外,还有ftp、mailto、telnet、file等。
URI 用字符串标识某一互联网资源,而 URL 表示资源的地点(互联网上所处的位置)。可见 URL 是 URI 的子集。
RFC3986:统一资源标识符(URI)通用语法”中列举了几种 URI例子,如下所示:
ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.ietf.org/rfc/rfc2396.txt
ldap://[2001:db8::7]/c=GB?objectClass?one
mailto:John.Doe@example.com
news:comp.infosystems.www.servers.unix
tel:+1-816-555-1212
telnet://192.0.2.16:80/
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
表示指定的 URI,要使用涵盖全部必要信息的绝对 URI、绝对 URL以及相对 URL。相对 URL,是指从浏览器中基本 URI 处指定的 URL,形如 /image/logo.gif。
先了解一下绝对 URI 的格式:

http: 或 https: 等协议方案名获取访问资源时要指定协议类型。不区分字母大小写,最后附一个冒号:。也可使用 data: 或 javascript: 这类指定数据或脚本程序的方案名。URI 必须指定待访问的服务器地址。地址可以是类似hackr.jp 这种 DNS 可解析的名称,或是 192.168.1.1 这类 IPv4 地址名,还可以是 [0:0:0:0:0:0:0:1] 这样用方括号括起来的 IPv6 地址名。摘取文档、书籍:
- https://zhuanlan.zhihu.com/p/336912995
- 《图解HTTP》-上野宣注-于均良译-人民邮电出版社