| |
|
开发:
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扫盲 |
HTTP扫盲什么是HTTP协议超文本传输协议(Hyper Text Transfer Protocol),即服务器和客户端之间通过应答请求模式传输超文本内容的一种协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)的应用层协议。 HTTP的特点1.无状态无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。这意味着每次请求都相互独立。 优点:解放了服务器,每一次请求“点到为止”不会造成不必要连接占用 缺点:每次请求会传输大量重复的内容信息。 解决方案: Cookie/Session Token 2.无连接无连接是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。 优点:请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。 缺点:每次访问都需要建立一次 TCP 连接就显得很低效 解决方案: Keep-Alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接。 3.媒体独立这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。 HTTP格式起始行 + 头部 + 空行 + 正文
请求报文请求行 + 请求头部 + 空行 + 请求正文 请求行:请求方法 + 路径 + http版本。 ? 请求方法
响应报文状态行+响应头部+空行+响应正文 状态行:http版本 + 状态码 + 原因 状态码分类
状态码
Header头部HTTPSHTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。 为了解决HTTP协议的这一缺陷,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。左边为在谷歌浏览器中开启Https的网站,右边是Http的网站 HTTPS = HTTP + SSL(TLS)
对称加密:加密和解密时使用的密钥都是同样的密钥。“天王盖地虎,宝塔镇河妖”。 非对称加密:
混合加密: 非对称加密的运算速度非常慢,而对称加密的加密速度比较快,而 TLS 正是使用了混合加密这种方式。在通信刚开始的时候使用非对称算法,比如 RSA、ECDHE ,首先解决密钥交换的问题。然后用随机数产生对称算法使用的会话密钥(session key),再用公钥加密。对方拿到密文后用私钥解密,取出会话密钥。这样,双方就实现了对称密钥的安全交换。 1. 客户端发起HTTPS请求 用户在浏览器里输入一个https网址,然后连接到server的443端口。 2. 服务端的配置 采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。 3. 传送证书 这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。 4. 客户端解析证书 这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值。然后用证书对该随机值进行加密。 5. 传送加密信息 这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。 6. 服务端解密信息 服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。 7. 传输加密后的信息 这部分信息是服务段用私钥加密后的信息,可以在客户端被还原 8. 客户端解密信息 客户端用之前生成的私钥解密服务端传过来的信息,于是获取了解密后的内容。 CA证书CA是整个安全机制的重要保障,我们平时用的证书就是由CA机构颁发,其实就是用CA的私钥给用户的证书签名,然后在证书的签名字段中填充这个签名值,客户端在验证这个证书的时候就是使用CA的公钥进行验签。 证书链 证书以证书链的形式组织,在颁发证书的时候首先要有根CA机构颁发的根证书,而权威机构的 CA 证书都是已经在操作系统中内置的。由根CA机构颁发一个中级CA机构的证书,最后由中级CA机构颁发具体的SSL证书。当把根证书,中级证书,以及最后申请的SSL证书连在一起就形成了证书链,也称为证书路径。在验证证书的时候,浏览器会调用系统的证书管理器接口对证书路径中的所有证书一级一级的进行验证,只有路径中所有的证书都是受信的,整个验证的结果才是受信。 打开电脑的“运行”工具弹窗之后,我们在“运行”中直接输入一下字母字符:certmgr.msc CA使用的具体流程:
SSL证书验证失败有以下三点原因:
缺点 1.速度慢 网络耗时、计算耗时 2.成本较高 服务器成本、证书成本、运维成本。 3.非绝对安全 中间人攻击 中间人攻击中间人截取客户端发送给服务器的请求,然后伪装成客户端与服务器进行通信;将服务器返回给客户端的内容发送给客户端,伪装成服务器与客户端进行通信。 通过这样的手段,便可以获取客户端和服务器之间通信的所有内容。 使用中间人攻击手段,必须要让客户端信任中间人的证书,如果客户端不信任,则这种攻击手段也无法发挥作用。 预防中间人攻击
volley HTTP2.01.二进制传输HTTP2 采用二进制格式传输数据,而非HTTP1.x 里纯文本形式的报文 ,二进制协议解析起来更高效。 HTTP2 将请求和响应数据分割为更小的帧,并且它们采用二进制编码。HTTP2 中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。 2.头部压缩头部压缩的原理是 --- 缓存,与其叫头部压缩还不如叫头部缓存。使用 HPACK 协议,要求客户端和服务器各自维护一个 HEADER 字段的列表,在多次发送的时候,只发送差异的部分,其余的从缓存表里面取。 3.多路复用在HTTP1.x中,我们经常会使用到雪碧图、使用多个域名等方式来进行优化,都是因为浏览器限制了同一个域名下的请求数量,当页面需要请求很多资源的时候,队头阻塞(Head of line blocking)会导致在达到最大请求时,资源需要等待其他资源请求完成后才能继续发送。 HTTP2.0中,基于二进制分帧层,HTTP2.0可以在共享TCP连接的基础上同时发送请求和响应。HTTP消息被分解为独立的帧,而不破坏消息本身的语义,交错发出去,在另一端根据流标识符和首部将他们重新组装起来。 通过该技术,可以避免HTTP旧版本的队头阻塞问题,极大提高传输性能。 4.服务器推送另外值得一说的是 HTTP2 的服务器推送(Server Push)。在 HTTP2 当中,服务器已经不再是完全被动地接收请求,响应请求,它也能新建 stream 来给客户端发送消息,当 TCP 连接建立之后,比如浏览器请求一个 HTML 文件,服务器就可以在返回 HTML 的基础上,将 HTML 中引用到的其他资源文件一起返回给客户端,减少客户端的等待。 HTTP.1x、HTTPS、HTTP2HTTP 3.0 (QUIC)QUIC (Quick UDP Internet Connections), 快速 UDP 互联网连接。 QUIC是基于UDP协议的。 两个主要特性: (1)线头阻塞(HOL)问题的解决更为彻底: 基于TCP的HTTP/2,尽管从逻辑上来说,不同的流之间相互独立,不会相互影响,但在实际传输方面,数据还是要一帧一帧的发送和接收,一旦某一个流的数据有丢包,则同样会阻塞在它之后传输的流数据传输。而基于UDP的QUIC协议则可以更为彻底地解决这样的问题,让不同的流之间真正的实现相互独立传输,互不干扰。 (2)切换网络时的连接保持: 当前移动端的应用环境,用户的网络可能会经常切换,比如从办公室或家里出门,WiFi断开,网络切换为3G或4G。基于TCP的协议,由于切换网络之后,IP会改变,因而之前的连接不可能继续保持。而基于UDP的QUIC协议,则可以内建与TCP中不同的连接标识方法,从而在网络完成切换之后,恢复之前与服务器的连接。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/26 8:39:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |