【HTTP图解】1-了解Web及网络图解
HTTP的诞生
诞生
成长
HTTP
网络基础TCP/IP
TCP/IP协议族
TCP/IP的分层管理
TCP/IP通信传输流
与HTTP关系密切的协议
IP协议
TCP协议
负责域名解析的DNS服务
各种协议与HTTP协议的关系
URI和URL
URI格式
了解HTTP协议访问Web
Web使用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务器端等一系列运作流程。而协议是指规则的约定。可以说,Web是建立在HTTP协议上通信的。
HTTP的诞生
诞生
- 诞生原因:共享知识
- 基本理念:借助超文本,连成WWW(World Wide Web,万维网)
- 构建技术:HTML、HTTP、URL(Uniform Resource Locator,统一资源定位符)
成长
- 1990.11——CERN成功研发了世界上第一台Web服务器和Web浏览器
- 1994.12——网景发布Netscape Navigator 1.0
- 1995——微软发布Internet Explorer 1.0 和2.0
- 紧随其后,Web服务器标准之一的Apache以0.2的姿态出现,HTML也发布了2.0版本
- 2004——Mozilla基金会发布了Firefox浏览器
HTTP
- 0.9——1990年问世,并没有称为正式的标准被建立,含有1.0之前版本的意思
- 1.0——1996年5月,初期标准,仍在使用
- 1.1——1997年1月,目前主流
- 2.0——2015年5月以RFC 7540正式发表,2015年底多数主流浏览器支持了该协议。
作为Web文档传输协议的HTTP,版本更新的次数非常少。
网络基础TCP/IP
为了理解HTTP,需要先了解TCP/IP协议族。
TCP/IP协议族
计算机与网络设备要相互通信,双方就必须基于相同的方法。这种通信规则称为协议(protocol)。
协议中存在各种各样的内容,从电缆的规格到IP地址的选定方法、寻找异地用户的方法、双方建立通信的顺序,以及Web页面显示需要处理的步骤,等等。
一般来说,TCP/IP是协议族的统称。
TCP/IP的分层管理
- 应用层:决定了向用户提供应用服务时通信的活动,FTP、DNS、HTTP等
- 传输层:对上层应用层提供数据传输,TCP、UDP
- 网络层:网络层用来处理在网络上流动的数据包(数据包是网络传输的最小数据单位)。该层规定了通过怎样的路径到达对方计算机,并把数据包传送到对方。作用就是在众多的选项内选择一条传输路线。
- 数据链路层(链路层、网络接口层):用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC、及光纤等物理可见部分。硬件上的范畴均在链路层的作用范围之内。
分层的好处:设计好各层之间的接口,每个层次内部的设计就能够自由改动了,便于维护。
分成七层还是四层还是五层?
TCP/IP通信传输流
用HTTP举例来说明,首先作为发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求。
接着,为了传输方便,在传输层(TCP协议)把从应用层收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记符号及端口号(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。
在网络层(IP协议),增加作为通信目的地的MAC地址后转发给链路层。
在接收的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才算真正接收到客户端发送过来的HTTP请求。
发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。这种把数据信息包装起来的做法称为封装(encapsulate)。
与HTTP关系密切的协议
IP协议
Internet Protocol 网际协议位于网络层。几乎所有使用网络的系统都会使用IP协议,非常重要。
IP的作用:把各种数据包传送给对方。确保确实传送到对方那里,则需要满足各类条件,其中两个重要的条件是IP地址和MAC地址(Media Access Control Address)。
IP地址指明了节点被分配到的地址,MAC地址指网卡所属的固定地址。IP地址可以和MAC地址进行配对。IP地址可换,但MAC地址基本不会更改。
IP间的通信依赖MAC地址,在网络上,通信的双方通常是经过多台计算机和网络设备中专才能连接对方。而在进行中转时,会利用下一站中转设备的MAC地址来搜索下一个中转目标。这时会采用ARP协议(Address Resolution Protocol)。ARP是一种用以解析地址的协议,根据通信方的IP地址就可以反查出对应的MAC地址。
TCP协议
Transmission Control Protocol 位于传输层,提供可靠的字节流服务。
- 字节流服务:为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理。
- 可靠的传输服务:能够把数据准确可靠地传给对方。
为了准确无误地将数据传送到目标处,TCP协议采用了三次握手(three-way handshaking)策略。握手过程中使用了TCP的标志——SYN(synchronize)和ACK(acknowledgement)。
为什么采用三次握手?而不是两次握手或者四次握手?
TCP既要保证数据可靠性传输,又要提高传输的效率,而三次恰恰可以满足以上两方面的需求。
比如说A和B进行TCP连接,保证建立连接成功的条件是:
- A 知道自己能够给 B 发数据
- B 知道自己能够给 A 发数据
A 怎么知道自己成功将数据发送到 B 了呢?A 通过比较A.Seq是否和接收到的B.Ack相差 1.
两次握手,服务端不能确定服务端是否能向客户端发送数据
四次握手,能满足需求,但是比三次握手浪费带宽。
负责域名解析的DNS服务
DNS(Domain Name System)位于应用层,它提供域名到IP地址之间的解析服务。
各种协议与HTTP协议的关系
URI和URL
URI: Uniform Resource Identifier 统一资源标识符
URL: Uniform Resource Locator 统一资源定位符
- Uniform:规定统一的格式可方便处理多种不同类型资源,而不用根据上下文环境来识别资源指定的访问方式(用人话说就是:不管什么类型的资源,不管在哪里,通过URI我就能确定资源的位置,并且访问它)
- Resource:资源的定义是“可标识的任何东西”
- Identifier:标识符
综上所述,URI就是某种协议方案(协议类型名称)表示的资源的定位标识符。
采用HTTP协议时,协议方案就是http,除此之外,协议方案还有ftp、mailto、telnet、file等。
怎么分辨URI和URL?
URI侧重于是什么,URL侧重于怎么访问。
通过一个例子解释:
https://www.cnblogs.com/realzhaijiayu/p/13359997.html
这是一个URL,同时也是一个URI。
为什么是一个URL?因为可以通过 https 协议访问到该 html 资源
为什么是一个URI?因为上面这个字符串表示它是博客园里面的一个 html 资源。
如果现在将
https://
去掉,这就不是一个URL了,因为没有指明使用的协议,而它还是一个URI,因为它还是一个 html 资源了。一般情况下,可以理解为所有的URL都是URI,但并不是所有的URI都是URL。
注意:如果将
https://
去掉,在浏览器中仍然可以访问,这是因为浏览器帮助我们自动补全了前面的协议。更多资料:https://stackoverflow.com/questions/176264/what-is-the-difference-between-a-uri-a-url-and-a-urn
URI格式
绝对URI:含有所有必要的信息
相对URI:只提供相对路径
- 登录信息:验证身份,可选
- 服务器地址:待访问的服务器地址
- 服务器端口号:SOCKS默认1080、HTTP默认80、HTTPS默认443(访问https://www.baidu.com:443会自动跳转到该网站,去掉端口号的显示)
- 带层次的文件路径:与 UNIX 系统的文件目录结构相似
- 查询字符串:可选
- 片段标识符:可选