计算机网络系统速成

news2024/12/24 8:22:32

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.coloradmin.cn/o/2051314.html

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

相关文章

打卡学习Python爬虫第三天|电影天堂案例

一、明确需求 目标:爬取最新更新的电影的豆瓣链接 观察网页和页面源代码,每部电影都有一个超链接去到子页面,我们需要的内容在子页面,如果我们一个一个子页面的去爬取会比较麻烦,可以尝试先通过首页爬取子页面的超链…

指针初阶(指针类型转换的使用、指针数组)

一.指针基础 0.指针的大小 指针指向的是一块地址,所以指针存储的是地址,例如在32位系统中。定义了一个int32_t类型的变量。使用int32_t *定义一个指针,使其指向该变量。 设该变量存储在地址为00000000000000000000000000000001(3…

远程调用-OpenFeign(一)

目录 1.RestTemplate存在问题 2.OpenFeign介绍 一、主要特点 二、应用场景 3.OpenFeign快速上手 3.1引入依赖 3.2添加注解 3.3编写OpenFeign的客户端 3.4远程调用 ​编辑3.5测试 4.OpenFeign参数传递 4.1传递单个参数 4.2传递多个参数 4.3传递对象 4.4传递JSO…

编程修炼之Hibernate--- springboot启动初始化ddl过程

文章目录 跟踪Springboot整合hibernate的启动代码: 开始初始化 entityManagerFactory 创建方言 dialect 继续排查

Koa商城项目-轮播图模块(后端)

前言 通过这次独自做前后端发现有很多需要提升的地方,很多细节处理不到位。下面简单看一下本人自己做的效果吧~~ Git地址 https://gitee.com/ah-ah-bao/koa_system 效果图 后端逻辑分析 首先编写route->banner.router.js /*** author: zxb* date: 2024-08-06…

Socket编程TCP 基础

一.什么是Socket(套接字) 定义:就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程&#x…

【文献阅读】A Comprehensive Review of Multimodal Large Language Models

一、回顾 MLLMs 在语言、图像、视频和音频处理等多模态任务中表现出色。这些模型通过整合多模态信息来增强多模态任务的有效性。 在自然语言处理(NLP)任务中,如文本生成和机器翻译,MLLMs 利用图像、视频和音频提供上下文支持&am…

C#开发实验--卫星星历的计算、空间直角坐标和大地坐标的转换、ArcGIS Engine开发的简单实例

前不久在公众号GIS研发看到了暑假公益C#开发教程,教大家ArcGIS Engine开发。 想到了自己本科阶段也学习了C#开发和AE开发,学习了使用C#添加空间等,进行卫星星历的计算、空间直角坐标和大地坐标的转换、ArcGIS Engine开发的简单实例。 下面的…

数据结构与算法--插入排序与选择排序

文章目录 回顾提要排序基本概念排序的分类排序算法的稳定性排序算法的性能指标内排序 排序方法直接插入排序直接插入排序的要点直接插入排序的实现直接插入排序性能分析直接插入排序的适用情景 简单选择排序简单选择排序的要点简单选择排序的执行过程简单选择排序的实现简单选择…

虚幻5|布料模拟

打开骨骼网格体 1.Mass Prooerties 如果给角色施加风力,密度越大越难飘,相反密度越小飘动浮度也小 2.Material Proerties Edge Stiffness,对衣服的折痕处的调整,其值越大就越能维持原本的折痕,相反折痕就会变小,但…

【Mudo】实战项目之应用层模块

文章目录 前言正文1. Util1.1 File1.2 Url1.3 Str1.4 Infor 2. Http2.1 Request2.2 Response2.3 Context2.4 Server 尾序 前言 在上一篇文章当中,博主从代码的层面介绍了服务器模块的实现,最终封装出了一个传输层的TcpServer模块,那么在本篇…

中国篆刻艺术孙溟㠭凿木《未来之门》

孙溟㠭凿木《未来之门》 每人都有着自己对未来的期盼,未来并不遥远,下一秒就是未来,当下的一切好和一切的恶是暂时的,都会随着时间一秒一秒过去,走向未来,希望每人都能尽早打开未来之门,到达自己…

Arduino开源四足蜘蛛机器人制作教程

视频教程:手把手叫你做四足蜘蛛机器人——1零件介绍_哔哩哔哩_bilibili 一、项目介绍 1.1 项目介绍 Arduino主控,图形化编程,趣味学习 Arduino nano开发板舵机扩展底板 4.8V可充电电池,支持Arduino C语言编程和米思齐图形化编程…

Linux os下借助Qt+libvlc是实现多路拉取摄像头rtsp数据流并实时显示

前言 应客户方的一个实际项目需求,需要在Linux操作系统下拉取多路摄像头的RTSP数据流并实时显示。 该项目的硬件平台基于飞腾2000四核处理器与景嘉微显卡,搭载了Kylin V10操作系统。 当前景嘉微GPU最多支持同时连接16路摄像头,拉取1920x108…

C++中二叉搜索树的底层原理及实现

小编在学习完二叉搜索树(SearchBinaryTree)之后觉得虽然二叉搜索树不是很难,但是它对于后面学习C中的AVL树和红黑树及map和set的封装都有重要的作用,因此小编今天带给大家二叉搜索树的原理及实现,话不多说,开始学习!~~…

<Linux> git

在使用git之前,要先在linux中安装git yum list | grep git yum install -y 文件名 在第一次安装git时,需要进行下面的操作 git config --global user.email "你的邮箱名" git config --global user.name "你想要的名字" 1. git clon…

LeetCode 热题 HOT 100 (038/100)【宇宙最简单版】

【动态规划】No. 0337 打家劫舍III【中等】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&a…

NGINX 常用内置变量

目录 $remote_addr 变量 $args 变量 $is_args 变量 $document_root 变量 $document_uri 变量 $host 变量 $limit_rate 变量 $remote_port 变量 $remote_port --显示客户端端口 $request_method 变量 --返回请求方式 $request_filename 变量 --返回请求实际路径 $request_uri…

eNSP 华为ACL配置

华为ACL配置 需求&#xff1a;公司保证财务部数据安全&#xff0c;禁止研发部门和互联网访问财务服务器&#xff0c;但总裁办不受影响 R1&#xff1a; <Huawei>sys [Huawei]sys Router1 [Router1]undo info-center enable [Router1]int g1/0/0 [Router1-GigabitEthern…

AI 工程应用 建筑表面检测及修复

文章目录 1 项目概述&#xff08;必写&#xff09;&#xff1a;2 技术方案与实施步骤2.1 模型选择&#xff08;必写&#xff09;&#xff1a;2.2 数据的构建&#xff1a;2.3 功能整合&#xff08;进阶&#xff09;&#xff1a; 3 实施步骤&#xff1a;3.1 环境搭建&#xff08;…