做接口测试前必备的网络基础知识,你get了吗?_Java

在面试时,不管是面试功能测试、自动化测试、测试开发乃至性能测试,都会问到计算机网络基础相关知识。今天主要介绍一些高频的网络基础面试题目,网络情缘一线牵,珍惜这段缘,如果觉得有帮助,欢迎留言、点赞、转发、收藏四连爱。❤️

做接口测试前必备的网络基础知识,你get了吗?_Java_02


Cookie和Session的区别?


Cookie 是访问某些网站以后在本地存储的一些网站相关的信息,下次再访问的时候减少一些步骤。另外一个更准确的说法是:Cookie 是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器,是一种在客户端保持状态的方案。由于 HTTP 协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是 Session

做接口测试前必备的网络基础知识,你get了吗?_Java_03


Cookie和Session是解决http协议的无状态性,区别如下:




1
存储位置不同


Cookie是将用户数据通过加密的方式保存在客户端,大多数情况Cookie存储在浏览器;Session是用于控制客户端和服务端的连接,Session存储在服务器;




2
存储容量不同



单个Cookie保存的数据不得超过4kb,一个站点最多20个Cookie,Session一般情况下没有上限,不过建议不要存放太多东西,否则影响性能;




3
存取方式不同
Cookie只能用ASCII字符串,通过编码方式获取Unicode字符或者二进制数据,不好存储复杂的信息,而Session能存储任何类型的数据;





4
隐私策略/安全性不同


Cookie放在客户端,可以进行Cookie欺骗,所以不安全,Session放在服务端,更加安全;




5
有效期不同



Cookie可以设置属性达到长期有效,Session依赖于JSESSIONID的Cookie,Cookie JSESSIONID的过期时间默认为-1,只需要关闭窗口Session就会失效,就算不依赖Cookie,用UrL重写也不能完成,如果Session超时时间过长,容易导致内存溢出;




6
服务器压力不同
Cookie保存在本地,不存在服务端压力,Session保存在服务端,每个用户产生一个Session,当访问增多,会比较占用服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用Cookie;





7
浏览器支持不同



如果浏览器禁用Cookie,那么Cookie直接失效,Session比较好点,可以用URL重写;




8
cookie和session应用的场景


cookie:用户的登录状态,记录用户的习惯,如购物车;

session:登录验证;


做接口测试前必备的网络基础知识,你get了吗?_Java_04







HTTP与HTTPS的区别?


HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(SecureSocketsLayer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。


HTTP与HTTPS都是应用层协议,且本质上没有什么不同。他们的区别相对来说就是HTTPS是HTTP的安全版,HTTP信息是明文传输,而HTTPS是具有安全性的SSL加密传输,安全性要高于HTTP协议。且两者使用的端口也不一样,HTTP默认使用80端口,而HTTPS使用443端口。


做接口测试前必备的网络基础知识,你get了吗?_Java_05


HTTPS和HTTP的区别主要如下:总的来说:HTTPS=SSL+HTTP

  • https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

  • http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443(这个只是默认端口不一样,实际上端口是可以改的)。

  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。





get请求与post请求的区别?




1
提交数据的形式


  • GET方法一般是指获取服务器上的数据,请求参数(query string查询字符串)直接跟着URL后边,以?分割URL和传输数据,参数之间以&相连(?key1=value1&key2=value2)的形式,直接可以放到浏览器地址栏里,例如登录就是采用GET方法。
    如:login.actionname=ITester&password=idontknow&verify=%E4%BD%A0%E5 %A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4 %BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

  • POST方法是指客户端给服务器上提交表单数据,会把数据放到请求数据字段中以&分隔各个字段,请求行不包含数据参数,地址栏也不会额外附带参数,所以POST是通过表单提交的,请求参数放在body中,如网页上的新用户的注册、调查问卷和答题就是采用POST方法。




2
提交数据的大小/长度



  • get是直接在浏览器地址栏输入,直接影响到了URL的长度,但HTTP协议规范中其实是没有对URL限制长度的,限制URL长度的是客户端或服务器的支持的不同所影响:比如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、Firefox等,理论上没有长度限制,其限制取决于操作系统的支持。由于浏览器有限制,一般整个URL的长度可以很长,但是不能超过2049KB的大小限制,而post没有大小限制。


  • post方式HTTP协议规范中也没有限定,起限制作用的是服务器的处理程序的处理能力。所以大小的限制还是得受各个web服务器配置的不同而影响。




3
提交数据的安全性



  • 由于get的参数是在浏览器地址栏URL直接拼接,用户名和密码将明文出现在URL上,暴露在互联网中,安全性差,不能用来传递敏感信息。

  • post请求参数放在body里,是通过表单数据提交,post比get方式的安全性要高。

get方式安全性弱因为以下几个原因:

  1. 登录页面有可能被浏览器缓存;

  2. 其他人查看浏览器的历史纪录,那么别人就可以拿到账号和密码;

  3. 当遇上跨站的***时,安全性的表现更差;




4
编码方式



  • get的参数只能支持ASCII;

  • post没有限制,也允许二进制数据;




5
请求方式



  • get是获取指定的资源;

  • post是向指定的资源提交要被处理的数据;




6
请求体



  • get没有请求体;

  • post有请求体;




7
效率方面



  • get产生一个tcp数据包;

  • post产生两个tcp数据包,post需要两步,时间上消耗要多一点,get比post更有效;




8
请求过程



  • 对于get方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据),get请求的过程:

      1)浏览器请求tcp连接(第一次握手);

      2)服务器答应进行tcp连接(第二次握手);

      3)浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以                  http会在此时进行第一次数据发送);

      4)服务器返回200OK响应;


  • 而对于post,浏览器先发送header,服务器响应100continue,浏览器再发送data,服务器响应200ok(返回数据),post请求的过程:

      1)浏览器请求tcp连接(第一次握手);

      2)服务器答应进行tcp连接(第二次握手);

      3)浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以                         http  会 在此时进行第一次数据发送);

      4)服务器返回100 Continue响应;

      5)浏览器发送数据;

      6)服务器返回200 OK响应;





OSI七层模型的作用分别是?




1
应用层



OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有HTTP,HTTPS,FTP,POP3,SMTP等;




2
表示层



提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。如果必要,该层可提供一种标准表示形式,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式;




3
会话层



负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成;




4
传输层



建立了主机端到端的链接,传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。我们通常说的,TCP/ UDP就是在这一层。端口号既是这里的“端”;




5
网络层



通过IP寻址来建立两个节点之间的连接,为源端的运输层送来的分组,选择合适的路由和交换节点,正确无误地按照地址传送给目的端的运输层;




6
数据链路层



将比特组合成字节,再将字节组合成帧,使用链路层地址 (以太网使用MAC地址)来访问介质,并进行差错检测。数据链路层又分为2个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)。MAC子层处理CSMA/CD算法、数据出错校验、成帧等;LLC子层定义了一些字段使上次协议能共享数据链路层。在实际使用中,LLC子层并非必需;




7
物理层



实际最终信号的传输是通过物理层实现的,通过物理介质传输比特流。规定了电平、速度和电缆针脚。常用设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆,这些都是物理层的传输介质。


做接口测试前必备的网络基础知识,你get了吗?_Java_06





请简述TCP三次握手和四次挥手?




1
三次握手



三次握手是指的是创建连接的过程:首先客户端向服务器端发送一个请求,询问是否可以发送数据;服务器收到请求之后,如果同意会响应一个确认报文;客户端收到确认报文之后,就开始发送数据。


第一次握手:建立连接时,客户端向服务器发送请求报文(SYN),"我想建立连接”;

第二次握手:服务器收到请求报文后,如同意连接,则向客户端发送确认报文(SYN/ACK),“同意建立”;

第三次握手:客户端收到服务器的确认后,再次向服务器发送确认报文,完成连接(ACK);

做接口测试前必备的网络基础知识,你get了吗?_Java_07




2
四次挥手


四次挥手指的是断开连接的过程:客户端向服务器发送一个请求,询问是否可以断开连接;服务器端会响应自己当前的状态;如果服务器端准备好了,会向客户端发送一个断开连接的请求;如果没有准备好,还有数据没响应完,会等响应完再给客户端发送请求;最后服务器端和客户端断开连接。


第一次挥手:客户端想分手,发送消息(FIN)给服务器;

第二次挥手:服务器通知客户端已经接受的挥手请求,返回确认消息(ACK),但还没做好分手准备;

第三次挥手:服务端已经做好分手准备,通知客户端(FIN);

第四次挥手:客户端发送消息给服务器(ACK),确认分手,服务器关闭连接。


做接口测试前必备的网络基础知识,你get了吗?_Java_08





浏览器输入URL到将页面渲染出来发生了什么?


1.首先,在浏览器地址栏中输入URL,先解析URL,检测URL地址是否合法;


2.浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第3步操作。


浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求;操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存);

路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存;

ISP缓存:若上述均失败,继续向ISP搜索。


3.在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址。


4.浏览器向服务器发起TCP连接,与浏览器建立TCP三次握手。


5.握手成功后,浏览器向服务器发送HTTP请求,请求数据包。


6.服务器处理收到的请求,将数据返回至浏览器。


7.浏览器收到HTTP响应。


8.浏览器解码响应,如果响应可以缓存,则存入缓存。


9.浏览器发送请求获取嵌入在HTML中的资源(HTML,CSS,JavaScript,图片,音乐······),对于未知类型,会弹出对话框。


10.浏览器发送异步请求。


11.  最后,页面全部渲染结束


做接口测试前必备的网络基础知识,你get了吗?_Java_09





常用HTTP状态码


关于常见的HTTP状态码,这是一个面试经常问的题目。

状态码类别
1XX信息性状态码
2XX成功状态码
3XX重定向状态码
4XX客户端错误状态码
5XX服务端错误状态码


常见的HTTP状态码:



1
1XX



  • 100 Continue:表示正常,客户端可以继续发送请求

  • 101 Switching Protocols:切换协议,服务器根据客户端的请求切换协议。




2
2XX



  • 200 OK:请求成功

  • 201 Created:已创建,表示成功请求并创建了新的资源

  • 202 Accepted:已接受,已接受请求,但未处理完成。

  • 204 No Content:无内容,服务器成功处理,但未返回内容。

  • 205 Reset Content:重置内容,服务器处理成功,客户端应重置文档视图。

  • 206 Partial Content:表示客户端进行了范围请求,响应报文应包含Content-Range指定范围的实体内容




3
3XX



  • 301 Moved Permanently:永久性重定向

  • 302 Found:临时重定向

  • 303 See Other:和301功能类似,但要求客户端采用get方法获取资源

  • 304 Not Modified:所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。

  • 305 Use Proxy:所请求的资源必须通过代理访问

  • 307 Temporary Redirect:临时重定向,与302类似,要求使用get请求重定向。




4
4XX



  • 400 Bad Request:客户端请求的语法错误,服务器无法理解。

  • 401 Unauthorized:表示发送的请求需要有认证信息。

  • 403 Forbidden:服务器理解用户的请求,但是拒绝执行该请求

  • 404 Not Found:服务器无法根据客户端的请求找到资源。

  • 405 Method Not Allowed:客户端请求中的方法被禁止

  • 406 Not Acceptable:服务器无法根据客户端请求的内容特性完成请求。

  • 408 Request Time-out:服务器等待客户端发送的请求时间过长,超时。




5
5XX



  • 500 Internal Server Error:服务器内部错误,无法完成请求

  • 501 Not Implemented:服务器不支持请求的功能,无法完成请求





如果已经建立了连接,但是客户端突然出现故障了怎么办?


如果TCP连接已经建立,在通信过程中,客户端突然故障,那么服务端不会一直等下去,过一段时间就关闭连接了。具体原理是TCP有一个保活机制,主要用在服务器端,用于检测已建立TCP链接的客户端的状态,防止因客户端崩溃或者客户端网络不可达,而服务器端一直保持该TCP链接,占用服务器端的大量资源(因为Linux系统中可以创建的总TCP链接数是有限制的)。

保活机制原理:设置TCP保活机制的保活时间keepIdle,即在TCP链接超过该时间没有任何数据交互时,发送保活探测报文;设置保活探测报文的发送时间间隔keepInterval;设置保活探测报文的总发送次数keepCount。如果在keepCount次的保活探测报文均没有收到客户端的回应,则服务器端即关闭与客户端的TCP链接。






TCP 和 UDP 区别及应用场景?



1
TCP和UDP区别 



面向连接 vs 无连接

可靠性:TCP 可靠,丢包重传;UDP 不可靠。

有序性:TCP 利用序列号保证了数据的有序性(数据到达会排序)

速度:TCP 创建连接,速率较慢;UDP 较快

TCP 流模式,UDP 报文模式




2
TCP和UDP应用场景



TCP:

当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如 HTTP、HTTPS、FTP 等传输文件的协议,POP、SMTP 等邮件传输的协议。日常生活中,常见使用 TCP 协议的应用如下:

  • 万维网(HTTP)

  • 邮件(POP、SMTP);

  • 文件传输(FTP);


UDP:

当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用 UDP。日常生活中常见使用 UDP 协议的应用如:语音,视频。





往期内容宠幸


1.Python接口自动化-接口基础(一)

2.Python接口自动化-接口基础(二)


3.Python接口自动化-requests模块之get请求


4.Python接口自动化-requests模块之post请求


5.Python接口自动化之cookie、session应用


6.Python接口自动化之Token详解及应用


7.Python接口自动化之requests请求封装


8.Python接口自动化之pymysql数据库操作


9.Python接口自动化之logging日志


10.Python接口自动化之logging封装及实战


https://mp.weixin.qq.com/s/oI4SWtvtIhdmxdW71yfryg