功能测试所需要掌握的技能

一、熟练使用SQL和Linux知识,认识白盒黑盒测试

白盒测试:是通过源代码进行测试,不需要通过软件界面测试。
黑盒测试:通过软件按照需求文档测试功能是否完成,正常使用输出等,功能测试也叫黑盒测试。

SQL知识

(常见数据库主要是MAYSQL、ORECAL、Redis;其中Mysql数据库是典型的关系型数据库)
1、常用的 sql 语句一定会写。比如说增删改查之类。
常用的 sql :https://www.cnblogs.com/zhangpengnike/p/5545715.html
2、了解数据库的事务、会编写存储过程、熟练常用的系统函数。

事务
事务4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。
隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行持久性(Durability):一个事务一旦提交,他对数据库的修改应该永久保存在数据库。

举例
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

更多事务相关知识:https://mp.csdn.net/mdeditor#
储存过程知识:https://mp.csdn.net/mdeditor/86712407#
数据库函数:https://www.cnblogs.com/tianqizhi/p/9214320.html

3、了解并可以进行数据库的备份、迁移、还原、镜像等操作
4、对 sql 语句进行调优,并对可以对运行的语句监控查看性能
5、了解数据库集群等操作。
6、数据库和表操作

Linux知识
Linux是测试人员的基础功,不需要掌握太难或者很不常见的Linux命令,正常能做到查看日志,定位问题就可以了。
常用的Linux基本命令,面试经常会问的,或者给出一种场景,问你用什么命令。
详细另一篇博文:https://mp.csdn.net/mdeditor/86710671#

二、日志相关
初级测试人员在工作时经常遇到,发现bug,开发不承认或者不愿意解决的情况,测试人员怎么摆脱这样的问题呢?
那就是根据发现的bug根据日志级别,来查看日志,定位问题。
那这里首先要说一下日志级别了。
首先记住这一点:日志级别越高,输出的信息越少 。
具体的日志级别分为四级:
info : 代码 info 信息,不包括sql语句等一些debug信息
warning warning : 代码警告信息
error : 程序本身报错信息 java.lang.outindexERROR…
critical :几乎用不到
一般不符合需求的bug在 debug中,程序本身报错的bug在 error中。

三、测试用例相关

在测试过程中很重要的一类文档,它是测试工作的核心、是一组在测试时输入输出的标准、是软件需求的具体对照。编写测试用例,是测试人员的基本功,但是真正能写好的人并不多。
测试用例必须包含的内容:
用例编号、用例名称、测试背景、前置条件、优先级、重要级、测试数据、测试步骤、预期结果、实际结果、备注。
测试用例的编写流程
需求分析->提取测试点->测试用例编写->测试用例评审
测试用例常用设计方法
1.等价类的划分
比如用户测试用例,用户名为8位数字,可以想到的测试用例有:
1)空用户名
2)1-7位数字
3)9位数字
4)非数字
这些都是无等价的。
2.边界值
就如登录密码,密码位99,它的边界值就为98-100.
3.错误推测法
没有固定形式,依靠经验和直觉。

编写用例的思路
(1)根据产品的RPD,提取测试点。
(2)根据数据流的走向。
(3)根据的架构部署。
(4)编写测试用例的常用方法:等价类划分法、边界值分析法、流程图法等。
(5)覆盖弱网测试、接口测试、安全测试、性能测试等。
(6)常用测试工具有:Postman、 Charles、 Fiddler 、Jemter、Loadrunner等。

编写测试用例注意事项
(1)根据项目的实际情况设计测试用例表格
(2)用例格式不要生搬硬套
(3)根据具体情况编写
(4)学会质疑需求,不要完全按照需求来写测试用例,要从客户和产品的角度来理解需求,看到需求之外的功能和体验

管理测试用例
为什么要管理测试用例?
(1)测试用例数目巨大
(2)测试用例会根据需求的改变而改变
(3)测试用例需要长期补充完善
如何管理测试用例?
(1)原始的Excel管理
(2)专业的项目管理系统(eg:git、禅道、JIRA、Confiuence等)一般都为web格式

四、了解业务
了解业务并理解才能把功能测试做好,并且有一定的提高。业务熟悉后,会知道很多常识,知道下面的常识之后,你就可以尝试进阶,学习做自动化测试、接口测试、性能测试。
1、什么时候介入自动化 => 当你系统趋于稳定的时候
2、什么时候介入接口测试 => 当接口开发完毕的时候
3、什么时候介入性能测试 => 当出现促销的时候,或者抢购的时候(618大促,过年抢火车票,抢优惠券)
比如说,5000张优惠券,大概有多少人抢,在多长时间内抢完

五、bug管理
bug的定义:不符合需求、程序本身出错、不符合用户使用习惯
bug的生命周期:从开始发现到解决结束
bug描述环境信息:操作系统/数据库/浏览器/软件版本
所属功能模块、测试/开发人员、严重等级(1-5)、客户优先级、风险程度、状态、重现步骤、实际结果、是否要回归问题等

bug严重等级:
致命:系统无法运行,主要功能模块无法使用,无法启动或异常退出,系统无法登陆。
高:主要功能有缺陷,但不影响系统的稳定性,功能没有实现,存在报错,计算错误。
中:界面、性能缺陷,大数据操作时无响应。
低:易用性和建议性的问题,界面颜色搭配不好,有错别字,文字不整等。

测试报告:把测试过程和结果写成文档,对发现的问题和缺陷进行分析,一般由测试组长写,测试人员需要了解一下测试报告中都有哪些内容。
测试报告有哪些内容?
标识。系统概述、文档概述、引用文件、测试结果概述(测试总体评估、测试环境影响、改进建议)、详细测试结果、测试项目标识符(结果小结、遇到的问题、测试记录)、评价。

详细资料:
https://wenku.baidu.com/view/af4a091659eef8c75fbfb336.html

六、Http与https协议会经常问的问题
1.http

http中文程超文本传输协议,默认端口号为80,http建立在tcp协议之上,tcp为传输层,http为应用层,http由请求和响应构成,一个请求一个响应,每一次请求和响应完成之后就会断开tcp连接,所以它是无状态的连接。
特点:
无连接:含义是每次连接只处理一个请求,服务器处理完请求响应后就断开了tcp连接,好处是可以节省传输时间。
无状态: 含义是对事物处理没有记忆功能,坏处(有后续处理时需要重传前面的信息,会导致数据量增大);好处(后记不需要任何处理时它的响应就很快);
工作原理:
用户用键盘输入地址或点击网页某个连接,浏览器通过DSN解析目标,与网页所在的服务器建立TCP连接 > 客服端发送一个请求给服务器>服务器响应信息 > 客户端接收返回的信息后通过浏览器显示在页面上>断开tcp连接。

2.https

https中文安全超文本传输协议,默认端口号为443,https基于SSL,ssl证书需要购买,通过它传输的内容都是加密的,简单的说HTTPS它是安全版的http,相当于ssl+http。每次在请求前,先建立ssl,确保接下来的通信是加密的,无法轻易被截取分析。一是能保证数据传输的安全,二是确认网站的真实性。

工作原理:
1、Client使用HTTPS的URL访问Web服务器,要求与Web服务器建立SSL连接。
2、Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。  
3、客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。   
4、客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。   
5、Web服务器利用自己的私钥解密出会话密钥。   
6、Web服务器利用会话密钥加密与客户端之间的通信。

3.http和https的区别
主要区别就在于传输内容是否加密
HTTP无需SSL证书,在浏览器地址栏以http://+域名方显示,无绿色小锁图标;
HTTPS在浏览器地址栏以https://+域名方式显示,在HTTPS有绿色小锁图标代表安全加密。

七.总结TCP 和 UDP 的区别

  1. TCP是面向连接(Connection oriented)的协议,UDP是无连接(Connection less)协议;
    TCP用三次握手建立连接:1) Client向server发送SYN;2) Server接收到SYN,回复Client一个SYN-ACK;3) Client接收到SYN_ACK,回复Server一个ACK。到此,连接建成。UDP发送数据前不需要建立连接。

  2. TCP可靠,UDP不可靠;
    TCP丢包会自动重传,能保证数据正确性;UDP不会,数据可能丢失。

  3. TCP有序,UDP无序;
    消息在传输过程中可能会乱序,后发送的消息可能会先到达,TCP会对其进行重排序,UDP不会。

  4. TCP无界,UDP有界;
    TCP通过字节流传输,UDP中每一个包都是单独的。

  5. TCP有流量控制(拥塞控制),UDP没有;
    主要靠三次握手实现。以及慢开始、拥塞避免、快重传、快恢复

  6. TCP传输慢,UDP传输快;
    因为TCP需要建立连接、保证可靠性和有序性,所以比较耗时。这就是为什么视频流、广播电视、在线多媒体游戏等选择使用UDP。

  7. TCP是重量级的,UDP是轻量级的;
    TCP要建立连接、保证可靠性和有序性,就会传输更多的信息,如TCP的包头比较大。

  8. TCP需要更多资源,UDP则要好上很多

  9. 应用场合不同:TCP一般应用在对可靠性要求比较高的场合,例如http,ftp等等。而UDP一般应用在对实时性要求较高场合,例如视频直播,大文件传输等等

小结:
TCP是面向连接的、可靠的、有序的、速度慢的协议;
UDP是无连接的、不可靠的、无序的、速度快的协议。
TCP头部需要20字节,UDP头部只要8个字节。
TCP无界有拥塞控制,TCP有界无拥塞控制。

八.session与token相关区别

  1. 为什么要有session的出现?
    是由于网络中http协议造成的,因为http本身是无状态协议,这样,无法确定你的本次请求和上次请求是不是你发送的。如果要进行类似论坛登陆相关的操作,就实现不了了。
  2. session生成方式?
    浏览器第一次访问服务器,服务器会创建一个session,然后同时为该session生成一个唯一的会话的key,也就是sessionid,然后,将sessionid及对应的session分别作为key和value保存到缓存中,也可以持久化到数据库中,然后服务器再把sessionid,以cookie的形式发送给客户端。这样浏览器下次再访问时,会直接带着cookie中的sessionid。然后服务器根据sessionid找到对应的session进行匹配;
    还有一种是浏览器禁用了cookie或不支持cookie,这种可以通过URL重写的方式发到服务器;
    简单来讲,用户访问的时候说他自己是张三,他骗你怎么办? 那就在服务器端保存张三的信息,给他一个id,让他下次用id访问。
  3. 为什么会有token的出现?
    首先,session的存储是需要空间的,其次,session的传递一般都是通过cookie来传递的,或者url重写的方式;而token在服务器是可以不需要存储用户的信息的,而token的传递方式也不限于cookie传递,当然,token也是可以保存起来的;
  4. token的生成方式?
    浏览器第一次访问服务器,根据传过来的唯一标识userId,服务端会通过一些算法,如常用的HMAC-SHA256算法,然后加一个密钥,生成一个token,然后通过BASE64编码一下之后将这个token发送给客户端;客户端将token保存起来,下次请求时,带着token,服务器收到请求后,然后会用相同的算法和密钥去验证token,如果通过,执行业务操作,不通过,返回不通过信息;
  5. token和session的区别?
    token和session其实都是为了身份验证,session一般翻译为会话,而token更多的时候是翻译为令牌;
    session服务器会保存一份,可能保存到缓存,文件,数据库;同样,session和token都是有过期时间一说,都需要去管理过期时间;
    其实token与session的问题是一种时间与空间的博弈问题,session是空间换时间,而token是时间换空间。两者的选择要看具体情况而定。
    虽然确实都是“客户端记录,每次访问携带”,但 token 很容易设计为自包含的,也就是说,后端不需要记录什么东西,每次一个无状态请求,每次解密验证,每次当场得出合法 /非法的结论。这一切判断依据,除了固化在 CS 两端的一些逻辑之外,整个信息是自包含的。这才是真正的无状态。
    而 sessionid ,一般都是一段随机字符串,需要到后端去检索 id 的有效性。万一服务器重启导致内存里的 session 没了呢?万一 redis 服务器挂了呢?

方案 A :我发给你一张身份证,但只是一张写着身份证号码的纸片。你每次来办事,我去后台查一下你的 id 是不是有效。
方案 B :我发给你一张加密的身份证,以后你只要出示这张卡片,我就知道你一定是自己人。
就这么个差别。

九.session和cookie的区别
1、数据存放位置不同:
cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、安全程度不同:
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
3、性能使用程度不同:
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、数据存储大小不同:
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。
5、会话机制不同
session会话机制:session会话机制是一种服务器端机制,它使用类似于哈希表(可能还有哈希表)的结构来保存信息。

cookies会话机制:cookie是服务器存储在本地计算机上的小块文本,并随每个请求发送到同一服务器。 Web服务器使用HTTP标头将cookie发送到客户端。在客户端终端,浏览器解析cookie并将其保存为本地文件,该文件自动将来自同一服务器的任何请求绑定到这些cookie。

十.公钥和私钥的区别
如果我用私钥加密一段数据(当然只有我可以用私钥加密,因为只有我知道2是我的私钥),结果所有的人都看到我的内容了,因为他们都知
道我的公钥是1,那么这种加密有什么用处呢?
但是我的好朋友x说有人冒充我给他发信。怎么办呢?我把我要发的信,内容是c,用我的私钥2,加密,加密后的内容是d,发给x,再告诉他
解密看是不是c。他用我的公钥1解密,发现果然是c。
这个时候,他会想到,能够用我的公钥解密的数据,必然是用我的私钥加的密。只有我知道我得私钥,因此他就可以确认确实是我发的东西。
这样我们就能确认发送方身份了。这个过程叫做数字签名。当然具体的过程要稍微复杂一些。用私钥来加密数据,用途就是数字签名。
总结:公钥和私钥是成对的,它们互相解密。公钥加密,私钥解密。
私钥数字签名,公钥验证。

十一.get和post的区别
get获取数据,用于登录,用于小文件数据提交,表单提交bapost无限制具安全。
http请求方法中get和post的区别
GET方法:
Ÿ 查询字符串(名称/值对)是在 GET 请求的 URL 中发送的;
Ÿ GET 请求可被缓存;
Ÿ GET 请求保留在浏览器历史记录中;
Ÿ GET 请求可被收藏为书签;
Ÿ GET 请求不应在处理敏感数据时使用;
Ÿ GET 请求有长度限制;
Ÿ GET 请求只应当用于取回数据;
POST方法
Ÿ 查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的;
Ÿ POST 请求不会被缓存;
Ÿ POST 请求不会保留在浏览器历史记录中;
Ÿ POST 不能被收藏为书签;
Ÿ POST 请求对数据长度没有要求;
其实以上说的都只是GET、POST在http层面上的区别,在TCP/IP层面也有区别,也是二者真正的区别,即GET会产生一个tcp数据包,post两个。具体就是:
Ÿ GET请求时,浏览器会把headers和data一起发送,服务器响应200(返回数据);
Ÿ POST请求时,浏览器会先发送headers,服务器响应100 continue,浏览器再发送data,服务器响应200(返回数据)。

十一、从输入url加载到页面期间发生了什么
功能测试所需要掌握的技能_第1张图片
从耗时的角度,浏览器请求、加载、渲染也个页面,时间花在下面五件事情上:
1、DNS查询;
2、TCP连接;
3、HTTP请求即响应;
4、服务器响应;
5、客户端渲染。

DNS查询
功能测试所需要掌握的技能_第2张图片
DNS(Domain Name System域名系统),用于TCP/ICP网络,用来将主机名和域名转化为IP地址的工作,大致流程:
Ÿ 如果浏览器有缓存,直接使用浏览器缓存,否则使用本级缓存,再没有就使用host;
Ÿ 如果本地没有,就向dns域名服务器查询到对应的IP
由于dns的解析很耗时,当解析域名过多的时候,便会导致首屏加载变得过慢。

TCP连接
     http是一个基于TCP/IP通信协议进行数据的传输。
    TCP(传输控制协议)——应用程序之间通信。当应用程序希望通过TCP与另一个应用程序通信时,它会发送一个通信请求。在双方“握手”之后,TCP将在两个应用程序之间建立通信,直到一方或双方关闭为止。UDP(用户数据包协议,应用程序之间的简单通信)和TCP很相似,但更简单,可靠性也更低。
    IP(用户数据包协议)——计算机之间的通信。通过IP,消息或者其他数据被分割为小的独立的包,通过因特网,将每个包路由至目的地。
建立连接的三次握手
客户端:hello,你是server么? 服务端:hello,我是server,你是client么 客户端:yes,我是client
建立连接成功后,接下来就正式传输数据。

断开连接的四次挥手
主动方:我已经关闭了向你那边的主动通道了,只能被动接收了 被动方:收到通道关闭的信息 被动方:那我也告诉你,我这边向你的主动通道也关闭了 主动方:最后收到数据,之后双方无法通信
    
HTTP请求响应
    HTTP(HyperText Transfer Protocol超文本传输协议),是基于TCP的应用层协议,是互联网的基础协议。历经了HTTP/0.9,HTTp/1.0,HTTP/1.1,HTTP/2 几个版本。
HTTP/0.9
    发布于1991年,它不涉及数据包(package)传输,主要规定了客户端和服务器之间的传输方式,默认使用80端口。该版本只有GET请求方式,服务器只能回应HTML格式的字符串。当服务器发送完毕后,就关闭TCP连接。
HTTP/1.0
    发布于1996年5月,增加了许多内容。
Ÿ 可以发送任何形式的内容,包括文字、图像、视频、二进制文件等等;
Ÿ 除了GET请求方式,还引入了POST和HEAD命令;
Ÿ 请求和回应的格式也变了。每次通信都必须包括头信息(HTTP header),回应包含了状态码、缓存、内容编码等。
    该版本的缺点是每个TCP连接只能发送一个请求,数据发送完毕,连接就关闭,若还要请求其他资源,就必须再新建一个连接。为解决这个问题,可在请求时,使用Connection: keep-alive。
HTTP/1.1
    发布于1997年1月,进一步完善了HTTP协议,直到现在还是最流行的版本。
    1.1版的最大变化,是引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用。不用声明Connection: keep-alive。当客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。目前,对于同一个域名,大多数浏览器允许同时建立6个持久连接。此外,还新增了 新增PUT、DELETE、PATCH、OPTIONS方法。
    该版本的缺点是,虽然它允许复用TCP连接,但在同一个TCP连接里,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应。要是前面的回应特别慢,后面就会有许多请求排队等着,这称为[“队头堵塞”](Head-of-line blocking)。为了避免这个问题,只有两种方法:一是减少请求数,二是同时多开持久连接。比如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等。
HTTP/2
    发布于2015年,它不叫 HTTP/2.0,是因为标准委员会不打算再发布子版本了,下一个新版本将是 HTTP/3。它有以下的一些特性:
Ÿ 多路复用。为了解决HTTP/1.1中对头堵塞的问题,在该版本复用TCP连接时,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应。举个例子,在一个TCP连接里面,服务器同时收到了A请求和B请求,先回应A请求,结果发现处理过程非常耗时,于是就发送A请求已经处理好的部分, 接着回应B请求,完成后,再发送A请求剩下的部分。
Ÿ 首部压缩。HTTP请求是无状态的,即服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器。所以,请求的很多字段都是重复的,比如Cookie和User Agent,一模一样的内容,每次请求都必须附带,这会浪费很多带宽,也影响速度。HTTP/2 对这一点做了优化,引入了头信息压缩机制(header compression)。一方面,头信息使用gzip或compress压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。
Ÿ 二进制分帧。HTTP/2 是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧"(frame):头信息帧和数据帧。
Ÿ 服务器推送。HTTP/2 允许服务器未经请求,主动向客户端发送资源。常见场景是客户端请求一个网页,这个网页里面包含很多静态资源。正常情况下,客户端必须收到网页后,解析HTML源码,发现有静态资源,再发出静态资源请求。其实,服务器可以预期到客户端请求网页后,很可能会再请求静态资源,所以就主动把这些静态资源随着网页一起发给客户端了。
Ÿ 请求优先级。如果流被赋予了优先级,它就会基于这个优先级来处理,由服务器决定需要多少资源来处理该请求。

服务器响应
服务器处理完客户端的请求后要做出响应,很多时候可以通过状态码来判断:

常见状态码及状态描述的说明如下:
Ÿ 1xx——指示信息,表示请求已接收,继续处理
Ÿ 2xx——成功,表示请求已被成功接收、理解、接受
Ÿ 3xx——重定向,要完成请求必须进行更进一步的操作
Ÿ 4xx——客户端错误,请求有语法错误或请求无法实现
Ÿ 5xx——服务器端错误,服务器未能实现合法的请求
常见状态码:
Ÿ 200——表明该请求被成功地完成,所请求的资源发送回客户端
Ÿ 301 ——请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
-302 ——临时移动。
Ÿ 304——自从上次请求后,请求的网页未修改过,请客户端使用本地缓存
Ÿ 400——客户端请求有错(譬如可以是安全模块拦截)
Ÿ 401——请求未经授权
Ÿ 403——禁止访问(譬如可以是未登录时禁止)
Ÿ 404——资源未找到
Ÿ 500——服务器内部错误
Ÿ 503——服务不可用。服务器目前无法使用
Ÿ 504——网关超时。服务器作为网关或代理,但是没有及时从上游服务器收到请求
Ÿ 505—— HTTP版本不受支持。服务器不支持请求中所用的 HTTP 协议版本
客户端渲染
    当下流行的浏览器有Webkit内核 的Chrome、Safari,Geoko内核的Firefox,Trident内核的IE,不同浏览器的内核不同,各个浏览器的渲染引擎的渲染过程也略有不同。今天主要讲述以Webkit为内核的Chrome浏览器的渲染过程。
它大致分为以下五个步骤:
1、处理HTML标记,构建DOM树;
2、处理CSS标记,构建CSSOM树;
3、将DOM树和CSSOM树合并成渲染树;
4、布局渲染树,计算各元素的尺寸、位置;
5、绘制渲染树,绘制页面像素信息。

工作原理:
1、首先,在浏览器地址栏中输入url

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

3、在发送http请求前,需要域名解析(DNS解析)(DNS(域名系统,Domain Name System)是互联网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住IP地址。),解析获取相应的IP地址。

dns也是可以进行优化加载速度的
4、浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。(TCP即传输控制协议。TCP连接是互联网连接协议集的一种。)

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

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

7、浏览器收到HTTP响应

8、读取页面内容,浏览器渲染,解析html源码

9、生成Dom树、解析css样式、js交互
10、客户端和服务器交互

11、ajax查询

其中,步骤2的具体过程是:

浏览器缓存:浏览器会记录DNS一段时间,因此,只是第一个地方解析DNS请求;
操作系统缓存:如果在浏览器缓存中不包含这个记录,则会使系统调用操作系统,获取操作系统的记录(保存最近的DNS查询缓存);
路由器缓存:如果上述两个步骤均不能成功获取DNS记录,继续搜索路由器缓存;
ISP缓存:若上述均失败,继续向ISP搜索。

十三.正向代理和反向代理的区别
正向代理的是客服端,反向代理的是服务器。
正向代理

  • 正向代理隐藏了真实的请求客户端。服务端不知道真实的客户端是谁,客户端请求的服务都被代理服务器代替来请求。

正向代理服务器,用户可以知道web服务的数据库等系统的IP地址和端口号等敏感息,由于暴露了这些关键信息,容易遭受到恶意攻击所以安全性比较差。

正向代理的典型应用就是为火墙内局域网局域网客户端提供访问Internet的途径。其次使用正向代理还可以实使用缓冲特性减少网络使用率以及权限验证等功能(如上网权限:因为要连接互联网首先需要经过代理服务器)
举个例子:
   我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站
客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代的端口号

总结来说:
正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
  正向代理的作用:
  (1)访问原来无法访问的资源,如google
(2) 可以做缓存,加速访问资源
  (3)对客户端访问授权,上网进行认证
  (4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

反向代理

  • 反向代理隐藏了真实的服务端,访问者者并不知道自己访问的是一个代理,因为客户端不需要任何配置就可以访问。

反向代理用到了反向代理服务器,使用反向代理,典型的应用是将防火墙后面的服务器提供给Intenet用户访问,隐藏了web应用服务,如数据库的IP地址、端口号等信息,提高了系统的安全性等,同时使用反向代理还可以实现多台服务器的负载均衡,启用高级的URL和管理技术,使处于不同web服务器系统的web界面同时存在一个URL空间下,提高系统性能。
举个例子:
当我们请求 ww.baidu.com 的时候,就像拨打10086一样,背后可能有成千上万台服务器为我们服务,但具体是哪一台,你不知道,也不需要知道,你只需要知道反向代理服务器是谁就好了,ww.baidu.com 就是我们的反向代理服务器,反向代理服务器会帮我们把请求转发到真实的服务器那里去。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。
反向代理的作用:
(1)保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击
大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。
(2)负载均衡,通过反向代理服务器来优化网站的负载

正向代理和反向代理安全性分析

  1. 正向代理:
    正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此,必须采取安全措施确保仅为经过授权的客户端提供服务
  2. 反向代理:
    反向代理对外是透明的,访问者并不知道自己访问的是一个代理
    正向代理和反向代理应用场景举例
    一般对于企业内部管理系统,使用正向代理的方式,释放专门的网络带宽,特定域名实现某些功能只能有部分员工有权限访问。
    对于互联网行业,如理财应用,为实现系统的安全性,采用反向代理的方式,对用户隐藏的后台应用的部署方式、结构等敏感信息,提供一个统一的域名和给用户访问。

你可能感兴趣的:(小鹿不撞)