应用层简介

  • 功能:定义了各种应用协议规范数据格式,如:HTTP协议、HTTPS协议、FTP协议、DNS协议、TFTP协议、SMTP协议;从而实现对不同的字节流进行识别和操作
  • 信息存在形式:应用程序数据

HTTP协议

HTTP协议简介

HTTP(Hyper Text Transfer Protocol)超文本传输协议

  • HTTP协议基于TCP协议,默认80端口

  • 功能:用来规定客户端和服务器的数据传输格式

  • 特点:基于请求与响应模式的、无状态、无连接的应用层协议

HTTP报文

HTTP请求数据包构成

1. 请求行

请求行:请求方法 + URL(定位资源) + HTTP版本信息

HTTP请求方法
请求方法 含义
GET 请求读取由URL所标识的信息
POST 给服务器发送、提交数据
HEAD 请求读取由URL所有标识的信息的首部
PUT 在指明的URL下存储一个文档–restful–替换资源
DELETE 删除指明的URL所标识的资源
CONNECT 用于代理服务器
OPTION 请求一些选项的信息
TRACE 用来进行环回测试的请求报文

2. 请求头部

字段名 含义
User-Agent 产生请求的客户端类型:Windows,浏览器版本(内核)
Accept 客户端可识别的内容类型列表
Host 请求的主机名,允许多个域名同处于一个IP地址,即虚拟主机
Accept-Encoding 客户端使用的编码环境和编码方式
Accept-Language 客户端语言环境
Accept-Charset 客户端接受的字符集
Authorization 授权信息,一般用于存放授权之后的信息
Authentication 客户端提供给服务器,进行权限认真的信息
Connection 表示是否需要持久连接
Content-length 表示请求数据正文即请求体的长度,GET请求一般没有此字段,因为你GET请求一般没有数据正文
Cookie 与服务器端做交互的,存储保持会话的重要信息 –login(用户名+密码)–对无状态连接的保持极其重要
Referer 表示该次请求的来源,一般用于做防盗链
content-type 传给服务器的内容的格式。请求体内容的类型,如:application/X-www-from-urlencoded
Cache-control 缓存机制:不设置缓存:Cache-control:no cache
Pragma 防止页面被缓存,和Cache-control:no cache一样

3. 空行

空一行,表示请求头部结束

4. 请求体

请求数据的正文内容。一般地,GET请求没有请求体,POST请求有请求体

响应报文的构成

1. 响应行

响应行:HTTP版本 + HTTP状态码 + 原因描述

HTTP响应码(状态码)
  • 1xx:收到信息,请求,正在处理,网络极慢时可以看到
  • 2xx:成功,请求被成功地接受、理解和采纳
    • 200 存在文件
  • 3xx:重定向,为了完成请求,必须进一步执行的动作,服务器为客户端重定向到另一个URL
    • 302 重定向
    • 304 缓存:目前已经访问过,存在缓存,服务器返回304说明没有改动,不作处理
    • 3xx 均可能存在文件
  • 4xx:客户端错误
    • 403 存在文件夹
    • 404 不存在文件及文件夹
  • 5xx:服务器错误
    • 503 服务器的服务不可达如服务器服务崩溃
    • 500 均可能存在文件

2. 响应头部

字段 含义
Server HTTP服务器软件信息
Date 响应报文的时间
Expires 指定缓存过期时间
Set-Cookies 设置cookies,服务器返回的文本
Last-Modify 资源最后修改的时间
Content-type 响应的类型和字符集:content-type:text/html;charset=utf-8
Content-length 响应正文长度
Connection 一般都是keep-alive,保持TCP连接不关闭,但是不会长久保持连接,服务器可以设置。此字段辅助无连接状态的保持。
Location 指明重定向的设置,新的URL地址

3. 空行

空一行

4. 响应体

响应正文,即服务器返回的真正页面的内容,和浏览器检查页面源码的内容相同

Wireshark抓HTTP包详解HTTP协议

浏览器访问www.pingliang.gov.cn;使用Wireshark抓包并过滤条件设置为HTTP,而后追踪访问IP为61.178.180.240的HTTP报文并追踪该HTTP流:

其中粉色表示客户端发送的请求,蓝色表示服务器响应的请求

现对报文做如下分析:

HTTP请求报文:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//1. 请求行
GET / HTTP/1.1 //请求行 = 请求方法 + URL(定位资源) + HTTP版本信息
//2.请求头部
Host: www.pingliang.gov.cn //主机
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0 //客户端信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 //客户端可识别的内容类型列表
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 //客户端语言环境
Accept-Encoding: gzip, deflate //客户端使用的编码环境、编码方式
Connection: keep-alive //是否进行持久连接
Cookie: _gscu_431218300=4195209348255810; UM_distinctid=17e4bf8a63e422-00831e597a94028-4c3e237c-144000-17e4bf8a63f8b4; CNZZDATA1257192373=1973321658-1641946322-%7C1641978736; _trs_uv=kyavvs8p_696_i4ke; _gscs_431218300=419791324r2t0k10|pv:2; _gscbrs_431218300=1; _trs_ua_s_1=kybbzb67_696_3s0
Upgrade-Insecure-Requests: 1
//3.空一行表示请求头部结束

//4.请求体:GET请求没有请求体,POST请求有请求体
//此为GET请求,没有请求体

HTTP响应报文:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//1.响应行
HTTP/1.1 200 OK //响应行:HTTP版本 + HTTP状态码 + 原因描述
//2.响应头部
Server: nginx/1.12.2 //HTTP服务器软件信息
Date: Wed, 12 Jan 2022 09:19:42 GMT //响应报文的时间
Content-Type: text/html //响应的类型和字符集
Content-Length: 156506 //响应内容长度
Connection: keep-alive
Accept-Ranges: bytes
X-Content-Type-Options: nosniff
X-XSS-Protection: 1;mode=block
Content-Security-Policy: script-src * 'unsafe-inline' 'unsafe-eval'
//3.空一行

//4.响应体:响应正文,即服务器返回的真正页面的内容,和浏览器检查页面源码的内容相同
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<title>.....................</title>
<link rel="Bookmark" href="favicon.ico" type="image/x-icon">
<link rel="icon" href="favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">

-------------------- 略--------------------------------

</html>

HTTP协议的无连接特点

HTTP:无连接应用协议

  • 限制每次连接只处理一个请求
  • 服务器处理完客户的请求,并收到客户的应答之后,即断开连接,不会保持连接

无连接应用协议设计初衷

服务器面对的用户量(十万、百万)极大,单个用户的浏览器和服务器交换数据的间歇性较大,且交互具有突发性和瞬时性,且一般两次请求之间的数据没有关联性。如果连接一直保持就会造成资源浪费,因此HTTP协议设计为:及时请求,及时建立连接,请求完毕马上释放连接,保证服务器处理效率,避免资源浪费。

Keep-Alive设置的引入

问题:网页越来越复杂,加入了很多图片,若每次访问都重新建立连接则效率低,因此在HTTP头部字段中定义了Connection:keep-alive字段,使得本次连接成为一个长连接,后续请求不需要去重新建立连接。

  1. 开启:Connection:keep-alive,会发起Keep-Alive连接请求,使得本次连接成为一个长连接,在HTTP1.1中默认打开。

  2. 关闭:在HTTP头部中设置Connection:close,即可关闭。

  3. 设置连接时间:根据需求在HTTP头部中设置Keep-Alive:timeout=5,max=1000

        - timeout是超时时间,单位为秒,若超过这个时间后就断开连接
    
        - max是最多的连接次数,若超过这个次数就强制断开连接
    

HTTP协议的无状态特点

HTTP:无状态应用协议

无状态含义

  • 服务器对事务处理没有记忆能力,服务器不知道客户端是什么状态;给服务器发送HTTP请求之后,服务器回应之后,不会有任何记录;
  • 每个请求都是独立的
  • 若服务器要处理后续请求要用到前面提交的信息,则需要客户端重传

无状态优缺点

  • 优点:释放了服务器的压力
  • 缺点:重传重复传递内容,增大传输数据量,造成资源浪费

Cookies和Session的引入

问题:客户端和服务器的动态交互问题越来越多:如先登录,登录后续操作(充值)要使用到登录信息

Cookies

将前面的请求信息保存成一个临时文件即Cookies值,存放在浏览器中,关闭浏览器时就被删除,或手动清除历史。

如:淘宝购物车:不同商品信息写入Cookies当中;

如:登录→充值:把登录的账号信息保存到Cookies中,充值时调用Cookies

Session

可以理解为永久的Cookies值。

当客户端访问服务器时,服务器会设置一个名为session ID(会话编号)的东西并保存在服务器上,同时将session ID传递给客户端,客户端将其保存在内存里,不会轻易消失。后续浏览器每次访问服务器的连接都会自动加上session ID,服务器根据session ID获取客户端的数据信息。

问题:session ID占用服务器资源

解决:设置session超时时间,一旦超过这个超时时间,服务器就会自动清除此session

HTTPS协议

HTTP协议问题:

发送数据都是明文的;第三者窃听、截取数据包,伪装成客户端——双方无法确认对方身份;可能进行篡改数据。

缺点:存在安全隐患

HTTPS协议简介

概念:HTTPS(Hypertext Transfer Protocol Secure),超文本传输安全协议,是以安全为目标的HTTP通道,简单讲是HTTP的安全版(披着SSL外壳的HTTP协议)。

三个安全保障:

  1. 加密:加密数据并确保其由机密性,可保护用户在与网站交互时免于窃取个人信息个计费数据;
  2. 身份认证:能够在交互时实现身份认证;
  3. 完整性保障:可以保证信息不被篡改,即保证信息的完整性。

HTTP + 加密 + 身份认证 + 完整性保护 = HTTPS

HTTPS协议过程

by https://segmentfault.com/a/1190000021494676

图示

过程

HTTPS 的整个通信过程可以分为两大阶段:证书验证和数据传输阶段,数据传输阶段又可以分为非对称加密和对称加密两个阶段。具体流程按图中的序号讲解。

  1. 客户端请求 HTTPS 网址,然后连接到 server 的 443 端口 (HTTPS 默认端口,类似于 HTTP 的80端口)。

  2. 采用 HTTPS 协议的服务器必须要有一套数字 CA (Certification Authority)证书,证书是需要申请的,并由专门的数字证书认证机构(CA)通过非常严格的审核之后颁发的电子证书 (当然了是要钱的,安全级别越高价格越贵)。颁发证书的同时会产生一个私钥和公钥。私钥由服务端自己保存,不可泄漏。公钥则是附带在证书的信息中,可以公开的。证书本身也附带一个证书电子签名,这个签名用来验证证书的完整性和真实性,可以防止证书被篡改。

  3. 服务器响应客户端请求,将证书传递给客户端,证书包含公钥和大量其他信息,比如证书颁发机构信息,公司信息和证书有效期等。Chrome 浏览器点击地址栏的锁标志再点击证书就可以看到证书详细信息。

  1. 客户端解析证书并对其进行验证。如果证书不是可信机构颁布,或者证书中的域名与实际域名不一致,或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。就像下面这样:

如果证书没有问题,客户端就会从服务器证书中取出服务器的公钥A。然后客户端还会生成一个随机码 KEY,并使用公钥A将其加密。

  1. 客户端把加密后的随机码 KEY 发送给服务器,作为后面对称加密的密钥。

  2. 服务器在收到随机码 KEY 之后会使用私钥B将其解密。经过以上这些步骤,客户端和服务器终于建立了安全连接,完美解决了对称加密的密钥泄露问题,接下来就可以用对称加密愉快地进行通信了。

  3. 服务器使用密钥 (随机码 KEY)对数据进行对称加密并发送给客户端,客户端使用相同的密钥 (随机码 KEY)解密数据。

  4. 双方使用对称加密愉快地传输所有数据。

Wireshark抓包详解HTTPS协议过程

访问 www.baidu.com;并对此过程进行抓包,选中某个TLS协议的数据包,右键追踪TLS流(TLS是SSL协议的版本之一,SSL协议的版本:SSLv3、TLSv1.0、TLSv1.2)

后略。

站内搜索

没有找到内容!