深入理解HTTP(HyperText Transfer Protocol)
超文本传输协议
协议
:HTTP是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式
传输
:HTTP是一个在计算机世界里专门用来在两点之间传输数据的约定和规范
(1)HTTP协议是一个“双向协议”
(2)不限定两个角色,允许有中转或接力A<=>X<=>Y<=>Z<=>B
文本
:完整的有意义的数据,可以被上层应用程序处理
包括但不限于 文字、图片、音频、压缩包
超文本
:超越了普通文本的文本。是文字、图片、音频和视频等的混合体。最关键的是含有超链接。能从一个超文本跳跃到另一个超文本。形成复杂的非线性、网状的结构关系。
因此,
HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
HTTP不是互联网、不是编程语言、不是HTML,不是一个孤立的协议
HTTP通常跑在TCP/IP协议栈之上,依靠IP实现寻址和路由、TCP协议实现可靠数据传输、DNS协议实现域名查找、SSL/TLS协议实现安全通信。此外,还有一些协议依赖于HTTP,例如WebSocket、HTTPDNS等。这些协议相互交织,构成了一个协议网,而HTTP则处于中心地位。
与HTTP有关的应用技术
1.互联网上绝大部分资源都使用 HTTP 协议传输;
万维网(World Wide Web)是互联网的子集,基于 HTTP 协议,传输 HTML 等超文本资源。万维网之外的资源,例如常用的电子邮件、BT 和 Magnet 点对点下载、FTP 文件下载、SSH 安全登录、各种即时通信服务等等,它们需要用各自的专有协议来访问,但由于HTTP超文本的表述能力强,很多这些资源可以“包装”成 HTTP 来访问(网页版邮箱)。现在的互联网 90% 以上的部分都被万维网,也就是 HTTP 所覆盖。
2.浏览器是 HTTP 协议里的请求方,即 User Agent;
3.服务器是 HTTP 协议里的应答方,常用的有 Apache 和 Nginx;
硬件含义就是物理形式或“云”形式的机器。
软件含义的 Web 服务器,就是提供 Web 服务的应用程序,通常会运行在硬件含义的服务器上。Apache (老牌,资源多,学习门槛低)和 Nginx(后起之秀,高性能,高稳定)
4.CDN 位于浏览器和服务器之间,主要起到缓存加速的作用;
除了基本的网络加速外,还提供负载均衡、安全防护、边缘计算、跨运营商网络等功能。
5.爬虫是另一类 User Agent,是自动访问网络资源的程序。
与HTTP有关的协议/概念
1、四层模型:应用层、传输层、网络层、链接层
2、IP协议主要解决寻址和路由问题
3、ipv4,地址是四个用“.”分隔的数字,总数有2^32个,大约42亿个可以分配的地址
4、ipv6,地址是八个用“:”分隔的数字,总数有2^128个。
5、TCP协议位于IP协议之上,基于IP协议提供可靠的(数据不丢失)、字节流(数据完整)形式的通信,是HTTP协议得以实现的基础
6、域名系统:为了更好的标记不同国家或组织的主机,域名被设计成了一个有层次的结构。“域名系统”(Domain Name System),域名又称为主机名。
7、域名用“.”分隔成多个单词,级别从左到右逐级升高。
8、域名解析:将域名做一个转换,映射到它的真实IP
9、URI:统一资源标识符;URL:统一资源定位符
URL是URI的一个子集,实际上两者几乎等同,不必刻意区分。(URN
10、URI主要有三个基本部分构成:协议名、主机名、路径
URI 是统一资源标识符,标定了客户端需要访问的资源所处的位置,如果URI中的主机名使用域名,则需要使用DNS来把域名解析为IP。
11、HTTPS:运行在SSL/TLS协议上的HTTP
12 、SSL/TLS:建立在TCP/IP之上的负责加密通信的安全协议,是可靠的传输协议,可以被用作HTTP的下层
SSL 的全称是“Secure Socket Layer”,由网景公司发明,当发展到 3.0 时被标准化,改名为 TLS,即“Transport Layer Security”,但由于历史的原因还是有很多人称之为 SSL/TLS,或者直接简称为 SSL。
13、代理(Proxy):是HTTP协议中请求方和应答方中间的一个环节。既可以转发客户端的请求,也可以转发服务器的应答。(CDN就是其中一种
代理的功能:
负载均衡:把访问请求均匀分散到多台机器,实现访问集群化;
内容缓存:暂存上下行的数据,减轻后端的压力;
安全防护:隐匿 IP, 使用 WAF 等工具抵御网络攻击,保护被代理的机器;
数据处理:提供压缩、加密等额外的功能。
14、代理常见种类:匿名代理(外界只看到代理服务器(中转站))、透明代理、正向代理(代表客户端->服务器)、反向代理
15、代理可以做的事:负载均衡、内容缓存、安全防护、数据处理。
协议栈
1、TCP/IP协议是一个“有层次的协议栈”
TCP/IP
2、TCP/IP协议总共有四层,顺序从下往上 链接层->网际层->传输层->应用层
3、链接层 link layer ,负责在底层网络上发送原始数据包,使用MAC地址来标记网络上的设备,所以也叫MAC层
4、网际层 internet layer,IP协议所在层,在链接层的基础上,用IP地址取代MAC地址,把许多局域/广域网连接成虚拟的巨大网络,在这个网络里找设备时只要把IP地址再翻译成MAC地址就可以
5、传输层 transport layer,TCP、UDP协议所在层,这个层次协议的职责是保证数据在IP地址标记的两点之间可靠地传输。
6、TCP和UDP区别:
TCP 有状态 需要先建立连接才能发送数据 保证数据不丢失不重复 数据是连续的字节流,有先后顺序
UDP 无状态 不需要先建立连接也可以发送数据 不保证数据一定会发送到对方 数据是分散的小数据包,顺序发、乱序收
7、应用层 application layer,Telnet、SSH、FTP、SMTP、HTTP
8、MAC层的传输单位是帧(frame),IP层的传输单位是包(packet),TCP层的传输单位是段(segment),HTTP的传输单位是消息或报文(message)。统称为数据包
9、OSI网络分层模型(Open System Interconnection Reference Model)
1.第一层:物理层,网络的物理形式,例如电缆、光纤、网卡、集线器等等;
2.第二层:数据链路层,它基本相当于TCP/IP的链接层;
3.第三层:网络层,相当于TCP/IP里的网际层;
4.第四层:传输层,相当于TCP/IP里的传输层;
5.第五层:会话层,维护网络中的连接状态,即保持会话和同步;
6.第六层:表示层,把数据转换为合适、可理解的语法和语义;
7.第七层:应用层,面向具体的应用传输数据。
10、TCP/IP四层模型和OSI七层网络模型的映射关系
1.第一层:物理层,TCP/IP里无对应;
2.第二层:数据链路层,对应TCP/IP的链接层;
3.第三层:网络层,对应TCP/IP的网际层;
4.第四层:传输层,对应TCP/IP的传输层;
5.第五、六、七层:统一对应到TCP/IP的应用层。
11、*四层负载均衡:工作在传输层上,基于TCP/IP协议的特性,例如Ip地址,端口号等实现对后端服务器的负载均衡
12、*七层负载均衡:工作在应用层上,看到的是HTTP协议,解析HTTP报文里的URI、主机名、资源类型等数据,再用适当的策略转发给后端服务器
*解释一下“二层转发”“三层路由”?
这里的二层与三层应该指的是OSI模型。二层转发就意味着是在数据链路层(Data Link Layer)做的转发,基于 MAC 地址,通常指的是交换机;三层路由意味着是在网络层(Network Layer)做的转发,通常指的是路由器(当然也有路由功能的交换机);当数据传输到网络层,路由器会检查目的 IP 是否与自己处于同一网段,是则进行二层转发即请求目的主机的 MAC 地址,否则进行三层转发即进入路由的递归查找。
*“五层”“六层”哪去了?
OSI 的分层模型在四层以上分的太细,而 TCP/IP 实际应用时的会话管理、编码转换、压缩等和具体应用经常联系的很紧密,很难分开。例如,HTTP 协议就同时包含了连接管理和数据格式定义。
DNS
1.域名使用字符串来代替 IP 地址,方便用户记忆,本质上一个名字空间系统;
2.DNS 就像是我们现实世界里的电话本、查号台,统管着互联网世界里的所有网站,是一个“超级大管家”;
3.DNS 是一个树状的分布式查询系统,但为了提高查询效率,外围有多级的缓存;
4.使用 DNS 可以实现基于域名的负载均衡,既可以在内网,也可以在外网。
浏览器输入一个域名后的过程:
浏览器缓存->操作系统dns cache ->hosts文件->非权威域名服务器->根域名服务器->顶级域名服务器->二级域名服务器->权威域名服务器。
其中非权威域名服务器包括LDNS(企业内网DNS服务器),三大营运商DNS,谷歌公开的DNS,微软公开的DNS等。这些 DNS 服务器的数量要比核心系统的服务器多很多,而且大多部署在离用户很近的地方。比较知名的 DNS 有 Google 的“8.8.8.8”,Microsoft 的“4.2.2.1”,还有 CloudFlare 的“1.1.1.1”等等。
另外DNS请求有两种方式:递归查询和迭代查询(递归就是你交给别人,让别人查到,在返回给你迭代就是你找别人要,他叫你去别的地方找
DNS实验环境测试:
chrome chrome://net-internals/#dns 查看和清空缓存
windows查看系统缓存:
ipconfig /displaydns 显示已有缓存
ipconfig /displaydns > C:\Users\username\Desktop\1.txt 导出到再查看。
ipconfig /flushdns 强制更新缓存
DNS的几种算法:
(1)重定向
可以让对外服务的域名不变,而主机的 IP 地址任意变动。
(2)因为域名是一个名字空间,所以可以使用 bind9 等开源软件搭建一个在内部使用的 DNS,作为名字服务器。这样开发的各种内部服务就都用域名来标记。比如 mysql、redis、etcd 等使用域名,一旦挂掉了,可以很快切换到另一个 IP 地址。
(3)基于域名实现的负载均衡
第一种方式,因为域名解析可以返回多个 IP 地址,所以一个域名可以对应多台主机,客户端收到多个 IP 地址后,就可以自己使用轮询算法依次向服务器发起请求,实现负载均衡。
第二种方式,域名解析可以配置内部的策略,返回离客户端最近的主机,或者返回当前服务质量最好的主机,这样在 DNS 端把请求分发到不同的服务器,实现负载均衡。
“恶意DNS”:
域名屏蔽
,对域名直接不解析,返回错误,让你无法拿到 IP 地址,也就无法访问网站;
域名劫持
,也叫“域名污染”,你要访问 A 网站,但 DNS 给了你 B 网站。