HTTP和HTTPS部分知识点

HTTP基本概念

超文本-传输-协议

  • 协议
    HTTP是一个用在计算机世界里的协议。它使用计算机可以理解的语言确立了一种计算机之间交流通信的规范(两个以上的参与者),以及相关的各种控制和错误处理方式(行为约定和规范)。
  • 传输
    HTTP协议是一个双向协议。是一个在计算机世界里专门用来在两点之间传输数据的约定和规范
  • 超文本
    HTTP传输的内容是超文本。图片、视频、压缩包在HTTP协议看来都是文本。超文本超越普通文本的文本,是文字、图片、视频的混合体,最关键有超链接能从一个超文本跳转到另一个超文本。HTML就是最常见的超文本。
    HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。

HTTP状态码

![[file-20250710094349699.png]]

  • 1xx类属于提示信息,是协议处理中一种中间状态,实际用的比较少
  • 2xx类状态码表示服务器成功处理了客户端的请求
    • 204Not Content 成功但响应头没有body数据
    • 206Partial Content 应用于HTTP分块下载或断点续传,表示响应的body数据不资源全部
  • 3xx状态码表示客户端请求的资源发生变动,需要客户端用新的URL重新发送请求获取资源,也就是重定向
    • 301表示永久重定向,需要客户端用新的URL再次访问
    • 302临时重定向,说明请求的资源还在,暂时需要另一个URL来访问
    • 301和302会在响应头字段location,指明后续要跳转的URL,浏览器自动重定向到新的URL
    • 304表示资源未修改,表示客户端可以继续使用缓存资源用于缓存控制
  • 4xx类状态码表示客户端发送报文有误,服务器无法处理
    • 400 表示客户端请求的报文有错误,但只是笼统错误
    • 403表示服务器禁止访问资源,不是客户端请求出错
    • 404表示请求资源在服务器不存在或没找到,无法提供给客户端
  • 5xx表示客户端请求正确,但是服务器处理时内部发生了错误,属于服务器端的错误码
    • 500与400类型是个笼统通用的错误码,服务器发生了什么错误并不知道
    • 501表示客户端的请求暂时不支持
    • 502表示服务器自身工作正常,但是访问后端服务器发生错误,通常是服务器作为网关或代理时返回的错误码
    • 503表示服务器繁忙暂时无法响应客户端

HTTP常见的字段

Host:客户端发送请求时用来指定服务器的域名。有个这个字段可以将请求发往同一台服务器上的不同网站
Content-Length表明本次回应的数据长度。HTTP协议通过设置回车符,换行符作为HTTP header的边界,通过Content-Length字段作为HTTP body的边界,这两个方式都是为了解决粘包问题。
Connection常用于客户端要求服务器使用HTTP长连接机制,以便其他请求复用。只要任意一端没有明确提出断开连接,则保持TCP连接状态
http/1.1版本默认开始长连接为了兼容老版本的HTTP,需要指定Connection首部字段的值为Keep-Alive
Content-Type:用于服务器回应时,告诉客户端,本次数据是什么格式
Content-Encoding说明数据的压缩方法。表示服务器返回的数据使用什么压缩格式

GET和POST区别

GET的语义是从服务器获取指定的资源,这个资源可以可以是静态的文本,页面,图片视频等。GET请求的参数位置一般是写在URL中,URL规定智能支持ASCII,所以GET请求的参数只允许ASCII,而且浏览器会对URL长度有限制(HTTP协议并没有对URL的长度有规定)

POST语义是根据请求负荷对指定的资源做出处理,具体的处理方式视资源类型而不同。POST请求携带数据的位置一般是写在报文body中,body中的数据可以是任意格式的数据,只要客户端和服务端协商好即可,而且浏览器不会对body大小做限制

GET和POST方法都是安全和幂等的吗

  • 在HTTP协议中,安全 指的是不会破坏服务器上的资源
  • 幂等指的是多次执行相同的操作,结果都是相同的
    从RFC规定的语义来看
  • GET方法是安全且幂等的。所以可以对GET请求的数据做缓存,这个缓存就可以做到浏览器本身上,也可以做到代理上,而且在浏览器中GET请求可以保存为书签
  • POST会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的

HTTP缓存技术

HTTP缓存的实现方式

强制缓存和协商缓存
强缓存指的是只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏览器这边。强缓存利用两个HTTP响应头部字段实现的,Cache-Control一个相对时间,Expires是一个绝对时间;Cache-Control优先级高于Expires
协商缓存:这里的两个字段都需要配合强制缓存中Cache-Control字段来使用,只有在未能命中强缓存的时候才能发起带有协商缓存字段的请求。

HTTP特性

http/1.1

  • 简单,基本报文格式是header+body,头部信息也是key-value简单文本的形式,头部信息也是key-value简单文本的形式,易于理解,讲了学习和使用的门槛
  • 灵活易于拓展允许开发人员自定义和扩充。同时HTTP工作在应用层它下层可以随意变化,HTTPS就是在HTTP和TCP之间加了SSL/TLS;http3.0传输协议该用UDP
  • 应用广泛和跨平台
    缺点
  • 无状态,好处服务器不用记忆HTTP状态,所以不需要额外的资源来记录状态信息,能减轻服务器的负担,能够把更多的CPU用来对外提供服务坏处在进行有关联的请求操作时每一步都需要验证用户的身份(可用cookie技术解决)
  • 明文传输,明文方便阅读但是毫无隐私容易窃取信息
  • 不安全,不加密传输账号信息易泄露。不验证通信双方身份可能遭遇伪装。无法验证报文的完整性,可能会被篡改。
    HTTP/1.1性能
    HTTP协议是基于TCP/IP,并且使用请求-应答的通信模式
    1.长连接
    在http1.0时每发起一个请求都要新建一次TCP连接,如果是串行请求,做了无谓的TCP连接建立和断开,增加通信开销。HTTP/1.1提出长连接通信方式。只要任意一端没有明确提出断开连接,则保持TCP连接状态。
    2.管道网络传输(没有被使用)
    即在同一个TCP连接里,客户端可以发起多个请求,只要第一个请求发送成功不用等响应就可以发送第二个请求,减少整体的响应时间。但是服务器必须按照接收请求的顺序发送对这些管道请求的响应。
    3.队头阻塞
    当顺序发送的请求序列中的一个请求因为某种原因被阻塞时,在后面排队的所有请求也一同被阻塞,导致客户端一直收不到数据,这就是队头阻塞

HTTP和HTTPS

区别

  • HTTP是超文本传输协议,信息明文传输,存在安全风险。HTTPS解决了HTTP不安全的缺陷,在HTTP和TCP中加入SSL/TLS,使报文加密传输
  • HTTP建立连接简单,TCP三次握手之后便可进行进行HTTP的报文传输,而HTTPS在TCP三次握手之后还要进行SSL/TLS握手,才可进入加密报文传输
  • 两者的默认端口不一样,HTTP默认端口号是80,HTTPS默认端口号是443
  • HTTPS协议需要向CA申请数字证书,来保证服务器的身份是可信的

HTTPS解决的问题

  • 信息加密,交互信息无法被窃取
  • 校验机制,无法篡改通信内容,篡改了就不能正常显示
  • 身份证书,证明淘宝是真的淘宝网
    解决的办法:
  • 混合加密的方式实现信息的机密性,解决窃听的风险
  • 摘要算法的方式实现完整性,它能够为数据生成独一无二的指纹,指纹用于校验数据的完整性,解决了篡改的风险
  • 将服务器公钥放到数字证书中,解决了被冒充的风险
    1.混合加密
    HTTPS采用的是对称加密和非对称加密结合的混合加密方式
  • 在通信建立前采用非对称加密的方式交换会话密钥
  • 在通信过程中全部使用对称加密的会话密钥的方式加密明文数据
    采用混合加密的原因:
  • 对称加密只使用一个密钥,运算速度块,密钥必须保密,无法做到安全的密钥交换
  • 非对称加密的两个密钥,公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢
    2.摘要算法+数字签名
    保证传输内容不被篡改对内容计算出一个指纹,然后同内容一起传输给对方
    收到后接收方对内容计算出指纹跟发送方发送的指纹做一个比较,指纹相同说明内容没有被篡改否则就可以判断出内容被篡改了。
    在计算机里会用摘要算法(哈希函数)来计算出内容的哈希值,也就是内容的指纹,这个哈希值是唯一的,且无法通过哈希值推导出内容。
    但是不能保证内容+哈希不会被中间人替换,因为这里缺少对客户端收到的消息是否来源于服务端的证明(客户端无法确认消息中的哈希值是否真的是服务端计算的)采用非对称加密来解决
  • 采用非对称加密通过私钥加密公钥解密方式,确认消息的身份,即数字签名算法,私钥加密内容不是内容本身,而是对内容的哈希值加密![[file-20250711212355318.png]]

*3.数字证书

  • 服务器将自己的公钥注册到CA
  • CA用自己的私钥将服务器的公钥数字签名并颁发数字证书(数字证书:服务器的公钥和CA的数字签名)
  • CA的公钥实现置入到了浏览器或操作系统中
  • 客户端拿到服务器的数字证书后使用CA的公钥确认服务器数字证书的真实性
  • 从数字证书获取到服务器的公钥后使用它对报文加密后发送

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/88770.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88770.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第10讲——一元函数积分学的几何应用

文章目录定积分计算平面图形的面积直角坐标系下参数方程下极坐标系下定积分计算旋转体的体积曲边梯形绕x轴旋转一周所得到的旋转体的体积曲边梯形绕y轴旋转一周所得到的旋转体的体积平面曲线绕定直线旋转定积分计算函数的平均值定积分计算平面光滑曲线的弧长曲线L绕x轴旋转一周…

Go从入门到精通(20)-一个简单web项目-服务搭建

Go从入门到精通(15)-包(package) Go从入门到精通(9)-函数 文章目录Go从入门到精通(15)-包(package)Go从入门到精通(9)-函数前言gogin…

Python爬虫实战:研究python-docx库相关技术

1. 引言 1.1 研究背景与意义 随着学术资源数字化程度的提高,科研工作者面临海量文献数据的筛选与分析挑战。传统人工调研方式效率低下,难以全面捕捉研究领域的动态趋势。自动化文献分析系统能够通过爬虫技术快速采集多源数据,并通过文本挖掘提取关键信息,为研究方向选择、…

Django中序列化与反序列化

1:序列化:将数据结构或对象状态转换为可以存储或传输的格式(如JSON、XML)的过程。在Web开发中,通常是将模型实例(或查询集)转换为JSON格式,以便通过HTTP响应发送给客户端。序列化&am…

【离线数仓项目】——电商域DWD层开发实战

摘要本文主要介绍了离线数仓项目中电商域DWD层的开发实战。DWD层是数据仓库架构中的明细数据层,对ODS层的原始数据进行清洗、规范、整合与业务建模。它具有数据清洗、标准化、业务建模、整合、维度挂载等作用,常见设计特征包括一致性、明细级建模、保留历…

爬虫-正则使用

1.模块选择用re模块导入,,最前面加个r,就不用怕转义了2.模块使用re.findall使用结果是数组方式呈现re.finditer把结果变成迭代器,从迭代器类中间取数re.searchre.search 只能匹配到第一个识别到的内容re.match3.推荐写法先预加载完…

python-range函数

文章目录基本用法重要特性与列表转换注意事项遍历回去列表的元素索引range()是Python中用于生成数字序列的内置函数,常用于循环和序列生成。基本用法 range(stop) # 生成0到stop-1的整数序列 range(start, stop) # 生成start到stop-1的整数序列 r…

汽车功能安全-软件集成和验证(Software Integration Verification)【目的、验证输入、集成验证要求】9

文章目录1 目的2 验证输入3 软件集成要求3.1 要求和建议3.2 汽车行业示例(混合动力控制器软件)4 验证要求1 目的 软件集成和验证阶段的核心目标是证明集成后的软件单元(模块、组件)已经正确地开发出来,满足了所有的功…

每天一个前端小知识 Day 27 - WebGL / WebGPU 数据可视化引擎设计与实践

WebGL / WebGPU 数据可视化引擎设计与实践🎯 一、为什么前端需要 WebGL / WebGPU? 传统的图表库如 ECharts、Highcharts 基于 Canvas 或 SVG,适合 2D 渲染,但: 当数据量 > 1 万时,SVG 性能瓶颈明显&…

JavaScript代码段注入:动态抓取DOM元素的原理与实践

1.F12打开网页说明:以百度网站为例。通过插入代码块抓取当前网页dom元素。2.新代码段说明:点击源代码/来源菜单项下面的代码段。点击新代码段新增代码段。下面以脚本代码段#6为例。3.编写代码块说明:编写javascript代码,点击下面的…

Spring Easy

Spring Easy 用途 通过自动配置,实现了一些国内 Spring Boot 开发时需要在 Spring Boot 框架基础上完成的一些配置工作,可以提升基于 Spring Boot 开发 Web 应用的效率。 安装 使用 Maven 进行包管理,可以从中央仓库安装依赖:…

【Node.js】文本与 pdf 的相互转换

pdf 转文本 主要使用 pdf-parse 这个库,直接识别提取我们 pdf 文件中的文字。 const express require("express"); const fs require("fs"); const PDFParser require("pdf-parse"); const cors require("cors");const…

分布式ID方案

目录 📊 分布式ID方案核心指标对比 🔍 分方案深度解析 ⚙️ 1. UUID (Universally Unique Identifier) ❄️ 2. Snowflake (Twitter开源) ☘️ 3. 美团Leaf 号段模式 Snowflake模式 🔄 4. 百度UidGenerator 🚀 5. CosId …

张量类型转换

一.前言本章节我们来讲解张量的类型转换,掌握张量的转换方法,张量的类型转换也是经常使⽤的⼀种操作,是必须掌握的知识点。在本⼩节,我们主要学习如何将 numpy 数组和 PyTorch Tensor 的转化⽅法.二.张量转换为 numpy 数组使⽤ Te…

JavaEE-初阶-多线程初阶

概念第一个多线程程序 可以通过查看jdk路径来找到jdk的控制可以通过jconsole来查看线程。创建线程这是实现多线程的其中一种方法,继承Thread类,实现run方法,之后实例化继承了Thread类的MyThread方法,调用start方法,就会…

解释全连接层的“参数数量”和“计算过程”,保证像看动画片一样直观~

假设场景输入图像:一张极小的 灰度图(即 H2,W2,共4个像素),像素值如图所示:隐藏层:假设隐藏层也是 (即 H2,W2,共4个神经元),每个神经元用 ( 表示…

DOM编程实例(不重要,可忽略)

文章目录 简介 表格增加删除&#xff0c;效果如下图 样式属性案例 简介 DOM---表格添加删除&#xff0c;样式属性案例 表格增加删除&#xff0c;效果如下图 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><met…

​Windows API 介绍及核心函数分类表

Windows API 介绍​ Windows API&#xff08;Application Programming Interface&#xff09;&#xff0c;也称为WinAPI&#xff0c;是微软Windows操作系统的核心编程接口。它提供了一系列函数、消息、数据结构、宏和系统服务&#xff0c;允许开发者创建运行在Windows平台上的应…

Kubernetes Dashboard UI 部署安装

K8S 集群环境&#xff1a; Ubuntu 24 / K8S 1.28.21. 推荐使用helm 安装Kubernetes Dashboardsudo snap install helm --classic2. 部署Kubernetes Dashboard# Add kubernetes-dashboard repository helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboar…

python-enumrate函数

文章目录基本语法基本用法基本遍历指定起始索引实际应用场景需要索引的循环创建字典映射处理文件行号与range(len())对比注意事项enumerate()是Python内置函数&#xff0c;用于在遍历序列&#xff08;如列表、元组或字符串&#xff09;时同时获取索引和值。基本语法 enumerate…