IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> HTTP图解-摘要笔记 -> 正文阅读

[网络协议]HTTP图解-摘要笔记

网络基础TCP

TCP/IP协议族按层次分别有以下四层:应用层传输层网络层数据链路层

应用层:应用层决定了向用户提供应用服务时通信的活动。

HTTP协议、DNS服务属于应用层

传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。

TCP(传输控制协议)和UDP(用户数据报协议)属于传输层

网络层:用来处理在网络上流动的数据包。该层规定了通过怎样路径到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或者网络设备进行传输时,网络层所起的作用就是在众多的选项中选择一条传输路线。

IP协议属于网络层

数据包是网络传输的最小单位。

链路层:用来处理连接网络的硬件部分。

负责传输的IP协议

通过IP协议将数据包传送给对方需要满足IP地址和MAC地址都正确。

IP地址指明了节点被分配到的地址(可变化)

MAC地址是指网卡所属的固定地址(基本不变)

ARP协议:一种用以解析地址的协议。可根据通信方的IP地址反查出对应的MAC地址

确保可靠性的TCP协议

TCP协议提供可靠的字节流服务。

字节流服务是指:为了方便传输将大块数据分割成以报文段为单位的数据包进行管理。而目的是为了能够更容易传输大数据才把数据分割的。

TCP的三次握手

目的:是为了确保数据准确无误的送达目标处。

过程:发送端发送一个带有SYN标志的数据包给对方,接收端收到后回传一个带有SYN/ACK标志的数据包以示c传达确认信息。最后发送端再回传一个ACK标志的数据包,代表握手结束。

若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。

负责域名解析的DNS服务

提供域名到IP地址之间的解析服务。(可逆向)

URI和URL

URI(统一资源标识符):由某个协议方案标识的资源的定位标识符。协议方案(30种左右)是指访问资源时使用的协议类型名称。用字符串标识某一互联网资源

绝对URI的格式:

请添加图片描述

其中登陆信息、服务器端口号、查询字符串、片段标识符为可选项。

URL:表示资源的地点(互联网上所处的位置)

URL是URI的子集。

简单的HTTP协议

http协议用于客户端与服务端之间的通信,所以在应用http协议时一定是一端是客户端,另一端是服务端。

请求一定是由客户端发起,而服务端进行回复响应的。

请求报文:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成。

响应报文:由协议版本、状态码、原因短语(解释状态码)、可选的响应首部字段以及实体主体构成。

http不会对发送过的请求或响应做出持久化处理。这样能够更快的处理大量事务,确保协议的可伸缩性。

请求URI定位资源

HTTP协议使用URI定位互联网上的资源。

当客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求URI包含在内。

请求方式:

在这里插入图片描述

如果是对服务器本身发起请求,可以用*来代替URI。

告知服务器意图的HTTP方法

GET(获取资源):用来请求访问已被URI识别的资源

POST(传输实体主体):是为了传输主体内容而不是为了获取响应的主体内容。

PUT(传输文件):用来传输文件,但是由于自身不存在验证机制,所以一般结合web程序的验证机制或者架构设计的REST标准才会开放使用PUT方法。

HEAD(获取报文首部):与GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。

DELETE(删除文件):按请求URI删除指定的资源。但是由于自身不存在验证机制,所以一般结合web程序的验证机制或者架构设计的REST标准才会开放使用

OPTIONS(询问支持的方法):查询针对请求URI指定资源支持的方法。

TRACE(追踪路径):让web服务器将之前的请求通信环回给客户端

CONNECT(要求用隧道协议连接代理):要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。

持久连接

只要任意一端没有明确提出断开连接,则保持TCP连接状态。

持久连接可以减少TCP连接的重复建立和断开所造成的额外开销。

HTTP1.1所有连接默认是持久连接,HTTP1.0内未标准化。

管线化

利用管线化可同时并行发送多个请求。

使用Cookie的状态管理

HTTP是无状态协议。不对之前发生过的请求和响应的状态进行管理。

Cookie技术通过在请求和响应报文内写入Cookie信息来控制客户端的状态。

HTTP报文内的HTTP信息

HTTP报文大致可分为报文首部和报文主体两块。两者由最初出现的空行(CR+LF)划分。

请求报文及响应报文的结构

在这里插入图片描述

请求报文和响应报文的首部内容由请求行状态行首部字段和其它信息组成。

请求行包含用于请求的方法,请求URI和HTTP版本。

状态行包含响应结果的状态码,原因短句和HTTP版本。

首部字段包含表示请求和响应的各种条件和属性的各类首部。

首部一般有四种,分别是通用首部、请求首部、响应首部、实体首部。

其它信息包含HTTP的RFC里未定义的首部(Cookie等)。

编码提升传输速率

报文主体和实体主体的差异

报文:是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输。

实体:作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。

HTTP报文的主体用于传输请求或响应的实体主体。通常,报文主体等于实体主体,但是当传输汇中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。

压缩传输的内容编码

内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。

分割发送的分块传输编码

分块传输编码会将实体主体分成多个部分。每一块会用十六进制标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。

HTTP/1.1中存在一种称为传输编码的机制,它可以在通信时按某种编码方式传输,但只定义作用于分块传输编码中。

发送多种数据的多部分对象集合

多部分对象集合包含对象如下:


在这里插入图片描述

HTTP报文中使用多部分对象集合时,需要在首部字段里加上Content-type。使用boundary字符串来划分多部分对象集合指明的各类实体。

在boundary字符串指定的各个实体的起始行之前插入“- -”标记,在其最后插入“- -”标记作为结束。

多部分对象集合的每个部分类型中都可以含有首部字段。另外可以在某个部分中嵌套使用多部分对象集合。

获取部分内容的范围请求

指定下载的实体范围的请求叫做范围请求。

执行范围请求时需要使用首部字段Range来指定资源的byte范围。

在这里插入图片描述

在这里插入图片描述

针对范围请求,响应会返回状态码为206Partial Content 的响应报文。多重范围的范围请求,响应会在首部字段Content-Type标明multipart/byteranges后响应报文。

如果服务器无法响应范围请求,则返回状态码200 OK 和完整的实体内容。

内容协商返回最合适的内容

内容协商机制是指客户端和服务端响应的资源内容进行交涉,然后提供给客户端最为合适的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。

在这里插入图片描述

内容协商技术有以下三种类型:

在这里插入图片描述

返回结果的HTTP状态码

状态码的类别

在这里插入图片描述

经常使用的大概有14种。

200 OK :请求被正常处理。

204 No Content :请求已成功处理,但返回的响应报文中不含实体的主体部分。也不允许返回任何实体的主体。

**206 Partial Content **:范围请求被成功执行。响应报文中包含由Content-Range指定范围的实体内容。

301 Moved Permanently :永久性重定向。表示请求的资源已被分配了新的URI,以后应该使用新的URI访问资源。

302 Found :临时性重定向。和301Moved Permanently相似,但302状态码代表的资源不是永久移动,只是临时性质的。

**303 See Other **:表示由于请求的资源存在着另一个URI,应使用GET方法定向获取请求的资源。

在这里插入图片描述

304 Not Modified :表示客户端发送附带条件的请求时,服务端允许请求访问资源,但未满足条件的情况。所以在返回时不包含任何响应的主体部分。

307 Temporary Rediect :临时性重定向。与302相同,但307会遵照浏览器标准,不会把POST变为GET。

400 Bad Request :请求报文中存在语法错误。浏览器会像200 OK 一样对待该状态码。

401 Unauthorized :表示发送的请求需要有通过HTTP认证的认证信息。若并非第一次请求则表示认证失败。

403 Forbidden :表示服务器拒绝该访问。

404 Not Found :表示服务器上无法找到请求的资源。

**500 Internal Server Error **:表示服务器执行请求时出现错误。

**503 Service Unavailable **:表示服务器暂时处于超负荷或者正在停机维护,现在无法处理请求。如果事先得知接触以上状况需要的时间,可以写入Retry-After首部字段再返回给客户端。

与HTTP协作的Web服务器

单台虚拟机实现多个域名

当虚拟主机寄存了多个不同的主机名和域名的Web网站时由于是同一台服务器上,它们的IP地址会相同,所以在进行HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。

通信数据转发程序:代理、网关、隧道

代理 : 具有转发功能的应用程序。在客户端和服务器之间传递请求和响应信息。

代理不改变请求URI,会直接发送给前方持有资源的目标服务器。

在HTTP通信中可以级联多台代理服务器。

每次通过代理服务器转发时需要附加Via首部字段用来标记经过的主机信息。

使用代理服务器的理由:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的,等等。

   **缓存代理** : 代理转发响应时,缓存代理会预先将资源的副本保存到到代理服务器上,当再次接收到相同的请求时直接将缓存的资源作为响应返回。

   **透明代理** :转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理,反之则为非透明代理。

网关 : 转发其它服务器通信数据的服务器,接收到客户端发送的请求时,它就像拥有资源的源服务器一样对请求进行处理。

与代理类似,但是能使通信线路上的服务器提供非HTTP协议服务。

可以在客户端与网关之间的通信线路上加密以确保连接的安全。

隧道 :相距甚远的客户端和服务器之间两者进行中转,并保持双方通信连接的应用程序。

隧道本身不会去解析HTTP请求,并且在通信双方断开连接后结束。

保存资源的缓存

利用缓存代理服务器可以节省通信流量和通信时间。

缓存的资源具有有效性,也就是资源是否符合客户端的要求、资源是否为最新等,当资源失效后缓存服务器将再次向源服务器获取资源。

缓存也可存在于客户端,也具有有效性。

HTTP首部

首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。

在请求中,HTTP报文首部由方法、URI、HTTP版本、HTTP首部字段等部分构成。

在响应中,HTTP报文首部由HTTP版本、状态码(数字与原因短语)、HTTP首部字段3部分组成。

使用首部字段可以为浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。

HTTP首部字段结构

在这里插入图片描述

字段值对应单个HTTP首部字段可以有多个值。

例如:

在这里插入图片描述

当报文首部出现两个或者两个以上具有相同首部字段名时,会根据浏览器处理逻辑的不同,结果可能不同。

4种HTTP首部字段类型

通用首部字段 :请求报文和响应报文都会使用。

请求首部字段 :从客户端向服务端发送请求报文时使用的首部。补充了请求的附加内容客户端信息、响应内容相关优先级等信息。

响应首部字段 :从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。

实体首部字段 :针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。

HTTP /1.1 定义了47种首部字段。

在HTTP协议通信交互中使用到的首部字段,并不限于定义的47种首部字段,还有Cookie、Set- Cookie 和Content-Disposition等

HTTP首部字段将定义成缓存代理和非缓存代理的行为,分成2种类型。

在这里插入图片描述

个人理解:

端到端首部会到达最终请求的源服务器\缓存代理,并且跟随响应返回。

逐跳首部在第一次到达的服务器或者代理处被删除。

除以下8个首部字段外都为端到端首部。

在这里插入图片描述

详细首部介绍未做笔记,需自行翻阅

确保Web安全的HTTPS

HTTP的不足:

在这里插入图片描述

窃听解决方法

1.通信的加密 :通过和SSL(安全套接层)或TLS(安全层传输协议)的组合使用,加密HTTP的通信内容。

SSL和HTTP组合使用称为HTTPS(超文本传输安全协议)或者 HTTP over SSL

2.内容的加密 :对通信的内容本身进行加密。(对报文首部不加密,报文主体加密)前提要求是客户端和服务端同时具备加密和解密机制。且由于线路未加密,内容仍存在被篡改的风险。

伪装解决方法:

由于HTTP协议中的请求和响应不会对通信方进行确认。所以可能出现伪装。

1.查明对手的证书

在请求或响应的传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击

防止篡改的方法

MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。

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

HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL和TLS协议代替而已。

通信流程: HTTP→SSL→TCP 于是身披SSL协议这层外壳的HTTP就变成了HTTPS

SSL是独立的一项协议。

SSL采用的加密处理方式为:公开密钥加密的加密方式。也就是加密算法是公开的,但是密钥不公开,只有拥有密钥才能解密。

共享密钥加密(对称密钥加密):加密和解密同用一个密钥的方式。

公开密钥加密(非对称密钥加密):使用两把密钥,一把叫做私有密钥,用于解密。一把叫做公开密钥,用于加密。

HTTPS采用混合加密机制:利用公开密钥加密传递共享密钥加密的密钥,这样一来既解决了加密密钥传递问题,又能够提升处理效率 。

证书可以解决公开密钥的正确性问题。

自认证证书 :独立构建的认证机构叫做自认证机构,由自认证机构颁发的“无用”证书也被戏称为自签名证书。

HTTPS的安全通信机制

建立HTTP通信步骤(图解)

在这里插入图片描述

CBC模式(密码分组链接模式):将前一个明文块加密处理后和下一个明文块做XOR运算,使之重叠,然后再对运算结果做加密处理。对第一个明文块加密时,要么使用前一段密文的最后一块,要么利用外部生成的初始向量。

HTTP通信步骤:


在这里插入图片描述

SSL和TLS

SSL速度慢:一种是指通信慢。另一种是指由于大量消耗CPU及内存等资源,导致处理速度变慢。

HTTPS通信慢是因为相比HTTP多了SSL通信,通信量增加。

处理速度慢是因为SSL必须进行加密处理。

解决方案:使用SSL加速器(硬件,专用服务器)来改善,但不能完全杜绝。

确认访问用户身份的认证

HTTP使用的认证方式:

在这里插入图片描述

BASIC认证(不安全、不便利) :web服务器与通信客户端之间的认证方式。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里需要注意的是:

1.服务器返回状态码401 并且带WWW-Authenticate字段的响应。该字段内包含认证的方式及Request-URI安全域字符串(realm)

2.在客户端,用户ID和密码会以 “ID :密码”的格式以Base64方式编码。并且被写入到 首部字段Authorization中发送。

缺点:安全性低,使用不够灵活。

DIGEST认证 (不便利):质询响应方式,一开始一方会先发送认证要求给另一方,接着使用从另一方那接收到的质询码计算生成响应码。最后将响应码返回给对方进行认证的方式。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

SSL客户端认证(产生必要费用) :借由HTTPS的客户端完成认证的方式。

认证步骤:
在这里插入图片描述
在这里插入图片描述

SSL客户端认证采用双因素认证

也就是说SSL客户端认证不仅依靠证书完成认证,一般也会和基于表单认证组合形成一种双因素认证。

基于表单认证 (认证大多基于它)、(非HTTP协议中定义):客户端会向服务器上的Web应用程序发送登录信息,按登录信息的验证结果认证。

一般用Cookie管理Session(会话)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基于HTTP的功能追加协议

SPDY(google发布,旨在解决HTTP性能瓶颈,缩短Web页面的加载时间(50%))

HTTP标准带来的瓶颈

在这里插入图片描述

陆续出现的解决技术:

Ajax:有效利用JavaScript 和DOM(文档对象模型)的操作,以达到局部Web页面替换加载的异步通信手段。

Comet:通过延迟应答,模拟推送功能。也就是说当服务器接收到请求后,但所请求的资源无更新,那么应答将被挂起,等到资源更新后再作应答。

SPDY(协议层面): 仍采用HTTP建立通信连接,在TCP/IP的应用层与运输层之间通过新加会话层的形式运作。通信中规定使用SSL。可照常使用HTTP的GET和POST等方法、Cookie以及HTTP报文等。
在这里插入图片描述

使用SPDY后,HTTP协议可获得功能:

多路复用流:通过单一的TCP连接,可以无限制处理多个HTTP请求。

赋予请求优先级:给请求逐个分配优先级顺序。

压缩HTTP首部

推送功能:支持服务器主动向客户端推送数据的功能。

服务器提示功能:支持服务器主动提示客户端请求所需的资源。

使用浏览器进行全双工通信的WebSocket

主要是为了解决Ajax和Comet里XMLHttpRequest附带的缺陷所引起的问题。

一旦Web服务器和客户端之间确认WebSocket协议连接,那么任一方都可直接向对方发送报文。

主要特点:推送功能、减少通信量(一旦建立连接就希望一值保持连接状态)

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-16 12:04:52  更:2021-08-16 12:06:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:38:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码