• 软件测试工程师网络知识面试题


    打开一个网站会发生什么?

    1.URL解析
    域名解析为IP
    编码
    对于一个完整的网址(URL),通常包括传输协议、域名、端口、路径、参数、哈希值等六个部分。比如对于 http://www.baidu.com/index.html?name=mo&age=25#dowell,它可以进行如下划分:

    2.DNS查询
    查询浏览器是否有缓存
    查询操作系统是否有缓存
    查询路由器是否有缓存
    3.TCP连接
    应用层:发送HTTP请求
    传输层:传输报文,http 是基于 tcp 协议,需要进行三次握手。其实传输层还有一个协议UDP协议。
    三次握手类似打电话:
    客户端:向服务端拨打电话,说:你好,我要跟你谈论事情
    服务端:好啊,那可以开始了
    客户端:开始说事情

    TCP重传
    tcp 的三次握手确保了每一个消息都有去有回。一旦某个消息得不到有效回应 tcp 协议就会重发该消息,直到得到有效回应。
    去重
    网络层:将数据打包,寻找传输路线
    链路层:发送数据
    建立连接之后,浏览器开始向服务器发送 request 请求,请求数据包。请求信息包含一个头部和一个请求体。请求体告诉了服务器想要的资源是什么。
    在 request 请求中,它大致包含以下信息:

    GET / HTTP/1.1
    
    Host: google.com
    
    Accept:*/*
    
    Pragma: no-cache
    
    Cache-Control: no-cache
    
    User-Agent:Mozilla/4.04[en](Win95;I;Nav)
    
    

    GET / 指从服务器上请求一个资源,这个资源的位置是 /。另外,Host: google.com 代表请求的主机名是 google.com。
    4.服务器处理
    建立连接后,就可以互相传送数据了。客户端按照 http 协议的格式将数据组装好向服务器发起请求,服务器接收到请求并将处理结果响应给浏览器。
    服务端的 http 服务器软件一般有 Apache 和 Nginx,Apache 或 Nginx 又将请求交由具体的编程语言(Java、Python、PHP 等)去处理。
    服务器又将程序处理的结果按照 http 协议格式原路返回给客户端。这就是服务器响应,响应分为两个部分:响应头和响应主体。其中网页的代码包含在响应主体中。
    一个 Response 大致包含以下内容:

    HTTP/1.0200OK
    
    Date:Mon,31Dec200104:25:57GMT
    
    Server:Apache/1.3.14(Unix)
    
    Content-type:text/html
    
    Last-modified:Tue,17Apr200106:46:28GMT
    
    Etag:"a030f020ac7c01:1e9f"
    
    Content-length:39725426
    
    Content-range:bytes554554-40279979/40279980
    

    断开连接
    在完成了数据通信之后,就要考虑断开连接了,毕竟任务完成了就要空出系统资源来。tcp 的断开相对于连接来说,其实是有四次握手的,通常被称作四次挥手,就是挥手拜拜了。

    5.浏览器接收
    浏览器根据状态码做不同的事情,
    解压缩
    存缓存
    解析
    6.页面渲染
    浏览器将域名通过网络通信从服务器拿到html文件后:
    1.根据html文件构建DOM树和CSSOM树。构建DOM树期间,如果遇到JS,阻塞DOM树及CSSOM树的构建,优先加载JS文件,加载完毕,再继续构建DOM树及CSSOM树。
    2.构建渲染树(Render Tree)。
    3.页面的重绘(repaint)与重排(reflow,也有称回流)。页面渲染完成后,若JS操作了DOM节点,根据JS对DOM操作动作的大小,浏览器对页面进行重绘或是重排。
    参考:https://www.cnblogs.com/chenyoumei/p/9156849.html

    浏览器收到 Response 后,首先对其进行加载,并根据其中的代码继续向服务器请求资源(css、javascript、img 等),加载完成后对页面进行解析。
    解析的过程,其实就是生成解析树,即Dom树。Dom树是由Dom元素及属性节点组成,加上css解析的样式对象和js解析后的动作实现。
    接下来对Dom树进行可视化表示,也就是渲染,生成一颗渲染树。
    最后一步就是绘制网页,浏览器根据渲染树将元素绘制到屏幕上,同时执行js,完成整个页面的展示。

    OSI七层模型和TCP五层模型

    OSI七层模型从上到下依次为:
    应用层:为应用程序提供网络服务;
    表示层:数据格式转换、数据压缩和数据加密;
    会话层:建立、断开和维护通信链接;
    传输层:为上层协议提供端到端的可靠传输;
    网络层:寻址和路由;
    数据链路层:定义通过通信媒介互连的设备之间传输的规范;
    物理层:利用物理传输介质为数据链路层提供物理连接。
    TCP五层模型相比OSI七层模型,将OSI的应用层、表示层和会话层合为一层:应用层,其他不变。

    什么是面向有连接型和面向无连接型?

    面向有连接型传输包括会话建立、传输数据和会话断开,此外还包括保证传输可靠性的各种措施,比如超时重传、流量控制等,常见的面向有连接传输有TCP;
    面向无连接型传输仅提供基本的传输数据的功能,即使接收端不存在,发送端也能发送数据包,常见的面向无连接传输有UDP、IP。

    UDP和TCP的区别是什么?

    UDP和TCP都是传输层的协议,用来建立可靠的通信传输链接的。
    UDP仅提供了最基本的数据传输功能,至于传输时连接的建立和断开、传输可靠性的保证这些UDP统统不关心,而是把这些问题抛给了UDP上层的应用层程序去处理,自己仅提供传输层协议的最基本功能。
    TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,会在传输开始前建立连接,传输结束后断开连接,此外,TCP还采取了多种措施保障传输的可靠性。
    TCP和UDP的区别如下:
    TCP是面向有连接型,UDP是面向无连接型;
    TCP是一对一传输,UDP支持一对一、一对多、多对一和多对多的交互通信;
    TCP是面向字节流的,即把应用层传来的报文看成字节流,将字节流拆分成大小不等的数据块,并添加TCP首部;UDP是面向报文的,对应用层传下来的报文不拆分也不合并,仅添加UDP首部;
    TCP支持传输可靠性的多种措施,包括保证包的传输顺序、重发机制、流量控制和拥塞控制;UDP仅提供最基本的数据传输能力。

    TCP对应的应用层协议有哪些?UDP对应的应用层协议有哪些?

    TCP对应的典型的应用层协议:
    FTP:文件传输协议;
    SSH:远程登录协议;
    HTTP:web服务器传输超文本到本地浏览器的超文本传输协议。
    UDP对应的典型的应用层协议:
    DNS:域名解析协议;
    TFTP:简单文件传输协议;
    SNMP:简单网络管理协议。

    什么是http协议?http和https的区别?

    http协议是应用层的协议,中文名称是超文本传输协议,是客户端和服务端相互通信时将信息以http报文的形式传输。
    https可以简单的理解为:https = http + 加密 + 认证 + 完整性保护。

    http协议的缺点:
    通信使用明文,内容可能被窃听。
    通信双方的身份无法得到认证,身份可能遭遇伪装。
    无法验证报文的完整性。

    针对以上问题,https的改进措施:
    加密。https协议通过SSL或者TLS协议将报文内容进行加密,client端进行加密,server端进行解密。
    认证。通过值得信赖的第三方机构颁布证书,即可确认通信双方的身份。客户端持有证书即可完成客户端身份的确认,客户端通信前会查看服务端的证书。
    完整性保护。可以通过MD5等散列码进行通信内容的校验。

    为什么说http协议是无状态协议?怎么解决Http协议无状态协议?

    http协议是一种无状态协议,协议自身不对请求和响应之间的通信状态进行保存,即对发送过来的请求和响应都不做持久化处理,把http协议设计的如此简单是为了更快地处理大量事务。

    为了解决http协议不能保存通信状态的问题,引入了Cookie状态管理。Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务端发送的响应报文的一个叫Set-Cookie的首部字段,通知客户端保存Cookie。当下次客户端再往该服务端发送请求时,客户端会自动在请求报文中加入Cookie值发送出去,服务端发现客户端发来的Cookie后,会检查是哪一个客户端发来的连接请求,对比服务器上的记录,最后得到之前的状态信息。

    URI和URL的区别?

    URI: Uniform Resource Identifier,统一资源标识符,用来唯一标识互联网中的一份资源。
    URL: Uniform Resource Locator,统一资源定位符,我们访问网站的网址就是URL。
    URL是URI的子集。
    URI的目的就是唯一标识互联网中的一份资源,具体可以用资源名称、资源地址等,但是资源地址是目前使用最广泛的,因此URL就容易和URI混淆。URI相当于抽象类,URL就是这个抽象类的具体实现类。

    常见的http动词有哪些?

    GET: 从服务器获取资源
    POST: 在服务器新建资源
    PUT: 在服务器更新资源
    DELETE: 在服务器删除资源
    HEAD: 获取资源的元数据
    OPTIONAL: 查询对指定的资源支持的方法

    常见的http返回码有哪些?

    200:请求被正常处理
    204:请求被受理但没有资源可以返回
    206:客户端只是请求资源的一部分,服务器只对请求的部分资源执行GET方法,相应报文中通过Content-Range指定范围的资源。
    301:永久性重定向
    302:临时重定向
    303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
    304:发送附带条件的请求时,条件不满足时返回,与重定向无关
    307:临时重定向,与302类似,只是强制要求使用POST方法
    400:请求报文语法有误,服务器无法识别
    401:请求需要认证
    403:请求的对应资源禁止被访问
    404:服务器无法找到对应资源
    500:服务器内部错误
    503:服务器正忙

    get和post有什么区别?


    ❖ http的method字段不同,一个是get,一个是post
    ❖ post可以附加body,可以⽀持form、json、xml、binary等各种数据格式
    ❖ ⾏业通⽤的规范
    ❖ ⽆状态变化的建议使⽤get请求
    ❖ 数据的写⼊与状态修改建议⽤post

    cookie、session的区别

    ❖ cookie:浏览器接受服务器的Set-Cookie指令,并把cookie保存到电脑上,每
    个⽹站保存的cookie只作⽤于⾃⼰的⽹站
    ❖ session:数据存储到服务端,只把关联数据的⼀个加密串放到cookie中标记

    token、session的区别

    ❖ token是⼀个⽤户请求时附带的请求字段,⽤于验证⾝份与权限
    ❖ session可以基于cookie,也可以基于query参数,⽤于关联⽤户相关数据
    ❖ 跨端应⽤的时候,⽐如android原⽣系统不⽀持cookie
    ❖ 需要⽤token识别⽤户
    ❖ 需要⽤把sessionid保存到http请求中的header或者query字段中

  • 相关阅读:
    php配置GD库
    Linux 安装 Apache2+php5+gd+freetype2
    gd库
    数组和链表的区别
    python 整数中1出现的次数
    python栈--字符串反转,括号匹配
    Linux基础知识
    操作系统
    后台面试问题
    python 面向对象
  • 原文地址:https://www.cnblogs.com/Uni-Hoang/p/13179145.html
Copyright © 2020-2023  润新知