应用层
作用——定义了各种应用协议,规范了数据格式(令主机更方便的识别数据以及操作)
常用应用层协议——HTTP协议、HTTPS协议【最具代表性】、FTP协议、DNS协议、TFTP、SMTP等等
HTTP协议
HTTP(Hyper Text Transfer Protocol)超文本传输协议
HTTP协议基于TCP协议——可靠的协议
默认是80端口
功能:用来规定客户端和服务端的数据传输格式
特点:基于请求与响应模式的、无状态、无连接的应用层协议
| Client | 请求→ | Server |
|---|---|---|
| ←响应 |
HTTP请求方法
GET:请求读取由URL所标识的信息
POST:给服务器发送数据
HEAD:请求读取由URL所有标识的信息的首部
PUT:在指明的URL下存储一个文档–restful–替换资源
DELETE:删除指明的URL所标识的资源
CONNECT:用于代理服务器
OPTION:请求一些选项的信息
TRACE:用来进行环回测试的请求报文
HTTP协议请求头
User-Agent:产生请求的客户端类型–Windows,浏览器版本(内核)等信息,防止被反爬虫
Accept:客户端可识别的内容类型列表
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
Accept-Encoding:客户端使用的编码环境和编码方式
Accept-Language:客户端语言环境
Accept-Charset:client接收的字符集
Authorization:授权信息,一般用于存放授权之后的信息
Authentication:客户端提供给服务器,进行权限认证的信息
Connection:表示是否需要持久连接
Content-Length:表示请求数据正文的长度
Cookie:这个与服务器端做交互的,存储保持会话的重要信息–login(用户名+密码)
Referer:表示该次请求的来源,一般用于做防盗链
content-type:传给服务器的内容的格式。请求体的内容类型,如application/x-www-from-urlencoded
Content-length:请求体的数据长度
Cache-control:缓存机制:Cache-control:no chach
Pragma:防止页面被缓存,和Cache-control:no chach一样
HTTP协议响应头
Server:http服务器的软件信息
Data:响应报文的时间
Expires:指定缓存过期时间
Set-Cookies:设置cookies,服务器返回的文本
Last-modify:资源最后修改时间
Content-length:内容长度
Connection:一般都是keep-alive,保持TCP连接不关闭,但是不会长久保持连接,服务器可设置
Location:指明重定向的设置,新的URL地址
HTTP请求报文
【四个部分】:
请求行
请求头部
空一行——格式要求,表示请求头部的部分已结束
请求体——请求正文(get请求一般没有请求体,post有)
【第一行】
请求行:请求方法+URL(统一资源定位符)+HTTP的版本信息(版本:1.0较老,1.1最为常用,2.0推广阶段)
【之后】
请求头部–需求确认
HTTP相应报文
响应行 + 响应头部 + 空一行 + 响应正文(响应体)(访问网页源代码)
……
【第一行】
响应行:HTTP版本信息 + HTTP状态码 + 前面状态码的原因描述解释
HTTP状态码:
1xx——接收的请求正在被处理
2xx——请求正常处理完毕(200)
3xx——重定向(302,缓存:304)
4xx——客户端的问题导致的错误(网址错误:404)
5xx——服务器的问题导致的错误(503)
HTTP无连接应用协议
限制每次连接只处理一个请求。
服务器处理完客户的请求,并收到客户的应答后,即断开连接。
初衷:避免资源浪费,保证处理效率
问题:网页也越来越复杂。例如每访问图片皆要重新建立连接,则效率低下
为解决此问题,加上头部信息——(放在connection头部字段中)keep-alive
Keep-alive设置:
1、开启:Connection:keep-alive,会发起Keep-Alive的连接请求,开启后连接请求为长连接。HTTP1.1版本中默认开启。开启后不需要重新建立连接。
2、关闭:在http头中设置Connection:close,即可关闭。
3、设置连接时间:
在http header中设置Keep-Alive:timeout=5,max=1000
(1)timeout是超时时间,单位秒,超过这个时间后就断开连接,释放连接。
(2)max是最多的连接次数,若超过这个次数就强制断开连接。
HTTP无状态应用协议
对事物处理没有记忆能力,服务器不知道客户端是什么状态;给服务器发送HTTP请求之后,服务器回应之后,不会有任何记录,不保留任何信息;
每个请求都是独立的。
如服务器处理后续请求,需要前面请求的信息——则需要客户端进行重传。
优点:释放服务器压力。
缺点:重传即重复传输内容,增大了数据传输量,造成资源浪费。
问题:客户端与服务器之间的动态交互增多。例如购物车功能,查看商品信息、登录→后续操作(例如充值)等。
为解决此问题,两个功能应用而生:cookies,session。
Cookies:将前面请求信息保存成一个临时文件——cookies值(存放在浏览器中)。
——例:购物车:将不同商品信息写入cookies;
登录login→充值:登录账号信息写入cookies值。
关闭浏览器时会删除,也可进入浏览器中手动删除cookies历史信息。——cookies为临时文件
Session:永久版的cookies值。
当客户端访问服务器时,服务器根据具体需求,设置session ID(可理解为会话编号):保存到服务器上,再传递给客户端(一般:浏览器),客户端保存在内存里。
在后续连接中,浏览器都会额外加上session ID,服务器会根据session ID来获取客户端数据信息。
如客户端意外关闭浏览器,session数据不会被立即释放。
为避免资源占有,设置session超时时间(默认30分钟),超时后清除session ID。
在通过Wireshark抓包工具抓包获得的报文中,能清楚看到所有交互过程(头部信息、响应信息、响应页面内容……)
所以
HTTP协议问题:
发送数据都是明文;
容易被第三者窃听、截取数据包,伪装客户端进行交互。
双方无确定机制确定客户端或服务器身份。
对数据包进行篡改,服务器亦无法确认
缺点:存在安全隐患。
因此出现了HTTPS协议。
HTTPS协议
HTTPS(Hypertext Transfer Protocol Secure)——超文本传输安全协议,是以安全为目标的HTTP通道,简单讲是HTTP的安全版,它加密数据(密文–加密之后的数据报文)并确保其机密性,可保护用户在与网站交互时免于窃取个人信息和计费数据。(对服务器和客户端之间进行身份认证)
防止信息被篡改,保证信息完整性。
HTTP+加密+身份认证+完整性保护=HTTPS
加密+身份认证+完整性保护=SSL协议
SSL协议版本:SSLv3,TLS1.0,TLS1.2
默认端口443。
SSL协议
1、客户端请求建立SSL连接,并将自己支持的一套加密规则发送给服务器。
2、网站从中选出一组加密算法与HASH算法,并将自己的身份信息以整数的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等
【公钥:可公布,用来加密;私钥:私有,用来解密】
3、获得网站证书之后浏览器要做以下工作:
(1)验证证书的合法性,如证书受信任,浏览器会生成一串随机数密码,并用证书中提供的公钥加密。
(2)把密码发送给网站。
(3)告诉网站后续报文要加密了。握手结束。
4、网站接收浏览器发来的数据之后要做以下的操作:
(1)使用自己的私钥将信息解密去除密码
(2)告诉客户端后续报文要加密了。握手结束。
以上为基于https://www.bilibili.com/video/BV1ZM4y1376o?p=1做的学习笔记