Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HTTP 相关概念 #24

Open
18888628835 opened this issue May 17, 2021 · 0 comments
Open

HTTP 相关概念 #24

18888628835 opened this issue May 17, 2021 · 0 comments

Comments

@18888628835
Copy link
Owner

18888628835 commented May 17, 2021

HTTP 相关的应用

Web 服务器

浏览器是 HTTP 中的请求方,而协议的另一方就是应答方==>服务器,Web Server

Web服务器有两个层面的含义:硬件和软件。

硬件指的就是物理形式或者云形式的机器,在多数情况下它不一定是服务器,而是利用反向代理、负载均衡等多种技术组成的集群。

软件就是提供 Web 服务的应用程序,通常运行在硬件含义的服务器上,它利用硬件能力响应海量的 HTTP 请求,处理各种网页、图片等文件,或者转发请求等等。

目前世界上最流行两类 Web 服务器,分别是老牌的 Apache 服务器(特点:功能完善,学习门槛低)和后起之秀 Nginx(特点:高性能、高稳定性)。

CDN

CDN 全称是内容分发网络Content Delivery Network,它是浏览器和服务器之间的内容架设,它应用了 HTTP 协议中的缓存和代理技术,能够代理源站响应客户端的请求。

它有什么好处呢?

它可以缓存源站数据,让浏览器不用再千里迢迢到达源站服务器,而是在半路直接获取响应。如果 cdn 的调度算法优秀,那么就可以找到距离用户跟进的节点,大幅度缩短响应时间。

爬虫

浏览器是一种用户代理,代替我们访问互联网。

但是这个代理也可以是机器人,这些机器人就称为爬虫。本质上是一种可以自动访问 Web 资源的应用程序。

爬虫是怎么来的呢?绝大多数都是由搜索引擎放出来的,它能够抓取网页并存入庞大的数据库中,再建立关键字索引,这样我们才可以在搜索引擎中搜索到互联网的各个页面。

爬虫也有一些不好的地方,比如导致敏感信息泄露。所以,现在也出现了一种反爬虫技术,通过各个手段来限制爬虫。

Web Service

Web Service 和 Web Server的名字很像,但是确实完全不同的东西。

它是基于 Web(HTTP)的服务架构技术,既可以运行在内网,也可以在适当保护后运行在外网。

因为采用了 HTTP 协议传输数据,所以在 Web Service 架构里服务器和客户端可以采用不同的操作系统或编程语言开发。例如服务器端用 Linux+Java,客户端用 Windows+C#,具有跨平台跨语言的优点。

小结

  • 互联网上绝大部分资源都使用 HTTP 协议传输,浏览器是 HTTP 协议里的请求方,即 User Agent; 服务器是 HTTP 协议里的应答方,常用的有 Apache 和 Nginx;

  • CDN 位于浏览器和服务器之间,主要起到缓存加速的作用;

  • 爬虫是另一类 User Agent,是自动访问网络资源的程序;

  • Web Service 是一种服务架构技术,具有跨平台跨语言的特点。

HTTP 相关的协议

TCP/IP

TCP/IP 协议是目前网络世界“事实上”的标准通信协议,是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP。

它还有其他协议例如:UDP、ICMP、ARP 等等。他们共同组成一个复杂的协议栈。

这个协议有四层

  1. 应用层
  2. 传输层(TCP 归属层)
  3. 网际层(IP 归属层)
  4. 链接层

IP 协议是Internet Protocol的缩写,它主要用来解决寻址和路由以及如何传送数据包的问题。

IP 系统用了 IP 地址这个概念来定位每一台计算机。对应电话系统,需要打电话必须要接入电话网,由通信公司分配一个号码,这个号码就相当于 IP 地址。

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

可靠指的是保证数据不流失,字节流则保证数据完整。

TCP/IP是可靠的、完整的协议

DNS

TCP/IP使用 IP 地址来标识计算机,由于计算机本身处理的就是数据,这样的地址对应计算机相当方便,但是却不利于人类记忆。

DNS 域名系统就可以解决这个问题。它用了一组有意义的名字来替代 ip 地址,并建立映射关系。比如:访问 www.baidu.com就是访问百度的 IP 地址14.215.177.38(不止这一个)

在 DNS 中,域名又称主机名,它被设计成一个非常有层次的结构。其中,最右边的比如.com,.cn等都是顶级域名

顶级域名下面是二级域名,它位于顶级域名的左侧。例如,在zh.wikipedia.org中,wikipedia是二级域名。w3.org中,w3也是二级域名。

二级域名下面是三级域名,它位于二级域名的左侧。例如,在zh.wikipedia.org中,zh是三级域名。

想要使用 TCP/IP 协议来通信仍然要使用 IP 地址,所以需要把域名做一个转换,“映射”到它的真实 IP,这就是所谓的“域名解析”。

URI 和 URL

DNS 和 IP 地址标记了互联网上的主机,但是主机上有大量文本、网页等,需要找哪一个呢?

这就出现了 URI,全称统一资源定位符标识符。使用它可以唯一地标记互联网上的资源。

URI 的另一个表现形式是 URL(统一资源定位符),就是我们俗称的网址。它是 URI 的子集,但是两者相差不大。

URI是怎样的呢?

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

上面的URI 由三个基本部分组成:

1.协议名:http

2.主机名:主机标记位置,可以是域名或 ip 地址。这里是nginx.org

3.路径,也就是资源在主机上的位置,用/分隔成多个目录。这里是/en/download.html

HTTPS

这是 HTTP 的安全版本,由于 HTTP 协议不够安全,所以在 TCP/IP协议之上,又架设一层 SSL/TLS 的协议,而 HTTPS 的意思就是运行在在 SSL/TLS 协议上的 HTTP。

全称为HTTP over SSL/TLS

SSL/TLS是负责加密通信的安全协议,也是可靠的传输协议

SSL/TLS一开始叫 SSLSecure Socket Layer),后来改名叫 TLS(Transport Layer Security),由于历史原因很多人称之为 SSL/TLS。

它使用了许多密码学的研究成果,综合了对称加密、非对称加密、摘要算法、数字签名、数字证书等技术,能够在不安全的环境中为通信的双方创建出一个秘密的,安全的传输通道。

如果有网址的协议名是 https,则代表其启用了 HTTPS 协议。

代理

代理(proxy)是 HTTP 协议中请求方和应答方中间的环境,作为中转站,可以转发请求,也可以转发响应。

以下列举代理的种类

  1. 匿名代理:完全“隐匿”了被代理的机器,外界看到的只是代理服务器;

  2. 透明代理:顾名思义,它在传输过程中是“透明开放”的,外界既知道代理,也知道客户端;

  3. 正向代理:靠近客户端,代表客户端向服务器发送请求;

  4. 反向代理:靠近服务器端,代表服务器响应客户端的请求;

CDN 实际上也是代理的一种,它替代服务器响应客户端的请求,通常扮演透明代理和反向代理的角色。

代理作为传输的中间层,可以做很多事情,例如:

  1. 负载均衡:把访问请求均匀分散到多台机器,实现访问集群化;

  2. 内容缓存:暂存上下行的数据,减轻后端的压力;

  3. 安全防护:隐匿 IP, 使用 WAF 等工具抵御网络攻击,保护被代理的机器;

  4. 数据处理:提供压缩、加密等额外的功能。

关于HTTP 代理还有一个特殊的代理协议(proxy protocol)。

小结

TCP/IP是世界上最常用的协议,具有可靠、完整的特点。HTTP 运行在 TCP/IP 之上。

DNS 域名是 IP 地址的等价替代,需要用域名解析实现到 IP 地址的映射

URI 由协议、主机名、路径构成。

HTTPS 由 HTTP+SSL/TLS+TCP/IP 组成。

代理是 HTTP 传输的中转站,可以实现缓存加速、负载均衡等功能。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant