计算机网络系统速成

Http与Https

Http与Https是两种重要的网络通信协议,它们在Web通信中扮演着关键角色。以下是对Http与Https的详细解析:

一、Http(超文本传输协议)

1. 定义与功能
  • 定义:Http(HyperText Transfer Protocol)是一种用于分布式、协作式、超媒体信息系统的应用层协议。它定义了客户端与服务器之间请求和响应的格式,是万维网数据通信的基础。
  • 功能:Http的主要目的是提供一种发布和接收HTML页面的方法,允许用户通过互联网进行信息的请求和传输。
2. 特点
  • 基于TCP/IP:Http是一个基于TCP/IP通信协议来传递数据的协议。
  • 无连接:Http协议是无连接的,即每次连接只处理一个请求,服务器处理完客户请求,并收到客户的应答后,就断开连接。
  • 无状态:Http协议对事务处理没有记忆能力,即服务器不会保存任何关于客户端请求的信息。
  • 媒体独立:Http是媒体独立的,只要客户端和服务器知道如何处理数据内容,任何的数据内容都可以通过Http传送。
3. 工作流程
  • 建立连接:客户端与服务器之间建立TCP连接。
  • 发送请求:客户端向服务器发送请求,请求中包含要访问的资源的URL、请求方法(如GET、POST)、请求头以及可选的请求体。
  • 处理请求:服务器接收到请求后,根据请求中的信息找到相应的资源,执行相应的处理操作。
  • 发送响应:服务器将处理后的结果封装在响应中,并将其发送回客户端。响应包含状态码、响应头以及可选的响应体。
  • 关闭连接:在完成请求-响应周期后,客户端和服务器之间的连接可以被关闭,除非使用了持久连接。

二、Https(安全超文本传输协议)

1. 定义与功能
  • 定义:Https(HyperText Transfer Protocol Secure)是Http的安全版本,它在Http的基础上加入了SSL/TLS协议,用于在客户端和服务器之间建立加密的通信通道。
  • 功能:Https的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
2. 特点
  • 加密传输:Https在数据传输过程中进行加密,保护数据不被窃听。
  • 身份验证:Https通过证书验证服务器的身份,防止中间人攻击。
  • 数据完整性:Https确保数据在传输过程中不被篡改。
3. 工作流程
  • 建立SSL连接:客户端通过URL访问服务器,首先建立SSL连接。
  • 证书交换:服务端将网站支持的证书信息(包含公钥)传送给客户端。
  • 协商安全等级:客户端与服务器协商SSL连接的安全等级,即信息加密的等级。
  • 生成会话密钥:客户端根据协商的安全等级生成会话密钥,并利用网站的公钥加密后传送给网站。
  • 加密通信:服务器利用自己的私钥解密出会话密钥,并利用该密钥加密与客户端之间的通信。

三、Http与Https的比较

综上所述,Http与Https在Web通信中各有其特点和应用场景。Http适用于对安全性要求不高的场景,而Https则适用于需要保护数据隐私和完整性的场景。

 

Cookie和Session

 

ookie和Session是Web开发中常用的两种身份验证机制,它们各自通过不同的方式实现系统的身份验证。以下是对这两种机制如何实现系统身份验证的详细解释:

Cookie

定义与工作原理

  • Cookie是一种基于客户端的身份验证机制,它利用浏览器的本地存储来保存用户的状态信息。
  • 当用户第一次访问服务器时,服务器会为用户生成一个包含用户信息的字符串(通常包括加密的用户身份标识、会话标识等信息),并通过响应头Set-Cookie发送给客户端。
  • 客户端(浏览器)会将这个字符串保存在浏览器的Cookie中,并在之后的每次请求中通过请求头Cookie自动发送给服务器。

实现身份验证的步骤

  1. 生成Cookie
    • 服务器在用户登录成功后,生成一个包含用户身份信息的Cookie。
    • 这个Cookie可以包含用户的ID、会话标识(Session ID)或其他身份验证信息。
    • 服务器设置Cookie的属性,如过期时间、作用域(Path)、安全标志(Secure)、HttpOnly标志等,以提高安全性。
  2. 发送Cookie
    • 服务器将生成的Cookie通过响应头Set-Cookie发送给客户端。
  3. 存储与发送
    • 客户端(浏览器)将Cookie保存在本地。
    • 在随后的每次请求中,浏览器都会自动将Cookie包含在请求头中发送给服务器。
  4. 验证Cookie
    • 服务器接收到请求后,从请求头中提取Cookie。
    • 验证Cookie中的信息,如会话标识或用户ID,以确定用户的身份和会话状态。
    • 根据验证结果,服务器决定是否允许用户访问受保护的资源。

安全性考虑

  • Cookie数据存储在客户端,容易被窃取或篡改。因此,需要采取加密、签名等措施来保护Cookie中的数据。
  • 设置HttpOnly标志可以防止JavaScript访问Cookie,减少XSS攻击的风险。
  • 设置Secure标志确保Cookie仅在HTTPS连接下传输,防止中间人攻击。

Session

定义与工作原理

  • Session是一种基于服务器的身份验证机制,它利用服务器端的内存或数据库来存储用户的状态信息。
  • 当用户第一次访问服务器时,服务器会为用户创建一个唯一的标识符(Session ID),并将其发送给客户端(通常通过Cookie或URL重写的方式)。
  • 客户端将Session ID保存在浏览器的内存中或通过URL传递。
  • 在后续的请求中,客户端会将Session ID发送给服务器,服务器根据Session ID查找对应的Session数据,并根据其中的信息进行身份验证和授权。

实现身份验证的步骤

  1. 创建Session
    • 用户登录成功后,服务器为用户创建一个新的Session。
    • 生成一个唯一的Session ID,并将其与用户的身份验证信息关联起来。
  2. 发送Session ID
    • 服务器将Session ID通过Cookie(最常见的方式)或URL重写的方式发送给客户端。
  3. 存储Session数据
    • 服务器将用户的身份验证信息(如用户名、权限等)存储在Session对象中。
    • Session对象存储在服务器端的内存或数据库中。
  4. 验证Session ID
    • 客户端在后续的请求中,将Session ID发送给服务器。
    • 服务器根据Session ID查找对应的Session数据。
    • 验证Session数据中的身份验证信息,以确定用户的身份和会话状态。

安全性与效率考虑

  • Session数据存储在服务器端,因此相对安全,不易被客户端篡改。
  • Session机制适用于需要存储大量用户信息的场景,因为Session数据可以存储任意类型和数量的信息。
  • 然而,Session机制占用服务器资源,如果用户量较大或Session数据较多,会增加服务器的负担和开销。
  • 对于分布式部署的Web应用,需要实现Session数据的共享或同步,以确保用户状态的一致性。

综上所述,Cookie和Session各有优缺点,开发者可以根据具体的应用场景和安全需求选择合适的身份验证机制。在实际应用中,还可以结合Token等其他身份验证机制来提高系统的安全性和灵活性。

 BIO、NIO与AIO(IO模型)

Node.js的I/O模型主要基于异步非阻塞的方式,这是Node.js处理高并发请求的关键特性之一。以下是Node.js I/O模型的主要特点和要素:

1. 单线程和事件循环

  • Node.js采用单线程模型,但这并不意味着它只能同时处理一个任务。相反,通过事件循环机制,Node.js能够高效地处理并发请求。
  • 在事件循环中,Node.js会不断地检查消息队列中是否有待处理的事件,包括I/O事件和回调函数等。一旦有事件触发,Node.js就会调用相应的回调函数来处理该事件。

2. 异步非阻塞I/O操作

  • 当Node.js遇到I/O操作时(如文件读写、网络通信等),它不会阻塞后续代码的执行,而是立即返回一个结果给调用者,并继续执行后续的代码。
  • 这种异步非阻塞的方式允许Node.js在等待I/O操作完成的同时,能够处理其他任务,从而提高了程序的并发性和响应能力。

3. 回调函数

  • 回调函数是Node.js处理异步I/O的主要方式。当I/O操作完成后,Node.js会将结果放入一个回调函数队列中,等待事件循环来处理。
  • 回调函数允许程序在I/O操作完成后执行特定的代码块,从而实现了异步编程的灵活性。

4. I/O线程池

  • 在Node.js的底层实现中,虽然JavaScript执行在单线程中,但I/O操作实际上是由底层的线程池来完成的。
  • 这些线程池负责处理所有的I/O操作,并将结果通过事件循环传递给JavaScript线程。这种方式既保证了JavaScript执行的单线程性,又充分利用了多核CPU的并行处理能力。

5. 高效利用资源

  • 由于非阻塞的特性,Node.js能够在执行I/O操作时释放CPU资源,而不会空闲等待。这使得单个Node.js进程能够处理更多的并发请求,提高了系统的吞吐量和性能。

6. 优点

  • 高并发:通过异步非阻塞I/O和事件循环机制,Node.js能够高效地处理大量的并发请求。
  • 高性能:释放了CPU资源,使得单个Node.js进程能够处理更多的任务。
  • 简化编程模型:避免了多线程编程中的线程同步和数据共享问题,简化了编程模型。

7. 应用场景

  • 前后端编程语言环境统一。
  • 高性能I/O用于实时应用。
  • 并行I/O使得使用者可以更高效地利用分布式环境。
  • 并行I/O有效利用稳定接口提升Web渲染能力。
  • 云平台的支持。
  • 游戏开发。
  • 工具类应用,与较多的工具方法,使得开发效率大大提升。

综上所述,Node.js的I/O模型是一种高效、灵活的异步非阻塞模型,它允许Node.js在处理高并发请求时保持高性能和响应能力。

 

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

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

相关文章

Vue如何给计算属性computed传参的思考,看完就明白了!

一、缘起 事情的起因是这样的,有位朋友(无中生友)遇到了如下需求: 上面是一个商品列表,每个商品对应一个价格、优惠、数量,并且数量可以动态改变,最后动态计算出一个总价。当然,这只…

Ubuntu修改命令提示符格式PS1

命令提示符组成 通过Xshell进入Ubuntu的默认提示符是这样的 rootDESKTOP:~# root: 当前登录用户DESKTOP:主机名~: 当前目录名(即用户主目录)#:超级用户权限(root用户显示)$: 普通用户权限(非root用户显示) 修改命令提示符 step1…

nginx实战演练

目录 一.Nginx架构和安装&#xff08;未完待续&#xff09; <1>.Nginx概述 <2>.Nginx架构和进程 <3>.Nginx模块 <4>.Nginx安装(编译安装) 二.Nginx基础配置 <1>.关闭debug <2>.将nginx软件添加到环境变量 <3>.开机自启动脚…

Qt/C++地图标注点的添加删除移动旋转/指定不同图标和动图/拿到单击信号

一、前言说明 标注点在地图开发中是最常见的应用场景之一&#xff0c;比如在地图上需要显示设备的位置&#xff0c;基本上都是添加标注点&#xff0c;指定图片和尺寸已经经纬度坐标位置。这个功能在每种地图内核中都提供的&#xff0c;这个并没有任何难点&#xff0c;在这个功…

CeresPCL 最小二乘插值(曲线拟合)

一、简介 在多项式插值时,当数据点个数较多时,插值会导致多项式曲线阶数过高,带来不稳定因素。因此我们可以通过固定幂基函数的最高次数 m(m < n),来对我们要拟合的曲线进行降阶。之前的函数形式就可以变为: 既然是最小二乘问题,那么就仍然可以使用Ceres来进行求解。 …

★ C++基础篇 ★ vector 类

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C基础篇第六章----vector类 ~ 目录 一 vector的介绍及使用 1.1 vector的介绍 1.2 vector的使用 1.2.1 vector的定义 1.2.2 vector iterator 的使用 1.2.3 vector 空间增长问题 1.2.4 vecto…

使用 Fyne 构建 GUI 应用:设置标签文本和自增计数器

引言 Fyne 是一个用 Go 语言编写的跨平台 GUI 框架&#xff0c;它提供了一套丰富的组件来帮助开发者快速构建出漂亮的用户界面。在本文中&#xff0c;我们将通过一个简单的案例来演示如何使用 Fyne 创建 GUI 应用程序&#xff0c;该程序包含设置标签文本和自增计数器的功能。 …

高可用集群keepalived从部署到实战一篇解决

目录 一.高可用集群 1.1 集群类型 1.2 系统可用性 1.3 系统故障 1.4 实现高可用 1.5.VRRP&#xff1a; 1.5.1 VRRP 相关术语 1.5.2 VRRP 相关技术 二.Keepalived 部署 2.1 keepalived 简介 2.2keepalived架构 2.3 Keepalived 环境准备 2.4 Keepalived 相关文件 2.…

Python编写Word文档

目录 0. 安装依赖 1. 创建word文档 2. 添加标题、居中、字体16大小 3. 添加标题一 4. 添加一段话并设置字体颜色 封装函数 5. 换页 6. 插入表格 0. 安装依赖 python-docx1.1.2 1. 创建word文档 from docx import Documentdoc Document() 2. 添加标题、居中、字体1…

智碳云/高能耗企业 水-电-气-热-油-空压机等能源数据采集系统【源码】

智碳云/高能耗企业 水-电-气-热-油-空压机等能源数据采集系统【源码】 介绍基于SpringCloud的能源管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管管理系统源码-能管系统软件架构

【记git 重命名文件失败,和正确方法】

【背景】 想要重命名一个文件&#xff0c;并同步到远程 【过程】 1.我是直接把 “驱动增加he.c” 文件重命名为 “驱动增加播放he接口方法” &#xff0c;想着直接提交就会同步重命名git仓记录的文件名。然后就可以推送到远程仓库&#xff0c;同步重命名远程仓库的文件名。 2.然…

全球滑坡(降雨诱发的)数据(有时间属性)

滑坡一般指狭义概念的滑坡,是指构成斜坡的有滑动历史和滑动可能性的岩、土体边坡,在重力作用下伴随着其下部软弱面(带)上的剪切作用过程而产生整体性运动的现象。 滑坡的发育阶段滑坡的发生、发展过程是有阶段性的。根据大量的现场实际资料、观测成果、滑坡模型试验和相关的岩土…

ant design pro v6 如何做好角色管理

先上图&#xff1a; 整个角色管理是如何做的吗&#xff1f; 首先你要处理后端&#xff0c;要先把角色存到用户那。 这是用户管理部分的内容&#xff1a; 可以看到一个用户是有多个角色的。 看到没有&#xff0c;存的是数组 数组的是一个 role 对象 role 对象是这样&#xf…

【专题】2024年7月人工智能AI行业报告合集汇总PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p37350 随着人工智能技术的飞速发展&#xff0c;AI已经成为当今时代的重要驱动力。本报告将聚焦于人工智能AI行业的最新动态&#xff0c;涵盖客户服务、体验营销、资产管理以及国产AI大模型应用等多个领域。通过深入研究和分析&#xff0c;我们…

C++ 设计模式——抽象工厂模式

抽象工厂模式 抽象工厂模式 抽象工厂模式主要组成部分代码实现抽象工厂模式模式的 UML 图抽象工厂模式 UML 图解析优点和缺点适用场景 抽象工厂模式提供一个接口&#xff0c;用于创建一系列相关或相互依赖的对象&#xff0c;而无需指定它们的具体类。它通常用于需要创建多个产品…

2024年必读!《大模型应用开发极简入门》—— 一书掌握LLM大模型精髓

大家好&#xff0c;今天给大家推荐一本大模型应用开发入门书籍《大模型应用开发极简入门》&#xff0c;本书对很多AI概念做了讲解和说明&#xff01; 朋友们如果有需要 《大模型应用开发极简入门》&#xff0c;扫码获取~ 本书主要讲解了以下几个方面的大模型技术&#xff1a; …

[图解]片段16 ESS状态机图-SysMLEA建模住宅安全系统

1 00:00:00,220 --> 00:00:03,580 然后我们看初始这里 2 00:00:03,590 --> 00:00:09,500 有一个指向它的一个迁移的事件 3 00:00:09,710 --> 00:00:13,730 站点可用&#xff0c;这个实际上是错误的 4 00:00:14,020 --> 00:00:15,050 这不是事件 5 00:00:15,900…

NCSN公式推导(一)

通过估计数据分布的梯度进行生成建模 Paper Title&#xff1a;Generative Modeling by Estimating Gradients of the Data Distribution Paper是斯坦福大学发表在NIPS 2019的工作 Paper地址 Abstract 我们引入了一种新的生成模型&#xff0c;其中样本通过朗之万动力学生成&…

Power Query抓取多页数据导入到Excel

原文链接 举例网站&#xff1a;http://vip.stock.finance.sina.com.cn/q/go.php/vLHBData/kind/ggtj/index.phtml?last5&p1 操作步骤 &#xff08;版本为&#xff1a;Excel2010&#xff09;&#xff1a; Step-01&#xff1a;单击【Power Query】-【从Web】&#xff0c;…

日期类代码实现-C++

一、目标 通过前面对类和对象的介绍我们可以自己通过C代码初步实现一个简单的日期类。 实现的主要操作有&#xff1a; 1.日期类的构造函数 2.日期类的拷贝构造函数&#xff08;在头文件中实现&#xff09; 3.日期类的比较运算符重载 4.日期类的计算运算符重载 5.流插入运…