2.2 计算机网络

【考点讲解】

计算机网络是测试工作中需要重点掌握的核心技能。
目前,互联网应用多采用 B/S 或 C/S 架构,客户端和服务端需要借助计算机网络才能进行数据交互。
计算机网络不仅对我们的日常测试工作产生了深远影响,在测试岗的面试中,计算机网络也是必考的重点,我们需要重点掌握。
下面列举测试岗面试中有关计算机网络的比较高频的考点,大家应当重点复习和准备。
  • HTTP协议相关知识点
  • HTTP和HTTPS
  • OSI七层网络协议
  • TCP和UDP
  • TCP的三次握手和四次挥手
  • Cookie和Session
  • Web数据流转
  • CDN
  • 抓包的原理
  • Socket的原理
  • 网络问题排查
在复习这些考点时,可以阅读一些计算机网络的相关书籍进行巩固学习,一般来说,计算机及相关专业都会开设计算机网络这门课程,可结合教科书及教辅资料去进行针对性的学习;如果是非科班的同学想要去学习计算机网络的基础知识,也有不少入门书籍可以阅读,比如:《图解 HTTP》、《图解 TCP/IP》。

【例题示例】

2.2.1 HTTP和HTTPS的区别在哪里?

【考点映射】
  • HTTP协议相关知识点
【出现频度】★★★★★
【难度】★★☆

【参考答案】
HTTPS是一种应用层协议,本质上来说它是HTTP协议的一种变种。
区别:
1. 端口 :HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。
2. 安全性:HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,数据内容的加密采用对称加密,但对称加密的密钥用服务器下发数字证书(公钥)进行了非对称加密。
3. 资源开销:HTTPS请求需要进行非对称加密和对称加密,连接开销比HTTP大。

【知识点延伸】
什么是对称加密,什么是非对称加密?
  • 对称加密:密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;
  • 非对称加密:密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。


2.2.2 请谈谈 GET 请求和 POST 请求的差别。

【考点映射】
  • HTTP协议相关知识点
【出现频度】★★★★☆
【难度】★★

【参考答案】
主要的差别有:
  1. GET请求的含义是请求从服务器获取资源(可以是静态的文本、页面、图片视频等),POST请求的含义是向服务器提交数据,表示向服务器申请创建新的资源或对已有的资源进行修改。
  2. GET请求将请求参数拼接到URL上进行参数传递,而POST则是将请求参包装到HTTP报文的请求体(body)中。
  3. 从请求的大小看,GET请求的长度受限于浏览器和服务器对URL长度的限制,
  4. 按照REST规范,GET请求是幂等的,即读取同一个资源,总是得到相同的数据,而POST请求不是幂等的,因为每次请求对资源的改变并不是相同的;进一步讲,GET请求一般不会改变服务器上的资源,而POST请求会对服务器资源进行改变。
  5. GET请求因为是读取资源,是幂等的,就可以对GET请求的数据做缓存。而POST请求是向服务器申请创建新的资源或对已有的资源进行修改,不是幂等的,因此也就不能做缓存。以下订单场景为例,如果POST请求可被浏览器缓存,那么当下单这个操作就可以不向服务器发请求,而直接返回本地缓存的“下单成功界面”,却又没有真的在服务器进行下单,这是不合逻辑的。

【知识点延伸】
(1)HTTP的请求方法分类
根据 HTTP 标准,HTTP 请求可以使用多种请求方法。
HTTP 1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP 1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
(2)关于HTTP请求方法的一些误解
1. 因为GET请求把参数明文拼接在URL中,所以POST比GET更安全?
我们常听到GET不如POST安全,因为POST用body传输数据,而GET用url传输,更加容易看到。
这个说法是非常不具备说服力的。从网络攻击的角度,无论是GET请求还是POST请求,都是不够安全的,因为HTTP本身是明文协议,不管是url、header还是body,通过抓包工具都可以轻松获取,这完全不是一个“是否容易在浏览器地址栏上看到“的问题。
为了避免数据网络传输过程中被窃取,必须做从客户端到服务器的端端加密。业界的通行做法就是https(即用SSL协议协商出的密钥加密明文的http数据)。这个加密的协议和HTTP协议本身相互独立。如果是利用HTTP开发公网的站点/App,要保证安全,https是最最基本的要求。
2. 因为URL有长度限制,所以GET请求会有最大长度限制?
我们常说的“GET数据有长度限制“其实是指”URL的长度限制“,HTTP协议本身对URL长度并没有做任何规定,实际的限制是由客户端/浏览器以及服务器端决定的。
常见的浏览器对URL长度的限制。
POST请求受浏览器URL长度限制的影响相对来说比较少,因为一般来说POST请求无须在URL上拼接参数,而一般是把参数封装在body里面,所以POST请求的URL长度一般不会特别长。
但是并不是说POST请求就是完全没有限制数据传输大小的,具体还得看服务器是否做了数据传输大小的限制。


2.2.3 聊一聊 HTTP 1.0、HTTP 1.1 和 HTTP 2.0 有哪些区别?

【考点映射】
  • HTTP协议相关知识点
【出现频度】★★☆
【难度】★★☆

【参考答案】
HTTP 和 HTTP1.1 的区别:
  1. 缓存处理,在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
  2. 带宽优化及网络连接的使用,HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
  3. 错误通知的管理,在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
  4. Host头处理,在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。
  5. 长连接,HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。
2012年,Google提出了SPDY方案,优化了HTTP1.X的请求延迟,解决了HTTP1.X的安全性:
  1. 降低延迟,针对HTTP高延迟的问题,SPDY优雅的采取了多路复用(multiplexing)。多路复用通过多个请求stream共享一个tcp连接的方式,解决了HOL blocking的问题,降低了延迟同时提高了带宽的利用率。
  2. 请求优先级(request prioritization)。多路复用带来一个新的问题是,在连接共享的基础之上有可能会导致关键请求被阻塞。SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应。比如浏览器加载首页,首页的html内容应该优先展示,之后才是各种静态资源文件,脚本文件等加载,这样可以保证用户能第一时间看到网页内容。
  3. header压缩。前面提到HTTP1.x的header很多时候都是重复多余的。选择合适的压缩算法可以减小包的大小和数量。
  4. 基于HTTPS的加密协议传输,大大提高了传输数据的可靠性。
  5. 服务端推送(server push),采用了SPDY的网页,例如我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了。
HTTP2.0 和 HTTP1.X 相比的新特性:
  1. 新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性