HTTP到HTTPS的演化

我们不生产知识,我们只是互联网的搬运工 HTTP到HTTPS的演化 HTTP 由于是明文传输,所以安全上存在以下三个风险: 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。 篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。 冒充风险,比如冒充淘宝网站,用户钱容易没。 窃听风险 假设 A 想通过互联网向 B 发送消息。数据要经过互联网上各种各样的网络和设备才能到达 B 那里。 ​​ 数据可能会被第三者恶意窃听。 ​ 因此,我们需要给想要保密的数据加密。加密后的数据被称为“密文”。 ​ 把密文发送给 B。 ​ B 收到密文后,需要解除加密才能得到原本的数据。 ​​ 像这样对数据进行加密,就不用担心会被人窃听了。 共享秘钥加密 A 使用密钥加密数据。 ​ A 将密文发送给 B。​ B 收到密文后,使用相同的密钥对其进行解密。这样,B 就取得了原本的数据。只要是加密好的数据,就算被第三者恶意窃听也无须担心。 ​​ 实现共享密钥加密的算法有AES、DES等,其中 AES 的应用最为广泛。 ​​ 互联网两端的A 和 B 无法直接沟通,B 不知道加密时使用的是什么密钥。 A 需要通过某种手段将密钥交给 B。和密文一样,A 又在互联网上向 B 发送了密钥。 B 使用收到的密钥对密文进行解密。 但是,该密钥也有可能会被 X 窃听。这样一来,X 也可以使用密钥对密文进行解密了。 ​​ 为了解决这个问题,就需要使用公开秘钥加密(非对称秘钥加密) 公开秘钥加密 A 准备通过互联网向 B 发送数据 ​​ 首先,需要由接收方 B 来生成公开密钥和私有密钥,然后把公开密钥发送给 ...
2023年10月15日

网络通信-长连接与短连接

简单介绍长连接与短连接的优缺点。 短连接 client 向 server 发起连接请求 server 接到请求,双方建立连接 client 向 server 发送消息 server 回应 client 一次读写完成,此时双方任何一个都可以发起 close 操作 长连接 client 向 server 发起连接 server 接到请求,双方建立连接 client 向 server 发送消息 server 回应 client 一次读写完成,连接不关闭 后续读写操作… 长时间操作之后 client 发起关闭请求 优缺点分析 长连接可以省去较多的 TCP 建立和关闭的操作,节约时间。但是如果用户量太大容易造成服务器负载过高最终导致服务不可用 短连接对于服务器来说实现起来较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但是如果用户访问量很大, 往往可能在很短时间内需要创建大量的连接,造成服务器响应速度过慢 总结 小的 WEB 网站的 http 服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源来让套接字保持存活。 对于中大型 WEB 网站一般都采用长连接,好处是响应用户请求的时间更短,用户体验更好,虽然更耗硬件资源一些,但这都不是事儿。另外,数据库的连接用长连接,如果用短连接频繁的通信会造成 socket 错误。
2023年10月04日

HTTP请求方法

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。 HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。 HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。 方法 描述 GET 请求指定的页面信息,并返回实体主体。 HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 PUT 从客户端向服务器传送的数据取代指定的文档的内容。 DELETE 请求服务器删除指定的页面。 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 OPTIONS 允许客户端查看服务器的性能。 TRACE 回显服务器收到的请求,主要用于测试或诊断。 PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。
2023年10月04日

HTTP简介

网络基础 TCP/IP 为了理解 HTTP,我们有必要事先了解一下 TCP/IP 协议族。 通常使用的网络(包括互联网)是在 TCP/IP 协议族的基础上运作 的。而 HTTP 属于它内部的一个子集。 TCP/IP 协议族 TCP/IP 协议族是互联网相关的各类协议族的总称 像这样把与互联网相关联的协议集合起来总称为 TCP/IP。也有说法 认为,TCP/IP 是指 TCP 和 IP 这两种协议。还有一种说法认为,TCP/ IP 是在 IP 协议的通信过程中,使用到的协议族的统称。 TCP/IP 分层管理 TCP/IP 协议族里重要的一点就是分层。TCP/IP 协议族按层次分别分为以下 4 层: 应用层:决定向用户提供应用服务时通信的活动, FTP(File Transfer Protocol) 文件传输协议、DNS(Domain Name System) 域名系统、HTTP(HyperText Transfer Protocol) 传输层:提供处于网络连接中两台计算机之间的数据传输。 TCP(Transmission Control Protocol) 传输控制协议、UDP(User Data Protocol) 用户数据报协议 网络层(网络互联层):处理在网络上流动的数据包(数据包是网络传输的最小数据单位)。该层规定了通过怎样的路径(传输路线)到达对方计算机,并传递数据。作用就是在与对方计算机之间通过多台计算机或网络设备进行传输时,选择一条传输路线。 链路层(数据链路层、网络接口层):用来处理网络的硬件部分。包括控制操作系统、硬件设备驱动、NIC(Network Interface Card,网络适配器)、光纤等物理课件部分(连接器等一切传输媒介)。 TCP/IP 通信传输流 应用发请求通过 TCP 处理报文进行分隔发送给网络层网络层增加 MAC 地址给链路, 之后反向操作, 请求数据的时候每一层处理完成后会给这个数据加上这个层的首部信息, 相反, 处理请求的时候, 每处理一层就删除一个首部, 这叫做数据信息的封装 (encapsulate)。 与 HTTP 关系密切的协议 : IP、TCP 和DNS IP ...
2023年10月04日

HTTP状态码

HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。 它由 RFC 2616 规范定义的,并得到RFC 2518、RFC 2817、RFC 2295、RFC 2774、RFC 4918等规范扩展。 HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。 响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599): 类别 原因短语 1XX Informational(信息性状态码) 信息,服务器收到请求,需要请求者继续执行操作 2XX Success(成功状态码) 成功,操作被成功接收并处理 3XX Redirection(重定向状态码) 重定向,需要进一步的操作以完成请求 4XX Client Error(客户端错误状态码) 客户端错误,请求包含语法错误或无法完成请求 5XX Server Error(服务器错误状态码) 服务器错误,服务器在处理请求的过程中发生了错误 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码。 状态码 状态码英文名称 中文描述 100 Continue (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 101 Switching Protocols (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。 2xx (成功) 表示成功处理了请求的状态代码。 ...
2023年10月04日

HTTP消息结构

HTTP 报文 HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。 一个HTTP&quot;客户端&quot;是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。 一个HTTP&quot;服务器&quot;同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。 HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。 用于 HTTP 协议交互的信息被称为 HTTP 报文。 请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。 HTTP 报文大致可分为报文首部和报文主体两块。两者由最初出现的 空行(CR+LF)来划分。通常,并不一定要有报文主体。 请求报文及响应报文的结构 我们来看一下请求报文和响应报文的结构。 客户端请求消息 客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、可选的请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。 服务器响应消息 HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。 编码提升传输速率 HTTP 在传输数据时可以按照数据原貌直接传输,但也可以在传输过 程中通过编码提升传输速率。通过在传输时编码,能有效地处理大量 的访问请求。但是,编码的操作需要计算机来完成,因此会消耗更多 的 CPU 等资源。 报文主体和实体主体的差异 报文(message)是 HTTP 通信中的基本单位,由 8 位组字节流(octet sequence, 其中 octet 为 8 个比特)组成,通过 HTTP 通信传输。 实体(entity) 作为请求或响应的有效载荷数据(补充项)被传输,其内容由实 体首部和实体主体组成。 HTTP 报文的主体用于传输请求或响应的实体主体。 通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体 主体的内容发生变化,才导致它和报文主体产生差异。 压缩传输的内容编码 HTTP 协议中的内容编码功能就像用压缩软件压缩东西一样,对实体内容进行编码压缩,内容编码后的实体由客户端接受并解码。这可以压缩传输内容,加快传输速度。 常用的内容编码有以下几种。 gzip(GNU zip) compress(UNIX 系统的标准压缩) deflate(zlib) identity(不进行编码) <h3 ...
2023年10月04日