网站建设费怎么做分录,北京网站建设公司文字排版,优秀的企业网站,出格网站建设公司#x1f3ac; 个人主页#xff1a;谁在夜里看海.
#x1f4d6; 个人专栏#xff1a;《C系列》《Linux系列》《算法系列》
⛰️ 道阻且长#xff0c;行则将至 目录
#x1f4da; 引言
#x1f4da; 一、HTTP
#x1f4d6; 1.概述
#x1f4d6; 2.URL
#x1f5… 个人主页谁在夜里看海. 个人专栏《C系列》《Linux系列》《算法系列》
⛰️ 道阻且长行则将至 目录 引言 一、HTTP 1.概述 2.URL
结构
转义 3.格式
请求格式
响应格式
二、HTTPS 1.概念 2.加密方式
对称加密
非对称加密 3.数据摘要
概念
数字签名 4.HTTPS的工作过程
过程推断
证书 引言
上一篇文章我们讲述了TCP/UDP协议那是位于传输层的负责端到端通信确保数据的可靠传输的协议这篇文章我们来谈一谈应用层的协议。
如果说传输层协议的作用是确保数据能够传输到位那么应用层协议的作用就是确保数据能被正确解析。具体地说应用层协议决定了数据在网络上传输时的结构、顺序、传输规则以及数据如何被应用程序解释应用层协议有效支持不同设备、操作系统和应用程序之间的相互通信和数据交换。
应用层协议可以由我们程序员自己定义只需要通信双方遵守相同的协议即可不过在现实中已经有许多现成且优秀的应用层协议供我们参考使用其中之一就是我们下面要讲述的HTTP(超文本传输协议)。 一、HTTP 1.概述
HTTPHyperText Transfer Protocol 是一种用于客户端通常是浏览器与服务器之间传输超文本主要是网页的协议。它是Web通信的基础协议用于支持浏览器与Web服务器之间的请求和响应。
虽然HTTP的通用客户端是浏览器但这并不意味着HTTP是基于浏览器的协议事实上它广泛用于各种客户端与服务器间的通信除了浏览器之外其他许多应用如移动应用、API、爬虫等也使用HTTP协议进行数据交换
① 在浏览器中我们使用HTTP协议来请求Web服务器上的资源。当你输入一个网址如www.example.com并按下回车时浏览器实际上向服务器发送一个HTTP请求服务器返回相应的HTTP响应其中包含网页内容。
② 其他应用程序HTTP并不仅限于浏览器其他应用程序如移动应用、桌面应用、API接口等也可以通过HTTP协议与服务器进行数据交换。 2.URL
URLUniform Resource Locator是一种用于标识互联网资源的地址我们平时俗称的“网址”就是URLURL除了可以指向网页还可以指向图片、视频、文件、API接口等网络资源。它的作用是帮助客户端如浏览器在互联网上找到并访问特定的资源。
结构
一个典型的URL格式如下
http://user:passwww.example.jp:80/dir/index.htm?uid1#ch1
① 协议 http:// 指定了访问该URL时使用的协议http标识使用HTTP(超文本传输协议)
② 用户信息 user:pass 这个部分是可选的表示URL的用户名和密码通常用于需要身份验证的站点。user是用户名pass是密码这种方式称为基本认证
③ 主机名 www.example.jp 这是服务器的主机名或域名表示要连接的Web服务器地址
④ 端口 :80 这是可选的表示与目标服务器通信时使用的端口号。80是HTTP协议的默认端口。如果未指定端口HTTP会默认使用端口80
⑤ 路径 /dir/index.htm 这部分表示服务器上的资源路径指向某个文件或目录
⑥ 查询参数 ?uid1 这是URL的查询部分通常用于向服务器传递额外的参数;
⑦ 片段标识符 #ch1 片段标识符是URL的一个可选部分通常用于标识资源中的某个位置或段落。
转义
像 / ? : 等这样的字符, 已经被URL当做特殊意义理解了因此这些字符不能随意出现。因此某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义。
转义的规则如下: 将需要转码的字符转为16进制然后从右到左取4位(不足4位直接处理)每2位做一位前面加上%编码成%XY 格式
例如
这里“”就被转义成“%2B”。
urlencode 和 urldecode 分别是编码和解码的过程我们可以用在线转义工具对URL进行转义
UrlEncode编码和UrlDecode解码-在线URL编码解码工具 3.格式
HTTP有两种基本的消息格式请求格式Request和响应格式Response
请求格式
请求格式由以下几个部分组成
请求行
请求头
空行
请求体示例
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/webp,*/*;q0.8nameJohnage25① 请求行
请求行包含请求方法、请求的资源路径和协议版本
方法 请求路径 协议版本方法HTTP请求的方法指明客户端希望对指定资源执行的操作。常见的方法有 GET请求指定资源仅读取资源不进行修改幂等即多次执行统一操作结果不变 POST向指定资源提交数据不幂等多次提交会创建多份资源 PUT向指定资源上传数据如果资源存在替换该资源资源不存在则创建因此幂等 DELETE删除指定资源 HEAD与GET类似不过只获取响应头部不获取实体内容 请求路径指定要请求的资源的路径可以是相对路径或绝对路径
协议版本表明使用的HTTP协议的版本常见的有HTTP/1.1和HTTP/2
② 请求头
请求头是由多个键值对组成用于提供额外的请求信息如浏览器类型、支持的编码格式、Cookie信息等。请求头通常包括以下内容 Host指定服务器的域名或IP地址 User-Agent客户端的浏览器和操作系统信息 Accept浏览器可以处理的响应内容类型 Content-Type请求体的内容类型通常在POST或PUT请求中使用 Authorization用于HTTP认证的信息 Cookie客户端的Cookie信息 ③ 空行
请求头和请求体之间会有一个空行用于分隔请求头和请求体部分。
④ 请求体
请求体包含了实际发送到服务器的数据通常在POST、PUT等请求方法中使用。对于GET等方法请求体一般为空。
响应格式
响应格式由以下几个部分组成
响应行
响应头
空行
响应体示例
HTTP/1.1 200 OK
Content-Type: text/html; charsetUTF-8
Content-Length: 1234
Server: Apache/2.4.7 (Ubuntu)htmlbodyh1Welcome to my website/h1/body
/html① 响应行
响应行由协议版本、状态码和状态描述组成。格式如下
协议版本 状态码 状态描述协议版本表明使用的HTTP协议版本
状态码服务器返回的数字代码表示响应的状态 2xx请求成功如200 OK 3xx重定向如301 Moved Permanently 4xx客户端错误如404 Not Found 5xx服务器错误如500 Internal Server Error 状态描述状态码的简要描述如OK、Not Found
② 响应头
响应头包含了关于服务器、响应内容以及其他一些元数据的描述。常见的响应头包括 Content-Type响应体的媒体类型 Content-Length响应体的大小以字节为单位 Server服务器软件的名称 Location用于重定向的URL Set-Cookie设置客户端的Cookie ③ 空行
响应头和响应体之间也有一个空行用于分隔响应头和响应体部分。
④ 响应体
响应体包含了实际的资源数据或响应内容。它可以是HTML页面、JSON数据、图片等。
二、HTTPS 1.概念
由于HTTP的内容是明文传输的明文数据会经过路由器、WiFi热点、通信服务运营商、代理服务器等多个物理节点如果信息在传输过程中被劫持传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉这就是中间人攻击所以我们才需要对数据进行加密。
加密就是把明文要传输的信息进行一系列变换形成密文
解密就是把密文再进行一系列变换还原成明文。
在这个加密和解密的过程中往往需要一个或者多个中间的数据辅助这个过程这样的数据就叫做密钥。
HTTPS在HTTP的基础上加入了SSL/TLS安全套接字层/传输层安全协议加密协议用来对网络通信进行加密和认证从而确保数据在传输过程中不被窃取、篡改或伪造。简单来说HTTPS是HTTP协议的加密版本用于保护HTTP通信的安全性。 2.加密方式
加密方式有许许多多但总体可以分成对称加密和非对称加密
对称加密
采⽤单钥密码系统的加密⽅法同⼀个密钥可以同时⽤作信息的加密和解密这种加密⽅法称为对 称加密也称为单密钥加密特征加密和解密所⽤的密钥是相同的。
工作原理
① 加密发送方使用密钥将明文数据转换成密文
② 传输密文通过不安全的通道网络发送到接收方
③ 解密接收方使用相同的密钥将密文还原成明文。
⚠️加密与解密的实现基于通信双方使用相同的加密/解密算法因此加密算法可以看作是公开的
例如简单的对称加密加密/解密算法为按位异或
明文a ^ 密钥b 得到 密文c
密文c ^ 密钥b 还原会明文 a。
因为加密和解密都使用同一个密钥所以密钥的管理和安全性至关重要。如果密钥泄露任何人都能解密收到的数据。
非对称加密
与对称加密不同非对称加密的加密与解密所使用的密钥是不同的其中一个是公开密钥简称公钥一个是私有密钥简称私钥。
工作原理
① 加密发送方使用公钥将明文数据转换成密文
② 解密接受放使用私钥将密文数据还原成明文。
当然公钥和私钥也可以反着用
这种方式的核心思想是虽然每个人都可以通过公钥来加密数据但只有持有相应私钥的人才能解密数据。由于公钥和私钥是成对生成的公钥和私钥之间具有数学上的关系但私钥不能从公钥推算出来。
⚠️这种方法最大的缺点是运算速度⾮常慢。 3.数据摘要
上述的加密方法可以确保明文数据不会泄露即使密文在传输过程中被中间人截取但如果没有对应的密钥就无法将密文还原成明文。但是除此之外我们还需要考虑一个问题那就是数据完整性。
如果密文被中间人截取他可以在不清楚密钥的情况下对密文进行修改这样接收方得到的就不是原来的密文也无法还原成正确的明文了所以我们还需要保证密文在传输过程中不被修改。于是引入了数据摘要的概念。
概念
数据摘要数字指纹的基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字摘要并不是⼀种加密机制因为它没有解密的过程。
工作原理
① 生成摘要对数据进行运算生成数字摘要
② 验证完整性接收方对数据进行相同运算将结果与摘要进行比对若相同则表示未被修改。
⚠️但还有问题如果中间人对数据修改后将摘要也一并修改了这样接收方就看不出来数据被篡改了这该怎么解决呢
数字签名
既然如此我们将数据摘要也进行加密就得到了数据签名。我们使用非对称加密方式那么接收方的验证步骤就变成了
① 使用私钥将数字签名还原成数字摘要
② 将数据用哈希函数进行运算得到结果与数字摘要进行比对验证完整性。 4.HTTPS的工作过程
直接介绍HTTPS的工作原理可能会有些难以理解有了以上的知识储备我们可以自行推断一下HTTPS的工作过程
过程推断
① 只使用对称加密
即通信双方各自持有一个相同的密钥发送数据时使用密钥对明文加密接收数据时使用密钥将密文还原。如果这个密钥只有通信双方知晓那么通信安全就可以得到保证。
但是并没有想象的这么简单服务器需要同时对很多客户端提供服务如果与每个客户端使用的密钥都不一样那么服务器还需要维护客户端与密钥的关联关系这非常繁琐。这种方法行不通。
② 只使用非对称加密
如果通信双方都使用非对称加密呢即双方都持有各自的公钥私钥对通信过程为
1️⃣在通信前双方先交换各自的公钥
2️⃣服务器发送数据使用客户端的公钥对数据加密服务器接收数据使用自己的私钥对数据解密。
3️⃣客户端发送数据使用服务器的公钥对数据加密客户端接收数据使用自己的私钥对数据解密。
⚠️但是我们上面提到了非对称加密的最大问题是运算速度很慢如果双方都使用非对称加密的话效率太低了。这种办法也行不通
③ 非对称加密对称加密
方法①的运行速度快但问题在于服务器要存储管理每个客户端的对称密钥不论是否正在进行通信。那么我们可不可以优化一下只在通信的过程中保存对称密钥通信结束就解除绑定
1️⃣服务器拥有一对非对称密钥对与客户端进行通信前先将公钥发送给客户端
2️⃣客户端将自己的对称密钥通过公钥加密发送给服务器
3️⃣服务器通过解密得到对称密钥之后的通信就可以通过这个对称密钥进行了。
上述过程只进行了一次非对称加密解密过程后面的操作全都是对称的这样一来相比方法②大大提高了效率看似是最可行的但是
上述过程都忽略了一个重要问题如果在通信开始前中间人攻击就已经存在了呢
拿方法③举例服务器将公钥发送给客户端时被中间人截获中间人把自己的对称密钥加密后发送给服务器这样一来中间人就可以假冒客户端与服务器进行通信而服务器对此一无所知
相同地中间人可以将自己的公钥发送给客户端并获取客户端的对称密钥这样一来中间人就可以假冒服务器与客户端进行通信客户端对此也一无所知
上面的问题关键在于客户端不能确定公钥的来源如果可以确定公钥来自于服务器就可以放心地将私钥加密发送过去了。
要解决上述问题就要引入证书的概念
证书
服务端在使⽤HTTPS前需要向CA机构申领⼀份数字证书数字证书⾥含有证书申请者信息、公钥信 息等。服务器把证书传输给浏览器浏览器从证书⾥获取公钥就⾏了证书就如⾝份证证明服务端公钥的权威。 所以服务器向客户端发送的其实是包含公钥信息的证书那么客户端怎么通过证书验证公钥的来源正确性呢
方法①直接查看域名信息是否正确但是如果证书被中间人篡改了呢公钥已经被替换了呢
这里就要用到我们提到过的数据签名。通过数据签名我们可以确保证书的完整性具体步骤为
1️⃣客户端收到证书向CA机构申请还原签名为数据摘要私钥只有CA机构拥有确保了安全性
2️⃣将明文信息通过哈西函数进行运算将结果与摘要比对如果相同则公钥可信如果不相同则公钥不可信。
如此一来就解决了中间人攻击的问题。
❓那如果中间人发送了一个合法的证书呢中间人向CA机构申请了一个证书
✅只需要查看域名信息即可
❓如果中间人用于申请证书的域名与真域名极度相似造成混淆呢
✅这就需要公安机关来“重拳出击”了✊ 以上就是【HTTP的清风与HTTPS的密语】的全部内容欢迎指正~
码文不易还请多多关注支持这是我持续创作的最大动力