| If-Modified-Since | 客户端请求资源文件时,会添加带有If-Modified-Since(值为资源文件最后修改时间)的标头,服务器接收客户端上报的修改时间。它与服务器上存储的文件的最后修改时间进行比较,如果相同,则表示资源文件尚未更新,并告诉客户端使用原始缓存文件。否则,返回资源的内容。 |
| If-None-Match | 当客户端请求时,服务器将If-None-Match 标头(值为响应的ETag)添加到标头中。如果ETag相同,则返回304状态码,表明资源尚未更新,并指示客户端使用原始缓存文件。否则,返回资源的内容。 |
| If-Range | 当客户端请求时,此标头字段与Range 标头字段结合使用,返回If-Range 标头(值为响应的ETag)。服务器判断ETag是否相同,如果相同则返回状态码206,返回内容为Range指定的字节范围。如果不相同,则返回状态码200,返回内容为整个实体。 |
| If-Unmodified-Since | 客户端请求资源文件时,会添加一个带有If-Modified-Since 的标头(值为资源文件最后修改的时间),客户端收到后更新报告的修改时间。 比较。客户端比较服务器上存储的文件的最后修改时间,如果相同则返回资源内容。如果不相同,则返回状态码412。 |
| Max-Forwards | 与TRACE 和OPTIONS 方法一起使用,以限制服务器路径上的代理或网关数量。 |
| 代理认证| 代理认证
| Range | 表示客户端向服务器请求指定范围的字节。Range:bytes=0-500表示请求第1到501个字节数。 Range:bytes=100 – 显示从第101 个请求到文件最后一个字节的字节数。 Range:bytes=-500表示最后请求的500字节数。 Range可以同时指定多个组(Range:bytes=500-600,601-999)。并非所有服务器都支持字节范围请求。如果服务器支持字节范围请求,则返回状态码206。如果不是,则返回200。客户端必须根据状态码判断服务器是否支持字节范围请求。范围操作。此域可用于断点下载(断点请求下一个内容),或用于同一文件的多线程下载。每个线程负责下载文件的一部分,多个线程共同完成下载。下载整个文件。 |
| Referer | 用于指定客户端请求的来源。或者是从其他网站链接的?根据该域,可以使用服务器来防止不在指定范围内的源被拒绝。 |
| 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 的通信。
加密演算法
常见的加密算法可以分为三类:对称加密算法、非对称加密算法、哈希算法。
对称加密
指使用相同的密钥进行加密和解密的加密算法。对称加密算法的优点是加密和解密速度较快,并且使用长密钥时很难解密。假设两个用户需要使用对称加密来加密和交换数据,那么用户至少需要两个密钥,如果企业中有n个用户,那么整个企业总共需要n(n-1)。 )密钥的生成和分发对于企业信息部门来说将是一场噩梦。对称加密算法的安全性依赖于加密密钥的存储,但不可能要求公司中每个持有密钥的人都保密。通常,用户会有意或无意地泄露他们的密钥。一旦入侵者获得了所使用的密钥,入侵者就可以读取使用该用户密钥加密的所有文档。当整个企业共享一个加密密钥时,整个企业的文档机密性就不再是问题。
**常见对称加密算法:**DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6、AES
非对称加密
是指使用不同密钥进行加密和解密的加密算法,也称为公私钥密码术。假设两个用户想要加密和交换数据。如果使用,一个可以使用另一方的公钥进行加密,另一个可以使用自己的私钥进行解密。如果一个公司有n个用户,则该公司需要生成n组密钥并分发n个公钥。由于公钥可以公开,用户只需要持有私钥,使得密钥的分发变得更加容易。同时,由于每个用户的私钥都是唯一的,其他用户不仅可以通过信息发送者的公钥来验证信息来源的真实性,还可以保证发送者无法否认自己发送了该信息。非对称加密的缺点是加密和解密的速度比对称加密慢很多。在极端情况下,它可能比非对称加密慢1,000 倍。
**常见的非对称加密算法:**RSA、ECC(针对移动设备)、Diffie-Hellman、El Gamal、DSA(针对数字签名)
散列算法
哈希算法的特殊之处在于它是一种单向算法。用户可以使用哈希算法为目标信息生成一定长度的唯一哈希值,但无法通过该哈希值检索到目标信息。因此,哈希算法通常用于存储不可简化的密码和验证信息的完整性等。
**常用哈希算法:**MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1
数字证书和数字签名证书
数字证书是由权威CA机构颁发的不可伪造的证书,用于验证发送实体的身份。为了解决上述问题,发送者A必须找到授权的CA机构申请数字证书,并保证证书中包含A的相关信息和A的公钥。如果发送文本A,则生成一个数字证书和一个数字签名。由A到B,中介M当前无法修改文本内容并将其转发给B。这是因为M无法获得这个CA的私钥,无法随机生成数字证书。当然,如果M也向同一个CA申请数字证书,而是发送修改后的文本、M的数字证书和M的数字签名,那么B收到数据后,发送数字证书M的信息来验证是否匹配。如果当前通信双方匹配,并且发现数字证书中的个人信息是M而不是A,则可以选择暂停通信,因为存在证书互换的风险。
CA创建的证书为什么不能被伪造呢?事实上,CA生成的数字证书也包含了该CA对该证书的数字签名。接收者可以使用CA的公钥解密数字签名,并使用相同的摘要算法来验证当前数字证书是否合法。由于创建证书需要使用相关认证机构组织的私钥,因此不可能伪造认证机构颁发的证书(认证机构私钥泄露有待讨论和考虑) 。 (不适用)
数字证书签名的基础是非对称加密算法和数字签名。由于其不可伪造的特性,数字证书在HTTPS中被广泛使用,以保证握手阶段服务器发送的公钥的真实性。
数字签名是应用非对称加密和摘要算法来保证信息在传输过程中不被篡改、数据不可伪造。有了它,发送者使用摘要算法获得发布内容的摘要,然后使用私钥对摘要进行加密(加密后的数据是数字签名),并将创建的内容、数字签名和公钥发送到:接收者。接收到内容的接收者首先检索公钥,解密数字签名,并获得内容的摘要数据。然后,使用相同的摘要算法来计算摘要数据并比较计算的摘要和解码的摘要。如果一致,则说明发布的内容没有被篡改。
身份认证
计算机本身无法确定坐在显示器前的用户的身份。 此外,您无法看到您的网络合作伙伴是谁。 事实证明,为了知道谁正在访问服务器,另一个客户端需要报告其家庭地址。 例如,即使访问服务器的人声称是小民,也无法知道该人是否是真实的人。 要确认小民是否确实有权限访问系统,需要检查“只有登录用户知道的信息”和“只有登录用户知道的信息”。因此,需要进行以下验证:
基本身份验证:基本身份验证是HTTP中一种非常简单的身份验证方法,因此不是很安全,但仍然很常用。当客户端向HTTP 服务器发出需要身份验证且尚未经过身份验证的数据请求时,HTTP 服务器将返回401 状态代码并提示客户端输入用户名和密码。当用户输入用户名和密码时,用户名和密码使用BASE64加密并添加到请求信息中,以便再次向HTTP服务器发出请求。 HTTP服务器判断认证是否成功,并根据认证做出相应的响应。请求标头中包含的信息。 **摘要式身份验证:**摘要式身份验证旨在解决基本身份验证的许多缺点。用户密码是整个身份验证过程中的重要元素。 **关于SSL客户端认证** 关于使用用户ID和密码的认证方法,如果两者的内容都正确,则由我自己进行认证。 但是,如果您的用户ID 和密码被盗,有人可能会冒充您。 使用SSL 客户端身份验证可以避免这种情况。 SSL客户端认证是一种通过HTTPS客户端证书完成认证的方法。 客户端证书身份验证允许服务器验证访问是否来自已登录的客户端。
Web攻防技术
常见的网络攻击技术包括:
1、XSS跨站攻击技术:主要原因是攻击者通过在网页中嵌入恶意脚本或者改变HTML元素的属性来进行攻击。主要原因是开发者直接使用用户变量,所以HTML直接编译成JS。正常的GET 请求通过URL 传递参数,但可以传递恶意脚本来检索信息。
2、SQL注入攻击:主要是向Web表单中注入SQL命令,发送或输入页面请求中的域名或查询字符串,最终欺骗服务器发出恶意SQL命令(select * from test where username=\”wuxu\”等) 。或1=1,用户将跳过密码直接登录。以下是具体的解决方案:
对于特殊字符过滤,请避免使用字符串连接来创建SQL 语句。预编译SQL 语句,例如Java preparedstatement。关闭错误消息关闭错误消息非常重要,因为攻击者可以通过重复尝试从数据库中检索信息。客户端对数据进行了加密,所以第一个传递的参数就被加密过滤掉了。控制数据库权限。例如,为了防止攻击者执行select * from test等操作,只能进行选择,而不能进行插入。
3.操作系统命令注入攻击:虽然系统提供命令执行功能主要是为了方便相关应用场景的处理,但如果使用不当,调用的变量没有考虑到安全因素,就会导致恶意命令调用。被执行,系统将被破坏。这称为攻击利用。主要原因是服务器在调用a=\”a.txt;rm -rf *\”,system(\”rm -rf {$a}\”)等系统命令时使用了字符串连接,所以服务端给出了具体的解决办法:
开发程序时,减少系统命令的使用,执行命令时避免从外部获取参数。参数特殊字符过滤
4.HTTP头注入攻击
作者于2013年从Java开发转向Android开发。从小工厂到华为、OPPO等大工厂,他于2018年4月加入阿里巴巴,至今仍在阿里巴巴工作。
我参加过很多次面试,作为面试官采访过很多人。大多数入门级、中级Android工程师想要提升技能,往往需要自己摸索和成长,不系统的学习效果低效、费时、技术性很容易达到平台期、停滞不前。
我们整理了阿里巴巴P7级别最系统的Android开发主流技术列表。这尤其适合有3-5年以上经验的朋友深入学习和提高。
主要包括阿里巴巴等领先互联网公司的主流架构技术,也包括字节跳动、腾讯、华为、小米等。如果你想深入系统地学习Android开发,成为一名合格的高级工程师,你可以收集这些先进的Android技术选项。
我这几年收集整理了阿里巴巴、腾讯、字节跳动、华为、小米等公司的面试题,对面试要求和技术点进行了大规模的整理,形成了一个综合的面试题。 《Android架构师》采访。比Xmind好(其实预计要花很多功夫,包括知识上下文+分支细节)。
Java语言及其原理。
既有大工厂,也有小工厂。 Android面试的第一步就是看你是否熟悉Java语言。
高级UI 和自定义视图。
自定义视图是Android开发的一项基本技能。
性能调整;
数据结构算法,设计模式。这些都是你需要掌握的重要基础知识和要点。
NDK开发。
未来的方向肯定是拿高薪。
先进的技术。
组件化、热升级、热修复、框架设计
网上有很多关于学习Android的资料,但如果所学的知识不系统,只凭表面感觉学习,出现问题时不深入挖掘,很难实现真正的技术提升。我们希望这套系统的技术体系能够为您的方向提供参考。
在构建这些技术框架的同时,我们还创建了有关系统的高级教程。这比自己零敲碎打的学习要有效得多,你可以在CodeChina上找到这些内容。
当然,深入学习并掌握这些能力并不容易。我们都知道如何学习,也知道程序员的工作要求有多高,但是无论工作多忙,每周都必须抽出两个小时来学习。
短短六个月你就能感受到变化!
网上有很多关于学习Android的资料,但如果所学的知识不系统,只凭表面感觉学习,出现问题时不深入挖掘,很难实现真正的技术提升。我们希望这套系统的技术体系能够为您的方向提供参考。
在构建这些技术框架的同时,我们还为我们的系统创建了高级教程。这比你在CodeChina上零敲碎打的自学学习要有效得多。
当然,深入学习并掌握这些能力并不容易。我们都知道如何学习,也知道程序员的工作要求有多高,但是无论工作多忙,每周都必须抽出两个小时来学习。
短短六个月你就能感受到变化!
#【Android进阶】以上HTTP协议原理、交互流程、身份认证、Web攻防技术相关内容摘自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93021.html