网络分层模型
OSI7层模型
1、应用层:采用何种协议
2、表示层:数据格式和标准的格式转换--图片、文字、声音
3、会话层:何时建立连接,保持多久
4、传输层:管理2个节点之间的数据传输。负责可靠传输
5、网络层:地址管理和路由选择,经过哪个路由更近更快的传递到目标地址。
6、数据链路层:Mac地址,负责数据帧和比特流之间的转换。
7、物理层:功能:传输信息的介质规格、将数据以实体呈现并传输的规格、接头规格。该层包括物理连网媒介;检查电压,不提供纠错服务。
TCP/IP 4层模型
应用层(HTTP、SMTP、FTP、Telnet协议)
传输层(TCP、UDP协议)
网络层(IP协议)
网络接口层(Ethernet等)
HTTPS的连接过程
1、浏览器访问HTTPS的网站,要求与Web服务器建立SSL连接。
2、Web服务器收到客户端的请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端
3、客户浏览器验证服务器送过来的证书,是否由自己信赖的CA中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告信息:警告客户这个证书是不可信赖的,询问客户是否需要继续。接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关信息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。
4、客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
5、Web服务器利用自己的私钥解密出会话密钥
6、Web服务器利用会话密钥加密与客户端之间的通信
HTTPS协议特点
1、HTTP:无证书、明文传输、80端口、无身份认证、无完整性校验
2、HTTPS:有证书、密文传输、443端口、有身份认证、有完整性校验
HTTP请求报文
1、请求行
请求方法、请求路径、请求协议/版本路径
2、请求头
从第二行到第N行。由“键值对”组成。可以有1对,也可以有N对。key:value
3、空行(区分请求头和请求正文)
4、请求正文(有的有,有的没有)
请求正文(体),可选项。
前端:用户能够看到的所有的界面的系统
后端:服务器(系统)
前台:淘宝买家端
后台:淘宝卖家端
HTTP响应报文
1、状态行
报文协议及版本 、状态码及状态描述
2、响应头
3、空行
4、响应正文
HTTP请求方法:GET/POST
get:向特定的资源发出请求。
post:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT:向全部资源位置上传其最新的内容,上传文件。
PATCH:是局部信息更新上传
DELETE:请求服务器删除Request-URL所标识的资源
TRACE:回显服务器收到的请求,主要用于测试和诊断。
OPTIONS:是用于请求获得由Request-URL标识的资源在请求/响应的通信过程中可以使用的功能选项。---黑客
HEAD:向服务器获取响应信息头中的信息
CONNECT HTTP/1.1协议中预留给能将链接改为管道方式的代理服务器。
GET方法和POST方法的区别:
GET方法:
------提交数据不安全,数据置于请求行,浏览器地址栏可见;
------URL长度每个浏览器限制数量不同,最后在2000字符以内
------GET方法速度快
------默认的请求方法,不需要提交大量数据、无敏感、保密数据时使用
POST方法:
------提交的数据安全,数据置于消息主体内,浏览器地址栏不可见
------提交的数据大小没有限制
------POST方法速度慢
------需要提交大量数据、有敏感、保密数据时使用
HTTP响应状态码
200:客户端请求成功
301:永久性重定向
302:临时性重定向
403:服务器收到请求,但拒绝提供服务
404:请求的资源不存在
500:服务器发生不可预期的错误
Content-Type参数
叫:是Internet Media Type,互联网媒体类型。存在于请求中或响应中:
如果出现在请求中,则表示:告诉服务端客户端实际发送的数据类型
如果出现在响应中,则表示:告诉客户端服务端实际发送的数据类型。
在请求中,常见的数据类型有:
application/x-www-form-urlencoded------> 以“键值对”的方式组织的数据
multipart/form-data------>一般需要上传文件的表单则用该类型
application/json------> Json字符串提交数据
Fidder抓包原理:
定义:是一个HTTP协议调试代理工具。它能记录并检查所有你的电脑和互联网之间的HTTP/HTTPS通讯,设置断点,查看所有“进出”的Fidder的数据(如cookie,html,js,css等资源)
关键词:HTTP协议代理,也就是说,它只能抓取HTTP请求(韩HTTPS)
在客户端和服务器之间,建立一个HTTP代理服务器
当启动的时候,Fiddler会默认把自己设置为系统代理
默认代理地址为127.0.0.1 默认端口为:8888
浏览器访问web网站的时候,请求会先发送到Fiddler
Fiddler再把请求转发给服务器
web服务器返回的响应,也会先到达Fiddler
Fiddler再把响应返回给浏览器
设置http之后,打开百度,报错不能抓取百度信息
------chrome://net-internals/#hsts
拉取到页面最下:在输入框中输入:www.baidu.com,点击delete按键,刷新百度页面抓包
Fiddler面板功能
inspector:定位bug是前端还是后端,报文
autoresponder:自动应答
composer:模拟器,接口测试
请求前断言
1、暂停抓包
2、进入界面设置数据信息
3、Fiddler-->设置请求前断言
4、开启抓包,且到界面进行提交等操作
5、找到请求,webform,修改请求参数
6、点击breakpoint-->run to completion,直到请求完成
7、验证界面数据
点击开始抓包,同时在百度输入框中,点击搜索
修改上图中的"哈哈哈",
之后分别点击“1”和“2”,最后再看百度
适用场景:如字段长度受限制的情况,可以通过该方法进行接口的相应信息确认。
验证不符合前端设置的数据传输后,业务逻辑的判断
修改响应报文
1、设置请求后断言
2、页面操作数据
3、在fiddler响应的textview修改响应的数据信息
4、点击run to comppletion
5、查看页面数据
使用场景:UI测试汇总,超长字符串的显示问题
自动应答
1、抓包获取请求
2、右击请求-->save--->保存响应--->响应体.json
3、修改文件,以text文本格式打开
4、fiddler--->enable rules
5、选择刚才的请求,点击添加按键
6、在下面的响应字段中选择刚才修改的数据文件.json
7、开启抓包,刷新页面
适用场景:在接口没有完成的情况下,可以模拟接口请求相应
模拟器适用
1、点击compser
2、拖拽到有请求参数的请求到compser
3、在request body中依据测试用例设计的数据进行修改参数(接口测试用例)
4、点击执行按键,就可以模拟接口测试
Cookie组成
1、Key = Value:键值对,可以设置要保存的Key/Value,注意这里的NAME不能和其他属性项的名字一样
2、Expires:过期时间,在设置的某个时间点后该Cookie就会失败
3、Domain:生成该Cookie的域名,如domain = “www.baidu.com”
4、Path:该Cookie是在当前的哪个路径下生成的,如path = /WP-admin
5、Secure:指定是否使用HTTPS安全协议发送Cookie,true---只能在HTTPS连接中传输,HTTP链接不会传输,所以不会被窃取到Cookie的具体内容,false---HTTP、HTTPS链接都可以传输
6、HttpOnly:如果在Cookie中设置了"HttpOnly"属性,那么通过程序(JS脚本、Applet等)将无法读取到Cookie信息,这样能有效的防止XSS攻击。
Cookie产生
1、客户端的某次请求--->发送给服务器
2、服务器产生一个Cookie,附加在HTTP响应头中(Set-Cookie),传递给客户端浏览器--->浏览器保存cookie
3、客户端之后的所有请求,都会把Cookie附加在HTTP请求头中,传递给服务器--->服务器校验有用额Cookie信息
首次登陆某系统是否会有Cookie,是根据该系统架构而定的。
Cookie类型
按照过期时间:Cookie会分为2类,会话cookie和持久cookie
会话cookie是一种临时cookie,用户退出浏览器,会话Cookie就会被删除
持久cookie则会存储在硬盘里,保留时间更长,关闭浏览器,重启电脑,它依然存在
应用场景:记住用户名和密码(自动登录),购物车功能
Cookie和Set-Cookie
Cookie是请求带的
Set-Cookie是响应带的
Cookie测试点
1、检查Cookie是否能正常工作
2、是否按预定的时间进行保存
3、刷新对Cookie有什么影响等
4、禁用或删除cookie是否友好提示(重新登录等)
Cookie与缓存的区别
缓存只是对静态资源的处理,Cookie是一种动态机制
缓存大小受资源和磁盘空间的限制
Cookie本身有大小限制,一般浏览器限制大小不能超过4KB
缓存不会发送服务器,cookie会与请求一起自动发送
作用不一样,缓存浏览器就可以从本地磁盘显示文档,可以加速页面的阅览,Cookie是服务器辨别用户身份,维护通信传输状态。
Session介绍
文件Session一般叫做会话,进行某些获得持续的一段时间。从打开某个网站到关闭浏览器,这是一个会话。
Session产生
Session一定是服务端创建的
服务器创建的Session标识是全局唯一的一串字符
服务器创建的Session标识一半存储在服务器内存中
Session标识被发往浏览器时。会设置过期时间为1970年1月1日前的1秒。表示一个过去式
服务器创建的Session标识通过HTTP响应头中Set-Cookie发送给客户端
浏览器拿到Session标识后。会临时存储。因为它是一个会话Cookie,所以浏览器关闭,他就消失。
Session有超时设置,如果到了超时时间,系统就会自动把Session注销
Session有注销机制,调用invalidate方法,可以注销Sessin
通常关闭应用(Tomcat),所有的Session都会被注销,关闭服务器
注:关闭浏览器不会注销Se的
Session和Cookie实现登陆
Java项目通常做法:
但浏览器发送请求时,服务器会自动判断浏览器是否带有Sessionid
如果没有带Sessionid,立马生成一个全新的Sessionid给他
如果带有Sessionid,会校验服务器内存是否存在,如果不存在,则立马生成一个全新的给他
如果有带Sessionid,会校验服务器内存是否存在,如果存在,则不处理
之后的每次请求,都会刷新服务端SessionID的有效期
到这里为止,不管用户是否已经登录。客户端都有可以用的Sessionid
当输入正确的用户名、密码、点登录按钮。如果登陆成功,程序员会把Sessionid存入到另一个【内存变量中2】容器中
之后的每次请求,权限拦截器都会拦截到你的Sessionid,并和内存中的【内存变量中2】进行查找,如果发现查不到,则会帮你重定向到登录界面
当客户端主动注销,服务器会调用invalidate方法注销服务器上的Session,并重定向到登录界面,又会产生新的Sessinid
其他项目做法:
当输入正确的用户名、密码,点击登录按钮,入股登录成功
服务器会生成一个Sessionid,返回给客户端,客户端浏览器存到cookie
当用户注销,服务端会同时删除服务端Sessionid和客户端cookie
Cookie和Session的区别
1、cookie数据存放在客户的浏览器上,session数据存放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器性能,考虑到减轻服务器性能方面,应当使用cookie
4、单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点,最多保存20个cookie
5、一般建议:将登陆信息等重要信息存放到sesion,其他信息如果可以保留,可以存放到cookie中。
总结:
1、cookie:保存在浏览器中,有大小限制,有状态
2、session:保存在服务器中,服务器有资源开销,分布式、跨系统不好实现
3、Token(一般用于接口测试):客户端可以将Token保存在任何地方,无限制,无状态,利于分布式部署
知道别人的sessionID,怎么直接登录?
1、f12复制登录后的sessionID值
2、复制任意一个需要登录才能访问的页面的url
3、浏览器B中打开步骤2的url,会跳转到登录界面
4、浏览器b,F12把sessionid改成第一步复制的值
5、浏览器b地址栏打开步骤2的url,成功了就不会跳转登录界面