《网络是怎样连接的》--读书随笔
1.什么是分布架构?
- 当性能不足时,使用多台服务器来分担负载的方法更有效。
- 这种架构统称为分布架构。
2.负载均衡,可以使用DNS服务器来做?
- 就是每次,查询www.baidu.com的时候,假设它告诉我们39.0.0.10,39.0.0.20,39.0.0.30
- 三个地址,我们每次查询的时候,返回给我们三个中的一个。
- 也叫做DNS轮询。
3.负载均衡,也可以用负载均衡器来做
- DNS返回的IP是1个,只不过指向的是,负载均衡器。
- 负载均衡器再指向另外的3个web服务器。
4.负载均衡器,如何将请求均衡的发送给web服务器,判断依据是什么?
- 如果操作没有跨多个页面,则可以根据web服务器的负载状况来判断。
- 负载均衡器可以定期采集web服务的CPU,内存使用率,并根据这些来判断。
- 可以向web服务器发送测试包,根据响应时间来判断。
- 根据事先设置的服务器性能指数,按比例来分配请求。
- 如果操作跨多页页面,则不考虑web服务器的负载,而是必须讲请求发送到同一台web服务器上。
- 通过HTTP的头部信息来判断。(详细见5,6,7)
- 部分摘抄:
5.操作跨多个页面页面,为什么要将请求发送到同1台web服务器上?
- 我的理解是:
- 假设是浏览器,浏览的是购物商城网站,里面有静态资源,动态资源,动态和静态是两个不同的请求,为了让用户体验一致,必须这两个请求都发送到同1台web服务器。
6.如何判断1个操作是否跨了多个页面?
- 首先理解HTTP工作方式。
- HTTP的基本工作方式是发送请求消息之前先建立TCP连接,
- 当服务器发送响应消息后断开连接,下次访问web服务器的时候,再重新建立TCP连接。
- 因此,在web服务器看来,每一次HTTP访问都是相互独立的,无法判断是否和之前的请求有关。
- 更多看下面的第7条
- 可以通过IP来判断吗?
- 不太行。(原因如下)
- 1.请求方有可能设置了代理,所有的IP都一样,这样也就判断失效了。
- 比如,我们公司的局域网,内部是IP是192.168.0.10; 192.168.0.20; 192.168.0.30 ...
- 我们的网关都是192.168.255.255。
- 那么,对外请求的时候,显示的都是192.168.255.255。这样通过IP是不准的
- 我的机器(192.168.0.10)和张三的机器(192.168.0.20)同时访问的网站的时候,都是对外显示的都是同1个IP,这样肯定是不行的。
- 2.此外如果访问者,使用的地址转换,发送放的地址都转换为转换设备的IP,也就是无法判断是哪个客户端。
-
解决方式是:
-
在HTTP 头部字段中加上用来判断相关性的信息(俗称Cookie)
- 这样负载器就可以通过这些信息来做出判断了
- 对于不相关的信息发送到负载低的服务器上。
-
- 摘抄:
7.为什么web服务器,每一次HTTP访问的请求,都是相互独立的?不设计成连续的?
- 因为最早设计HTTP的时候,web服务器,最早也不是运行CGI程序。(Common Gateway Interface,CGI 公共网络接口,就是可以交互的页面)
- web服务器,早期主要是用来提供静态文件的。(不能交互)
- 在那个时代,web服务器,也就是提供个新闻,这种静态的资源,单向浏览,不能交互。(我的理解)
- 而静态文件,不需要判断请求之间的相关性。(大家都是上网看看新闻,没有啥交互,也就不需要判断相关性)
- 且如果要判断请求之间的相关性,就必须在web服务器一端保存相应的信息,这会增加服务器的负担。
- 基于以上的原因,设计HTTP的时候,就有意省略了请求之间的相关性的判断。
8.如何使用缓存?
9.缓存多个web服务器怎么办?
- 方法很多,最简单的是根据url路径来判断
10.什么是正向代理?什么是反向代理?
- 客户端的代理,叫正向代理。
- 服务端的代理,叫反向代理。
- 其实本质都是代理服务器。没有正向反向的意思,只不过,后来代理服务器多了, 大家为了区分,整了个词儿,叫正向代理/ 反向代理。
-
参考资料1:https://oxylabs.cn/blog/reverse-proxy-vs-forward-proxy
- 参考资料2:https://zhuanlan.zhihu.com/p/34943332
11.缓存服务器是怎么工作的?
- 缓存服务器会新增一个字段If-Modified-Since头部字段并将请求转发给web服务器,
- 询问web服务器用户的请求数据是否已经发生变化。
- 然后,web服务器会根据If-Modified-Since的值与服务器上的页面数据的最后更新时间进程比较,如果在指定时间内数据没有变化,就会返回一个响应消息。
- 这时,web服务器只要查询一下数据的最后更新时间就好了。
- 比返回页面数据的负担要小一些。
- 而且返回的响应消息也比较短,能相应地减少负担。
- 接下来,返回消息到达缓存服务器,然后缓存服务器就会知道web服务器上的数据和本地缓存中的数据是一样的,
- 于是,就会将缓存的数据返回给客户端。
- 当web服务器上的数据有变化时,后面的过程和没有命中缓存的情况是一样的。
- web服务器会返回最新版本的数据,然后缓存服务器加行Via字段发送给客户端,同时讲数据保存在缓存中。
12.CDS是什么?
-
Content Delivery Service 内容分发服务(CDS也可以叫CDN,内容分发网络)
- 是CDSP的简化,CDSP(Content Delivery Service Provider,)内容分发服务运营商
- 是干嘛用的?
- 为企业提供大量的缓存服务器。
- 加快访问web服务器的速度。
-
13.如何找到最近的缓存服务器呢?
- 1.不采用轮询路由来返回,根据位置来返回。
- 2.使用重定向。
- 一般的工作方式:
- 根据距离来返回缓存服务器。
- 重定向的方式
14.访问web服务器,访问的是什么?
- 是web服务器上的内容或者程序
15.get请求和post请求的区别是什么?
- 传递的参数方式不同。
- 当客户端访问web服务器的时候,
- 假设是要运行web服务器上的程序,这个程序需要参数。
- 那么参数就是从get或POST来的。
- 区别是,get是url后面传过来,post是以表单的形式传过来。
16.web服务器如果对请求进行过滤?
- 比如,我开发个网站, 我不想让所有人都访问,授权才可以。
- 最简单的方式是,
- 需要账号和密码。
- 还有其他的方式有
- 客户端IP地址,
- 客户端域名
17.浏览器接受到的消息并显示内容,那么浏览器怎么知道消息的类型呢?
-
根据响应消息开头的 Content-Type 头部字段的值来进行判断
-
Content-Type: text/html
- /左边的是主类型,表示数据的大分类;/右边的是子类型,表示数据的类型。
-
上面的例子中:主类型是 text,子类型是html。主类型和子类型的含义都是事先确定好的。
- 更多见下表:
-
实际例子
-
17(扩展)
- 有时候我们需要结合其他一些信息来综合判断数据类型,例如
- 请求文件的扩展名、数据内容的格式等。比如,我们可以检查文件的扩展名,如果为.html或.htm则看作是HTML文件,
- 或者也可以检查数据的内容,如果是以<html>< font="">开头的则看作是HTML文档。
- 不仅是HTML这样的文本文件,图片也是一样。
- 图片是经过压缩的二进制数据,但其开头也有表示内容格式的信息,我们可以根据这些信息来判断数据的类型。
- 不过,这部分的逻辑并没有一个统一的规格,因此不同的浏览器以及不同的版本都会有所差异。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人