http协议和https协议

HTTP和HTTPS概述

HTTP(Hypertext Transfer Protocol)和HTTPS(HTTP Secure)是超文本传输协议的两种形式。HTTP作为互联网上应用最为广泛的一种协议,它使得浏览器与服务器之间的信息传递成为可能。而HTTPS,作为HTTP的安全版本,通过SSL(Secure Sockets Layer)或TLS(Transport Layer Security)技术,为数据传输提供了加密保障,确保了数据在互联网上的安全传输。

HTTP和HTTP在OSI网络模型中同属于第七层。

HTTP协议

HTTP协议概念

HTTP(HyperText Transfer Protocol,超文本传输协议)是互联网上应用最广泛的协议之一,用于在客户端(如浏览器)和服务器之间传输超文本(如网页)。

HTTP 是万维网(WWW)的基础,支持网页浏览、文件下载、API 调用等应用场景。

HTTP协议默认端口是80

HTTP协议特性

  • 无状态

    • 每次请求都是独立的,服务器不会保存客户端的状态。

    • 通过 Cookie 或 Session 实现状态管理。

  • 支持多种请求方法

    • GET请求:获取数据

    • POST请求:写入数据

    • DELETE请求:删除数据

    • PUT请求:修改数据

    • ...还有其它的请求方式

  • 支持多种数据格式

    • 支持json、xml、html等数据格式
  • 请求与响应模式

    • 客户端发起响应,服务端进行响应
  • 明文传输

    • HTTP传输数据是进行明文传输,既是特点又是缺点

HTTP协议版本

HTTP 有多个版本,主要区别在于性能和功能:

  • HTTP/1.0:

短连接,每次请求需要重复建立新的连接,占用服务器资源,性能较差,基于TCP协议

  • HTTP/1.1:

加入长连接功能、keep alive功能(网站响应后不会立即断开,保留下这个连接),性能提升较1.0版本有提升,基于TCP协议。

  • HTTP/2:

增加并发访问,访问速度更快,性能显著提升,基于TCP协议。

  • HTTP/3:

基于 QUIC 协议(QUIC是基于UDP协议),进一步优化性能和安全性。

HTTP请求与响应

HTTP请求解析

使用curl命令访问网站,打印出详细的过程

root@master-01:~# curl -v www.baidu.com
*   Trying 110.242.70.57...
* TCP_NODELAY set
* Connected to www.baidu.com (110.242.70.57) port 80 (#0)
> GET / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: keep-alive
< Content-Length: 2381
< Content-Type: text/html
< Date: Wed, 02 Apr 2025 11:32:36 GMT
< Etag: "588604c1-94d"
< Last-Modified: Mon, 23 Jan 2017 13:27:29 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> 
#...
省略万字内容
...
<img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
* Connection #0 to host www.baidu.com left intact
root@master-01:~#

上面是使用curl访问百度的整体内容,其中包含了请求和响应的内容

#这部分是请求的内容,其中包含了请求的方法、路径、http协议的版本
> GET / HTTP/1.1
> Host: www.baidu.com
> User-Agent: curl/7.64.0
> Accept: */*

当然实际生产环境中请求的内容比这个复杂,我们可以打开一个网站,例如京东、淘宝、或者博客园,我们使用F12来看一个接口的请求内容(这里默认你会的哦~)
image
图片中我们是访问的cnblogs的站点,可以看到一个是General部分,主要包含了请求的URL,请求的方法,请求状态code,以及远程的地址和端口(这里用的是IPV6,端口号是443),另一个部分是Request Headers,这里也叫做请求头,里面会包含很多内容,比如Cookie,这里的作用可以理解成维系会话的连接

HTTP响应解析

还是用到上面使用curl访问百度的例子,下面是响应的内容

< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
< Connection: keep-alive
< Content-Length: 2381
< Content-Type: text/html
< Date: Wed, 02 Apr 2025 11:32:36 GMT
< Etag: "588604c1-94d"
< Last-Modified: Mon, 23 Jan 2017 13:27:29 GMT
< Pragma: no-cache
< Server: bfe/1.0.8.18
< Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/
<
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> 
#...
省略万字内容
...
<img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>
* Connection #0 to host www.baidu.com left intact

响应的内容中包含了HTTP协议的版本,响应的状态,keep-alive上面说过是属于http/1.1版本,这里也验证了,最下面是响应的内容

可以给一个结构图

  • 请求
    image

  • 响应
    image

HTTP请求与响应流程图

这里需要一些前置知识,可以查看这篇文章->计算机网络初始
image

HTTP常用状态码

这里只列举实际工作中常用及经常遇到的状态码,如果想要了解其它的状态码可自行败

  • 200:访问正常

  • 301:重定向,永久跳转

  • 302:重定向,临时跳转

  • 304:浏览器缓存

  • 401:权限问题,用户未通过验证

  • 403:权限拒绝,用户通过验证,但是请求权限不足。也有可能是首页文件问题

  • 404:文件不存在,可检查请求路径

  • 500:服务端错误

  • 502:网关错误,一般发生在负载中,请求发送到后面,但是后面没有服务处理

  • 503:服务临时不可用,后端负载异常

  • 504:网关超时

HTTPS协议

HTTPS协议概念

HTTPS(Hypertext Transfer Protocol Secure)是HTTP(Hypertext Transfer Protocol)的加密版本。它是一种在网络通信中用于保护数据安全的协议。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。HTTPS 使用 443 作为默认端口号

HTTPS与HTTP区别

  • 端口号不同
    HTTP协议默认使用80端口,而HTTPS协议默认使用443端口

  • 加密机制不同
    HTTP协议是明文传输,数据在传输过程中没有加密,容易被网络中的设备(如路由器、代理服务器等)或恶意攻击者截获和篡改。
    而HTTPS通过使用SSL/TLS(Secure Sockets Layer/Transport Layer Security)协议对数据进行加密。SSL/TLS协议是目前广泛使用的安全协议,它在TCP/IP协议栈的传输层之上,应用层之下,为应用层协议(如HTTP)提供安全服务。

  • 传输性能
    HTTP明文传输,中间不需要加密解密的操作,相对HTTPS传输速度较快,而HTTPS则需要加密解密的操作,相对效率反而慢

  • 应用场景
    HTTP适合非敏感数据传输:适用于对安全性要求不高的场景,如公共信息的浏览(如新闻网站、博客等)。
    HTTPS适合敏感数据传输:适用于对安全性要求较高的场景,如在线银行、电子商务网站、企业内部系统等,这些场景需要保护用户的隐私信息(如用户名、密码、信用卡号等)。

  • 加密证书
    HTTP不需要数字证书加密,而HTTPS则需要

HTTPS请求加密原理

image

  1. 客户端向服务端发起HTTPS请求,服务端向客户端返回一个数字证书(数字证书中包含了服务器的公钥、证书颁发机构的信息、证书有效期等)
  2. 客户端收到服务端的证书之后,会进行一系列验证操作,包括验证证书的有效性、颁发机构的可信度以及证书是否被篡改
  3. 如果证书验证失败,会在浏览器中进行提示连接可能不安全
  4. 如果证书验证成功,客户端会生成一个随机的密钥,并使用服务器的公钥进行加密
  5. 客户端将加密后的密钥发送给服务端,服务端使用自己的私钥解密得到该密钥
  6. 服务端会使用该密钥对响应内容进行加密发送给服务端,然后客户端对其进行解密,至此,加密会话建立

补充:常见的加密方式

对称加密

  • 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密,特征:加密和解密所用的密钥是相同的

  • 常见对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2 等

  • 特点:算法公开、计算量⼩、加密速度快、加密效率高

非对称加密

需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。

用法:

  • 通过公钥对明文加密, 变成密文
  • 通过私钥对密文解密, 变成明文

也可以反着用

  • 通过私钥对明文加密, 变成密文
  • 通过公钥对密文解密, 变成明文

数据摘要 && 数据指纹

数据摘要为什么叫做数据指纹,因为数据摘要具有唯一性,跟人的指纹一样具有唯一性

  • 数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash 函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。
  • 摘要常见算法:有 MD5、SHA1、SHA256、SHA512 等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)
  • 摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比

比如数据库明文密码保存——不推荐,我们就可以将密码进行摘要保存

补充:CA证书

服务端在使用 HTTPS 前,需要向 CA 机构申领一份数字证书,数字证书里含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明服务端公钥的权威性。
image
这个证书可以理解成是一个结构化的字符串, 里面包含了以下信息:

  • 证书发布机构
  • 证书有效期
  • 公钥
  • 证书所有者
  • 签名
posted @ 2025-04-03 15:09  huangSir-devops  阅读(188)  评论(0)    收藏  举报
作者:你的名字
出处:你的博客链接
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。