【Android进阶】HTTP协议原理、交互流程、身份认证、Web攻防技术

【Android进阶】HTTP协议原理、交互流程、身份认证、Web攻防技术我们都知道 HTTP 协议在 根据 TCP/IP 网络分层来看,它是属于应用层,TCP/IP 网络分层总共有5层,它是属于最

我们都知道,根据TCP/IP网络层次结构,HTTP协议属于应用层。 TCP/IP网络层次结构共有五层,再下一层是TCP/IP传输。如图所示: 层:

从逻辑并行的角度来看,发送方和接收方都位于同一并行层,每一层发送方发送的信息都会在下一层进行封装和加密,然后通过实际的物理链路传输到本层。每发送一次。而在接收者之间,对接收到的信息进行解密分析,不断恢复出消息头信息,最后对发送者发送的信息进行处理,然后以同样的方式发回。两种是全双工模式。在此之前,需要一个连接建立过程,即所谓的三向握手。通信结束时还需要一个断开连接的过程,即四次握手断开操作。

当我们谈论HTTP协议为什么要理解TCP/IP的作用时,我们需要了解HTTP协议的实际通信过程是什么,它所依赖的环境是什么,需要知道从一个横向点实际传递的是什么。看法。五个通信层。从简单的角度来看,由于封装的原因,客户端和服务器默认可以认为是平面通信。

HTTP 1.1

目前主流版本仍然是HTTP 1.1,所以我们就使用这个版本来进行分析。

HTTP请求协议详解

一般的HTTP1.1请求协议消息结构可以分为三部分:请求行、头部和消息体。

请求行

请求行包含三项内容:HTTP 请求方法、请求的URL 和HTTP 协议版本。它们之间用空格分隔,并以回车+换行结束。 HTTP 请求方法有多种,但最常用的是GET 和POST 请求。

选项GETHEADPOSTDELETE TRACECONNECT

请求头

标头可以分为三部分:公共标头字段、请求标头字段和实体标头字段。响应协议部分中的公共头字段和实体头字段也具有相同的定义。

公共头域

通用标头字段名称功能描述缓存控制缓存控制连接HTTP 1.1 默认情况下支持长寿命连接(保持活动)。如果您不想支持长时间运行的连接,则必须将closeDate 写入此字段以指示连接的日期和时间。消息生成PragmaTrailerTransfer-Encoding 通知接收方消息使用的编码方法,以确保消息的可靠传输。代理、消息通过的网关)警报。

请求头字段

请求头字段名称功能描述Accept 表示请求者可以接受的媒体类型。 Accept-Charset表示请求者可以接受的字符集。客户列出请求的要求。主机指定客户端用户的电子邮件地址。如果匹配,服务器会在响应标头中返回ETag 信息。如果在请求中添加If-Match(响应的ETag值),服务器收到ETag后会判断ETag是否相同,如果相同则处理该请求。否则,该请求将不会被处理。 If-Modified-Since 当客户端请求特定的资源文件时,会在标头中添加一个带有If-Modified-Since(值为资源文件最后修改时间)的标头,接收服务器收到由比较。比较客户端和服务器上保存的文件的最后修改时间。如果相同,则说明资源文件没有更新,返回304状态码告诉客户端使用原来的缓存文件。否则,返回资源的内容。 If-None-Match 当客户端请求时,服务器通过在标头中添加If-None-Match 标头(值为响应的ETag)返回ETag 信息。如果它们相同,则不会更新资源,并返回304 状态代码,告诉客户端使用原始缓存文件。否则,返回资源的内容。 If-Range 该头字段与Range 头字段结合使用,当客户端请求时,将If-Range(值为响应的ETag)添加到After 头中。接收到的服务器判断ETag是否相同。如果相同则返回状态码206,返回内容为Range指定的字节范围。如果不相同,则返回状态码200,返回内容为整个实体。 If-Unmodified-Since 当客户端请求特定的资源文件时,会在header 中添加带有If-Modified-Since(值为资源文件最后修改时间)的标头,接收客户端收到由店铺。比较客户端和服务器上的最后修改时间,如果相同则返回资源内容。如果不相同,则返回状态码412。 Max-Forwards 与TRACE 和OPTIONS 方法一起使用,以限制到服务器的路径上的代理或网关的数量。 Proxy-Authorization Proxy-Authorization Range 表示客户端向服务器请求指定范围的字节。Range:bytes=0-500表示请求第1到501个字节数。 Range:bytes=100 – 显示从第101 个请求到文件最后一个字节的字节数。 Range:bytes=-500表示最后请求的500字节数。 Range可以同时指定多个组(Range:bytes=500-600,601-999)。并非所有服务器都支持字节范围请求。如果服务器支持字节范围请求,则返回状态码206。如果不是,则返回200。客户端必须根据状态码判断服务器是否支持字节范围请求。范围操作。此域可用于断点下载(断点请求下一个内容),或用于同一文件的多线程下载。每个线程负责下载文件的一部分,多个线程共同完成下载。下载整个文件。引荐来源网址是用于指定客户端请求的来源,还是从其他站点链接的?根据该域,可以使用服务器来防止不在指定范围内的源被拒绝。 TE指定客户端可以接受的传输编码。

实体头字段

实体头字段名称功能描述Allow 表示请求的资源支持的方法,例如GET、HEAD、PUT。 Content-Encoding表示实体内容使用的编码。 Content-Language表示实体内容使用的语言。 Content-Length表示实体内容使用的语言。请求实体的内容位置部分中的字符数可用于提供实体相应资源的位置。 Content-MD5指定用于内容完整性检查的实体内容的MD5(128位MD5)。 Content-RangeContent-Type 指定实体的媒体类型。 Last-Modified 指定实体的最后一次修改时间。

HTTP响应协议详解

HTTP1.1响应协议的消息结构大致可以分为三个部分:状态行、消息头和消息体。

状态行

状态行包含三项内容:HTTP 协议版本、状态代码和原因短语。它们之间用空格分隔,并以回车+换行结束。

状态代码由三位数字组成,第一位数字定义响应类型。状态码主要有五种类型:

状态代码类型功能说明1xx 报告(已接收请求并继续处理) 2xx 成功(成功接收并处理请求) 3xx 重新传输4xx 客户端错误(客户端错误和未处理请求的协议形式) 5xx 服务器错误(服务器无法完成对请求的处理)有效请求)

状态码及对应原因短语的详细解释

状态码原因短语中文说明100 继续101 切换协议切换协议200OK 成功201已创建已创建202已接受已接受203 未经授权的信息未经授权的信息204 无内容无内容205 重置内容重置内容206部分内容300多项选择多项选择301永久移动3 02已发现303查看更多304未修改未更改30 5使用代理使用代理307临时重定向临时重新提交400错误请求错误请求401未经授权402需要付款需要付款403Forbidden 已禁用404Not Found 未找到未找到405方法不允许406不可接受407需要代理验证需要代理验证408 请求超时请求超时409 冲突冲突410 消失不存在第411章需要长度所需长度412 先决条件失败先决条件失败413 请求实体太大请求实体太大414 请求URI 太长请求URI 太长415 不支持的媒体类型不支持的媒体类型416 请求无法满足417 期望失败500 内部服务器错误501 未实现502 网关错误错误网关503 服务不可用504 网关超时网关超时505 HTTP 版本不支持不支持HTTP 协议版本

响应头字段

响应标头字段名称功能描述Accept-Ranges 服务器向客户端指示服务器已接受范围请求。 Age 从源服务器到代理缓存的估计时间(以秒为单位,非负数) ETag 实体标记位置指示适用于重定向的URIProxy 身份验证代理的此URL 的身份验证方案和参数。 重试后如果实体暂时不可用,则通知客户端在指定时间后重试。 服务器处理服务器请求所使用的软件信息。指示下游代理使用Vary。 指定是缓存响应还是从源服务器请求响应。 WWW-Authenticate 指示客户端请求实体应使用的身份验证方案。

交互过程

整个实际的通信是由发出请求和对方返回响应内容组成的。同时,HTTP 1.1 是无状态且响应式的。一旦连接完成,就会立即断开。 HTTP 2.0 则相反;它改进了HTTP 1.1 的问题。这两个连接是可重用的,可以支持并行发送、一次传输多个文件、多个文件响应以及支持传输文件的大小。因为是二进制模式,所以保证支持更大的文件,并且比HTTP 1.1更安全。如需了解更多信息,请参阅相关文档。

URL 和URI

我应该提到URL 和URI 这两个术语之间的区别。 URL表示WWW互联网资源被标记(用地址标记)并被赋予访问地址。 URI 代表网络资源,仅此而已。

HTTPS

沟通过程

具体步骤:

步骤1:客户端通过发送Client Hello消息发起SSL通信。 该消息包含客户端支持的指定SSL 版本和加密组件(Cipher Suite)列表,包括使用的加密算法、密钥长度等。

步骤2:如果服务器能够进行SSL 通信,则服务器会使用Server Hello 消息进行响应。 与客户端类似,SSL 版本和加密组件包含在消息中。 服务器的加密组件的内容被从接收到的客户端的加密组件中过滤掉。

步骤3:接下来,服务器发送证书消息。 该消息包含公钥证书。

步骤4:最后,服务器发送Server Hello Done消息,通知客户端SSL握手协商的初始阶段已完成。

步骤5:初始SSL 握手完成后,客户端将使用客户端密钥交换消息进行响应。 该消息包含一个称为Premaster Secret 的随机密码字符串,用于加密通信。 使用步骤3 中的公钥对消息进行加密。

步骤6:客户端继续发送密码规范更改消息。 此消息请求服务器使用预主私钥对所有后续通信进行加密。

步骤7:客户端发送Finished消息。 该消息包含迄今为止连接的所有消息的综合检查值。 此握手协商的成功取决于服务器成功解密消息的能力。

步骤8:服务器还发送Change Cipher Spec消息。

步骤9:服务器也发送完成消息。

步骤10:一旦服务器和客户端之间的Finished消息交换完成,SSL连接就建立了。 当然,通信受到SSL 保护。 这是与应用层协议通信的开始,即发送HTTP 请求。

步骤11:应用层协议通信,即发送HTTP响应。

第12步:最后,客户端将断开连接。 断开连接时,会发送close_notify 消息。 在这一步(上图中部分省略)之后,发送TCP FIN 消息以结束与TCP 的通信。

如何成为Android高级架构师!

架构师需要具备抽象思维和分析能力,这是系统分析和系统分解的基础。只有具备这种能力,架构师才能清楚地看到整个系统,掌控整个局面。这也是架构师大局观的基础。 如何培养这种能力?一是通过经验,二是通过学习。

架构师必须具有问题领域以及软件工程方面的经验。换句话说,架构师必须能够准确理解需求,并利用软件工程思想将其翻译、分解到可以用计算机语言实现的水平。获得经验是一个耗时的过程。没有人会帮助您完成此过程。

但是,通过有意识地培养和不断学习前人的经验,是可以缩短这个周期的。这也是我组织建筑师进行这个系列的最初动机之一。

成为Android架构师必备知识技能

对应导图的学习笔记(由阿里P8大牛手写,我负责整理成PDF笔记)

部分内容展示

《设计思想解读开源框架》

目录

热修设计

插件框架设计

《360全方面性能优化》

设计思维与代码质量优化

优化程序性能

插件框架设计

[外部链接图像正在传输.(img-0sqn1tfC-1720108467549)]

《360全方面性能优化》

[外部链接图像正在传输.(img-4Si0aofe-1720108467549)]

设计思维与代码质量优化

[外部链接图片正在传输中.(img-jjb8kt5j-1720108467549)] 优化程序性能

[外部链接图像正在传输.(img-oFwIQJjd-1720108467550)]

#【Android进阶】以上HTTP协议原理、交互流程、身份认证、Web攻防技术相关内容摘自网络,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93019.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月5日 上午1:08
下一篇 2024年7月5日 上午1:08

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注