当前位置: 首页 > news >正文

【Java面试】Https和Http的区别?以及分别的原理是什么?

HTTP与HTTPS是互联网数据传输的两种核心协议,它们在安全性、工作原理和应用场景上存在显著差异。以下从核心区别工作原理两方面深入解析:


🔒 一、核心区别总结

特性HTTPHTTPS
安全性明文传输,数据易被窃听或篡改通过SSL/TLS加密传输,防止数据泄露和中间人攻击
端口号默认80端口默认443端口
证书要求无需证书需CA机构颁发的数字证书验证服务器身份
性能响应更快(无加密开销)因加密计算略慢,但现代硬件差距可忽略
协议层应用层协议,直接基于TCPHTTP + SSL/TLS安全层,再基于TCP
地址栏标识显示http://,浏览器提示"不安全"显示https://,带绿色锁图标

⚙️ 二、HTTP工作原理

HTTP(超文本传输协议)是无状态、无连接的请求-响应协议:

  1. 请求阶段
    • 客户端(如浏览器)发送HTTP请求,包含方法(GET/POST)、URL、头部信息(如User-Agent)。
    • 示例:GET /index.html HTTP/1.1
  2. 响应阶段
    • 服务器解析请求,返回状态码(如200 OK)和响应体(如HTML内容)。
  3. 连接关闭
    • 每次请求后TCP连接关闭(早期HTTP/1.0),HTTP/1.1后支持短时连接复用。

核心缺陷

  • 数据明文传输,易被中间人窃取或篡改(如密码、银行卡号)。
  • 无法验证服务器身份,可能访问钓鱼网站。

🔐 三、HTTPS工作原理

HTTPS = HTTP + SSL/TLS加密层,通过证书验证密钥交换对称加密三重机制保障安全:

  1. SSL/TLS握手阶段(关键)

    • 证书验证:服务器返回数字证书(含公钥、域名、CA签名)。浏览器验证证书有效性(是否过期、CA是否可信、域名匹配)
    • 密钥交换:客户端生成随机数(Pre-Master Secret),用服务器公钥加密后发送。服务器用私钥解密获取该随机数
    • 生成会话密钥:双方基于随机数生成对称会话密钥(如AES密钥),用于后续数据传输。
  2. 加密通信阶段

    • 使用会话密钥对HTTP数据进行对称加密传输,保证效率。
    • 通过MAC(消息认证码) 验证数据完整性,防止篡改

为何结合对称与非对称加密?

  • 非对称加密(如RSA)用于安全交换密钥(防窃听)。
  • 对称加密(如AES)用于高效加密大量数据。

🛡️ 四、HTTPS如何防止中间人攻击?

  1. 证书权威性
    • 中间人无法伪造CA签名的证书(私钥由CA保密),浏览器会警告非法证书
  2. 密钥保密性
    • 即使截获加密的随机数,中间人无服务器私钥无法解密,无法获取会话密钥
  3. 数据完整性校验
    • 每个数据包附带MAC值,篡改会导致校验失败。

⚠️ 注意:若用户主动安装抓包工具证书(如Fiddler),HTTPS仍可被解密,此时属于用户授信行为


💎 五、应用场景建议

  • HTTP:静态内容(如新闻页)、内网服务、性能敏感且无需加密的场景
  • HTTPS:登录/支付页面、API接口、用户隐私数据(如医疗记录)、SEO优化(谷歌优先收录HTTPS站点)

现代网站普遍转向HTTPS,Chrome等浏览器已将HTTP标记为“不安全”。安全性需求提升和免费证书(如Let’s Encrypt)的普及,加速了HTTPS的全面落地

http://www.dtcms.com/a/268583.html

相关文章:

  • 02 除了前面常见图表,还有许多更细分或专业的可视化类型,尤其是在特定领域(如金融、工程、生物信息等)。
  • GaussDB应用场景全景解析:从金融核心到物联网的分布式数据库实践
  • OpenCV 人脸分析----人脸识别的一个经典类cv::face::EigenFaceRecognizer
  • Oracle PL/SQL 编程基础详解(从块结构到游标操作)
  • idea 使用vscode 快捷键
  • UE 材质 变体 概念
  • ClickHouse 入门详解:它到底是什么、优缺点、和主流数据库对比、适合哪些场景?
  • 1.1_5_2 计算机网络的性能指标(下)
  • 【Vben3全解】【组件库开发】解决组件库开发中css的命名难题,保证代码质量,构建useNamespace函数
  • docker所占硬盘内存指令
  • 强化学习:Distributed PPO (DPPO) 学习笔记
  • Day08-Flask 或 Django 简介:构建 Web 应用程序
  • C++高频知识点(三)
  • 基于STM32设计的心率脉搏测量仪(项目资料)(ID:9)
  • 【Linux | 网络】网络编程套接字
  • Baklib作为赞助商参加RubyConf China 2025 技术大会
  • Java基础:随机数生成、循环结构与方法封装详解
  • 国产MCU学习Day10——CW32F030C8T6模拟电压比较器全解析
  • 【EGSR2025】材质+扩散模型+神经网络相关论文整理随笔
  • springsecurity03--异常拦截处理(认证异常、权限异常)
  • 【机器学习深度学习】多分类评估策略:混淆矩阵计算场景模拟示例
  • Rust 注释
  • OpenAI要开发能聊天的AI版Office挑战微软?
  • 【Spring】Spring Boot + OAuth2 + JWT + Gateway的完整落地方案,包含认证流程设计
  • window 服务器上部署前端静态资源以及nginx 配置
  • 揭秘图像LLM:从像素到语言的智能转换
  • 创意Python爱心代码
  • 基于Flink 1.20、StarRocks与TiCDC构建高效数据处理链路教程
  • linux如何下载github的一个项目
  • stm32与tp-linkv2接线、解决识别不到芯片问题