HTTP协议和HTTPS协议
一、HTTP 和 HTTPS 介绍
HTTP(HyperText Transfer Protocol) 是一种无状态的通信协议,通常用于在客户端(例如浏览器)和服务器之间传输超文本(如 HTML 页面)。但这仅仅是一个单向通信协议,数据传输过程中并未加密,所以它比较容易被中间人攻击。无状态,即不能保存每次提交的信息,如果用户发来一个新的请求,服务器无法知道它是否与上次请求有关联。
HTTPS(HyperText Transfer Protocol Secure),则是在 HTTP 的基础上增加了加密层,使用 SSL/TLS 协议来保护数据的传输。可以理解为 HTTP 的“高级版”,带有加密的护航,让数据在传输过程中更安全。
特性 | HTTP | HTTPS |
安全性 | 无加密,易受攻击 | 加密传输,安全性高 |
端口号 | 默认端口为 80 | 默认端口为 443 |
性能 | 较快(没有加密负担) | 较慢(加密解密有一定开销) |
证书 | 不需要证书 | 需要 SSL/TLS 证书 |
浏览器表现 | 没有“安全”标记 | 显示锁形标志,用户感到安全 |
二、互联网消息如何传递
在互联网中,信息传递就像是一场复杂的邮递过程,消息需要通过一系列的“邮局”(即路由器),逐步从发送方传递到接收方。为了让这个过程更具逻辑性,我们可以将其比作寄送包裹的过程。
1、互联网通信的路径
1.访问某个网站
访问网站 www.example.com。这个网址在互联网上并不是唯一的地址,它只是一个更易于记忆的字符串。真正定位到网站的地址,必须通过它的 IP 地址。这就好比你想找一个朋友的住址,但只知道他的名字,你需要通过电话簿(类似 DNS 解析)来查找他具体的住址(IP 地址)。
2.浏览器发送请求
在浏览器中输入网址后,浏览器会发起一个请求,这个请求会包含想要访问的信息。例如,HTTP 请求头中可能包含要访问的页面路径、浏览器类型、语言等信息。就像向邮局递交一个包裹,包裹里带着想要发送的内容(即请求信息)。
3.DNS 解析
由于 IP 地址很不好记忆,所以 DNS(域名系统)起到了将易记的域名(如 www.example.com)转换为计算机能够理解的 IP 地址(如 192.168.1.1)的作用。这是通过向 DNS 服务器查询来实现的。
4.路由器的作用
拿到正确的 IP 地址后,消息会通过一系列路由器(路由器就像邮递员一样,负责在各个“邮局”之间传递包裹)逐步转发到目标服务器。每个路由器根据接收到的包裹信息,决定将包裹转发给哪个下一个路由器或最终目标。这些路由器会通过 MAC 地址 来标识彼此,就像每个邮局都有一个地址和“邮递员”一样。
在这个过程中,MAC 地址 是每台网络设备(如路由器、计算机等)唯一标识的地址。MAC 地址常常在局域网内起作用,而在互联网上,数据包会依赖 IP 地址进行转发。
例如,当你的包裹从一个路由器(网络节点)到达下一个节点时,包裹的 "收件人地址"(即 MAC 地址)会发生变化,每经过一个路由器,包裹的封面上的 “地址” 会更新为当前路由器的 MAC 地址,直到最终到达目标服务器。
5.目标服务器响应请求
当数据包最终到达目标服务器时,服务器会处理你的请求(例如返回一个网页、图片或文件)。服务器根据请求的信息,选择正确的数据进行返回。就像邮局在接收到包裹后,将其交给收件人。
6.响应回传
一旦目标服务器生成了响应,它会通过与请求时相同的路径,逆向发送回给浏览器。由于路由器和中间设备的作用,数据包在路由过程中仍然会更新其 MAC 地址和其它信息,但最终会正确到达浏览器,呈现出网页内容。
2、IP 地址和 MAC 地址的作用
1.IP 地址
是每个网络主机的唯一地址,主要用于寻址,让数据包能够找到目的地。你可以把 IP 地址看作“邮寄地址”,帮助路由器知道数据应该发往哪里。
2.MAC 地址
是硬件设备(如网卡)的一种物理地址,它在局域网内用于设备间的通信。可以理解为设备的“身份证”,每个设备都有一个独特的 MAC 地址。
3.DNS 解析
人们使用域名而不是 IP 地址,主要是因为域名更容易记忆。但计算机只能通过 IP 地址找到目标服务器,因此需要使用 DNS(域名解析系统)将域名转换成 IP 地址。
三、端口号
网卡中具有许多和网络通信的软件,数据帧到达网卡后,根据端口号来区别不同的软件或进程,端口后是用来确定数据目的程序的
服务类型 | 默认端口号 |
HTTP | 80 |
HTTPS | 443 |
FTP | 21 |
MySQL | 3306 |
SSH | 22 |
四、HTTP协议
HTTP(Hypertext Transfer Protocol),即 超文本传输协议,是一种无状态的请求-响应协议,用于客户端(通常是浏览器)和服务器之间的通信。它是互联网中最基础、最常用的协议之一。HTTP 协议在实现网页浏览时起着核心作用,它是浏览器和服务器之间交换数据的语言。
1、什么是超文本
“超文本”指的是网页上的内容,通常以 HTML(Hypertext Markup Language)格式呈现。HTML 是用来描述网页结构的标记语言,因此,HTTP 协议常常被用于传输 HTML 文件,当然它也传输其他格式的文件,如图片、视频、JSON 数据等。
2、HTTP请求和响应
HTTP 协议通过 请求(Request)和 响应(Response)进行数据交换。客户端向服务器发送请求,服务器处理请求后返回响应。
1.HTTP请求
客户端(如浏览器)向服务器发起请求。通常情况下,客户端不会主动向服务器发起请求,而是由用户触发的操作(例如点击链接、提交表单等)来生成请求。每个 HTTP 请求都由三个主要部分组成:
请求的组成
(1)请求行(Request Line):
请求方法(GET、POST、PUT、DELETE 等)
请求目标(例如 /index.html)
HTTP 版本(例如 HTTP/1.1)
(2)请求头(Request Header):
请求头包含了客户端的相关信息。常见的请求头如下:
Accept-Encoding:指定客户端能够接受的编码方式,例如 gzip, deflate,用来压缩响应内容。
Host:指定服务器的主机名,通常是网站的域名(如 www.baidu.com)。
User-Agent:指定发起请求的浏览器类型,例如 Mozilla/5.0。
Cookie:客户端保存的 Cookie 信息,用于跟踪用户状态。
(3)请求正文(Request Body):
请求正文包含实际请求的数据,通常用于 POST 或 PUT 请求,用于发送表单数据或文件。GET 请求一般没有请求正文。
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept-Encoding: gzip, deflate, br
这段请求的含义是:客户端通过 GET 方法请求服务器上的 /index.html 页面,使用 HTTP/1.1 协议,且告诉服务器浏览器类型是 Mozilla/5.0,支持 gzip, deflate, br 等压缩方式。
请求方式
GET:用于请求指定的资源,数据通过 URL 参数传递。适用于查询数据。
POST:用于向服务器提交数据。适用于提交表单、文件上传等操作。
PUT:用于更新指定资源,通常带有请求正文。
DELETE:用于删除指定资源。
GET请求
通过URL传递参数,URL与参数之间用?隔开,多个参数用&隔开,也是表单的默认提交方式
GET传送的数据量较小,主要是因为收到URL长度的限制
GET会将数据显示到URL当中,不安全
GET请求一般用于直接获取数据,提高查询速度。
GET是无副作用的,因此可以被缓存、书签和分享
POST请求
POST的数据在请求主体内,所以相对比较安全,但不是绝对安全
POST对上传数据的大小无限制,POST请求可以做文件的上传和下载。POST适用于增删改操作
2.HTTP响应
服务器接收到客户端的请求后,会根据请求的内容返回一个响应。HTTP 响应通常包含以下几个部分:
响应组成
(1)响应状态行(Response Status Line):
HTTP 版本(如 HTTP/1.1)
状态码(例如 200 OK、404 Not Found、500 Internal Server Error 等)
状态描述(简短的文字描述)
(2)响应头(Response Header):
响应头包含了服务器和返回数据的一些元数据:
Content-Type:指定响应数据的类型,如 text/html, application/json。
Content-Length:响应内容的长度。
Set-Cookie:服务器设置的 Cookie,用于客户端保存状态。
(3)响应正文(Response Body):
响应正文包含实际的响应数据,例如 HTML 文件、JSON 数据或图片等内容。
响应状态码
200 OK:请求成功,服务器成功返回数据。
400 Bad Request:请求有语法错误,服务器无法理解。
404 Not Found:请求的资源不存在。
405 Method Not Allowed:请求方法不被服务器支持。
500 Internal Server Error:服务器内部错误,无法处理请求。
502 Bad Gateway:服务器作为网关或代理,从上游服务器收到无效响应。
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
<html>
<body>
<h1>Welcome to Example!</h1>
</body>
</html>
在这个响应中,服务器告诉客户端,/index.html 页面已成功返回,并且响应的内容为 HTML 格式,长度为 1234 字节,包含了网页的内容。
五、HTTPS
为了解决 HTTP 协议的安全问题,引入了 HTTPS(安全超文本传输协议)。HTTPS 在 HTTP 的基础上加入了加密层,利用 SSL(安全套接字层)或 TLS(传输层安全协议)对数据进行加密。通过 HTTPS 协议,数据在传输过程中会被加密,这不仅保证了数据的机密性(防止数据被窃取),还确保了数据的完整性(防止数据在传输过程中被篡改)。
1、HTTPS的加密方式
1.对称加密
产生秘钥,加密解密使用同一个秘钥。对称加密速度快,但秘钥的安全性较低,若秘钥在传输过程中被窃取,攻击者就能轻易解密数据。
2.非对称加密
产生公钥和私钥,公钥加密的数据需要私钥解密,私钥加密的数据需要公钥解密。处理速度相对较慢,但是安全性较高。
2、HTTPS的加密过程
1.握手阶段:
客户端与服务器之间首先进行一系列的加密握手。客户端请求服务器时,服务器会返回一个数字证书,证书包含了公钥和服务器的身份信息。客户端通过验证证书的合法性来确认服务器的身份是否可信。
2.密钥交换:
在握手阶段,客户端和服务器会使用非对称加密来交换密钥。客户端用服务器的公钥加密生成的“会话秘钥”(对称秘钥),然后将加密后的会话秘钥发送给服务器。服务器用自己的私钥解密出会话秘钥。这样,客户端和服务器就建立了一个加密的通信通道,并可以使用会话秘钥进行后续的数据加密和解密。
3.数据加密传输阶段:
在后续的数据传输过程中,客户端和服务器会使用共享的对称秘钥进行加密与解密操作。由于对称加密的效率高,数据传输速度较快。
3、数字证书
为了防止第三方攻击者伪装成服务器进行钓鱼攻击,HTTPS 使用 数字证书 来验证服务器的身份。数字证书就像是一个网站的“身份证”,它由 认证机构(CA) 颁发,包含了服务器的公钥和身份信息。
证书组成
- 证书的持有者信息(如公司名称、网站域名等)
- 公钥
- 证书颁发机构(CA)的信息
- 证书的有效期
- 数字签名(确保证书的完整性,防止篡改
认证机构(CA)是经过各国政府认可的权威机构,它们负责签发和验证证书的合法性。客户端在访问 HTTPS 网站时,浏览器会验证证书的有效性,确保该证书由受信任的 CA 签发并且没有过期。
证书验证过程
当客户端访问 HTTPS 网站时,首先会收到服务器发送的数字证书。客户端会检查证书的有效性,向证书的发布机构(CA)确认证书是否合法。如果证书有效,客户端会提取公钥来加密生成的会话秘钥,并将加密后的秘钥发送给服务器。
六、Cookie和Session
1、Cookie
Cookie 是存储在客户端浏览器中的小文件,用于保存用户的状态信息。由于 HTTP 协议是无状态的,即每次请求都无法自动携带上次的状态信息,因此需要借助 Cookie 来维护状态。
1.Cookie特点
- 存储在客户端,容易被篡改或盗用。
- 可以设置过期时间。
- 每次请求都会随请求头一起发送,可能会影响请求性能。
2、Session
Session 是在服务器端保存的用户会话信息,每个客户端在访问服务器时,服务器会分配一个唯一的 session ID。这个 ID 通常存储在客户端的 Cookie 中,当客户端再次请求时,浏览器会自动带上这个 session ID,服务器通过 session ID 找到对应的会话信息。
1.Session特点
- 存储在服务器端,相对更加安全。
- 需要借助客户端的 Cookie 来维持会话。
- 不会暴露在客户端,防止被篡改。
3、Cookie和Session对比
特性 | Cookie | Session |
存储位置 | 存储在客户端浏览器中 | 存储在服务器端 |
安全性 | 相对不安全,容易被篡改或盗用 | 较为安全,数据存储在服务器端,客户端只有 Session ID |
容量 | 通常每个 Cookie 大小为 4KB | 受服务器资源限制,一般较大 |
生命周期 | 可以设置过期时间,过期后自动删除 | 会话结束或浏览器关闭时,Session 会话数据丢失 |
存储内容 | 可以存储少量信息(如用户偏好、登录信息等) | 通常存储较为重要的用户信息,如用户身份、购物车等 |
数据传输 | 每次请求都会随着请求头一起发送给服务器 | 每次请求时只会发送 Session ID(通常存储在 Cookie 中) |
性能 | 每次请求发送 Cookie 可能会增加网络负担 | 性能较好,只传输 Session ID,数据存储在服务器端 |
跨域问题 | 不能跨域使用,不同域名下的 Cookie 无法共享 | 跨域时需要特别处理(如通过共享 Session ID) |
存储大小限制 | 每个域名最多存储 20 个 Cookie,每个 Cookie 4KB | 没有硬性大小限制,但受服务器内存限制 |
常见用途 | 用户偏好、用户登录状态、跟踪用户行为等 | 用户会话管理、验证用户身份等 |
七、总结HTTP和HTTPS
特性 | HTTP | HTTPS |
全称 | 超文本传输协议(Hypertext Transfer Protocol) | 安全超文本传输协议(Hypertext Transfer Protocol Secure) |
协议类型 | 无加密协议 | 加密协议 |
安全性 | 不安全,数据以明文传输,容易受到中间人攻击 | 安全,数据通过加密传输,防止数据被窃取或篡改 |
加密方式 | 无加密,数据传输过程中没有保护 | 使用 SSL/TLS 协议对数据进行加密 |
端口号 | 使用 80 端口 | 使用 443 端口 |
验证身份 | 不提供身份验证 | 提供身份验证,通过数字证书确保服务器的身份 |
数据完整性 | 数据传输过程中容易被篡改 | 数据在传输过程中使用加密,保证完整性,防止篡改 |
性能 | 性能较高,因为没有加密解密过程 | 性能稍低,因为需要加密解密,但使用的加密算法对比一般不影响正常使用 |
数据传输方式 | 明文传输数据 | 加密传输数据 |
适用场景 | 适用于无需保密的内容,如公共信息、非敏感数据 | 适用于需要保密和安全传输的内容,如登录信息、支付信息等 |
浏览器显示 | URL 以http://开头 | URL 以https://开头,并通常带有锁形图标,表示安全 |
数字证书 | 无需数字证书 | 需要通过 CA 认证机构颁发的数字证书验证服务器身份 |
受信任 | 无法验证网站的真实身份,容易被钓鱼网站伪造 | 提供可信的身份验证,确保用户访问的是合法网站 |