前端 计算机基础篇 ( 二 )

news2024/9/27 12:18:02

文章目录

    • websockt及原理
    • ipv4和ipv6的区别
    • 线程和进程的区别
    • cdn原理
    • 缓存所涉及的http状态码
    • 缓存的时候设置 no-store和no-cache和max-age=0这几个有什么区别
    • token一般存放在哪儿
    • 怎么设置强缓存和协商缓存
      • 强缓存:
        • 1. 使用 Cache-Control 头字段:
      • 协商缓存:
        • 1. 使用 Last-Modified 和 ETag 头字段:
        • 2. 在响应中返回 304 Not Modified:
    • http每次都要建立一个连接吗?
    • tcp连接的三次握手和四次挥手
      • 三次握手(Establishing a Connection):
      • 四次挥手(Terminating a Connection):

websockt及原理

WebSocket 是一种单个 TCP 连接上进行全双工通信的协议,它允许在客户端和服务器之间进行实时数据传输。与传统的 HTTP 请求-响应模型不同,WebSocket 提供了持久性连接,允许双方在任何时候向对方发送数据而无需等待请求。

握手过程: WebSocket 的连接始于一个握手过程,该过程通过 HTTP 协议完成。客户端发送一个 WebSocket 握手请求到服务器,请求中包含了一些特定的头部信息,如 Upgrade: websocket 和 Connection: Upgrade。如果服务器支持 WebSocket,它将响应一个包含同样头部的握手确认,然后连接升级为 WebSocket。

持久连接: 一旦握手成功,WebSocket 连接就建立起来了,而且是持久性的。这意味着客户端和服务器之间的连接将一直保持打开状态,直到其中一方选择关闭连接

数据帧WebSocket 数据以数据帧的形式传输。数据帧可以是文本、二进制数据,或者其他自定义数据类型。这些数据帧通过 WebSocket 连接在客户端和服务器之间传递。

全双工通信: WebSocket 支持全双工通信,这意味着客户端和服务器都可以同时向对方发送数据,而不需要等待对方的响应。这在实时应用中非常有用,如聊天应用、实时游戏等。

心跳机制: 为了保持连接的活跃状态,通常会实现心跳机制。通过定期发送小的数据帧或 ping 消息,可以检测连接是否仍然可用

创建websocket请求

var socket = new WebSocket("ws://example.com/socket");

监听 WebSocket 的不同事件,以处理连接状态和接收数据。

// 监听连接建立事件
socket.addEventListener("open", function (event) {
    console.log("WebSocket 连接已建立");
});

// 监听接收到消息事件
socket.addEventListener("message", function (event) {
    console.log("收到消息:" + event.data);
});

// 监听连接关闭事件
socket.addEventListener("close", function (event) {
    console.log("WebSocket 连接已关闭");
});

// 监听发生错误事件
socket.addEventListener("error", function (event) {
    console.error("WebSocket 错误发生:" + event);
});

主动发送数据

// 发送文本消息
socket.send("Hello, WebSocket!");

// 发送 JSON 数据
var data = { message: "Hello, WebSocket!", user: "user123" };
socket.send(JSON.stringify(data));

主动关闭socket连接

// 关闭连接
socket.close();

ipv4和ipv6的区别

IPv4(Internet Protocol version 4)和IPv6(Internet Protocol version 6)是互联网协议的两个不同版本,用于标识和定位网络上的设备。

地址长度:
IPv4: 使用32位地址,通常表示为四个点分十进制数,如 192.168.0.1。每个部分取值范围是255, IPv4地址空间有限,约为42亿个地址(255255255*255)。

IPv6: 使用128位地址,通常表示为八组四位十六进制数,如 2001:0db8:85a3:0000:0000:8a2e:0370:7334。IPv6大大扩展了地址空间,提供了3.4 x 10^38个地址

安全性:
IPv6: 在设计时考虑了更多的安全特性,例如IPsec(Internet Protocol Security)在IPv6中是可选但更常见的部分,而在IPv4中是可选的。
IPv4: 安全性方面相对较弱,对于安全性需求通常需要添加额外的协议和功能。

网络层协议支持:
IPv4: 支持的网络层协议有IP、ICMP、IGMP等。
IPv6: 支持更多网络层协议 除了支持IPv4的协议外,还集成了IPsec,并在邻居发现中包含了Multicast Listener Discovery(MLD)等新的特性。

线程和进程的区别

进程: 进程是程序的执行实例,是操作系统分配资源的基本单位。一个进程可以包含多个线程。
线程: 线程是进程内的执行单元,是操作系统调度的基本单位。一个进程内的所有线程共享相同的资源和上下文。

独立性:
进程: 进程之间相对独立,一个进程的崩溃通常不会影响其他进程。
线程: 线程之间共享相同的资源,一个线程的错误可能会影响整个进程,但通过适当的同步和错误处理机制可以降低这种风险。

通信方式
进程: 进程间通信需要采用额外的机制(IPC),如消息传递、管道、共享内存等。
线程: 线程之间可以直接共享数据,通信更为简便。

cdn原理

CDN(Content Delivery Network)是一种网络架构,旨在通过在全球范围内的多个服务器上分发内容,提高用户对网站资源的访问速度和性能。

辐射式部署CDN 提供商在全球范围内部署了多个辐射点(Point of Presence,PoP)。每个 PoP 都包含有缓存服务器,这些服务器存储了网站的静态内容,如图像、样式表、脚本等。

DNS 解析: 用户在浏览器中输入网址并请求特定资源时,首先进行 DNS 解析。如果网站启用了 CDN,DNS 解析会返回距离用户最近的 CDN 辐射点的 IP 地址

请求重定向: 用户的请求经过本地 CDN 辐射点后,CDN 辐射点会检查请求的资源是否已经缓存在本地。如果有,CDN 直接返回缓存的资源;如果没有,CDN 会根据一系列的负载均衡和缓存算法,将请求转发到全球其他的 CDN 辐射点或源服务器上

内容缓存CDN 辐射点会在其服务器上缓存静态内容,通常是经过压缩和优化的版本。这样,当其他用户请求相同的资源时,CDN 辐射点可以直接返回缓存的内容,而无需再次访问源服务器。

负载均衡: CDN 提供商会使用负载均衡技术,确保用户请求被分发到最合适的 CDN 辐射点。这可以基于地理位置、服务器负载、网络拓扑等因素来进行动态调整。

动态内容加速: 除了静态内容,一些高级 CDN 提供商还提供动态内容加速。这通过缓存和优化动态生成的内容,减轻源服务器的负担。

安全性: CDN 也可以提供一些安全性措施,如 DDoS 攻击防护SSL 加密等,以确保用户和网站的数据安全。

缓存所涉及的http状态码

200 OK: 表示请求成功。当服务器返回 200 状态码时,可能会包含有关资源是否已被修改的信息,以确定是否使用缓存。

304 Not Modified: 表示资源未被修改,客户端可以使用缓存。当客户端发起条件请求(通常是带有 If-Modified-Since 或 If-None-Match 头部的 GET 请求),而服务器判断资源未被修改时,返回 304 状态码,告诉客户端可以使用缓存的版本。

410 Gone: 表示请求的资源不再可用。410 明确表示资源已被永久删除。如果客户端先前缓存了该资源,可能需要清除缓存。

缓存的时候设置 no-store和no-cache和max-age=0这几个有什么区别

这三个HTTP头字段涉及到浏览器缓存和服务器的缓存控制,它们有一些区别:

  1. no-store:

    • no-store 是一个缓存控制指令,表示不应该缓存任何与请求/响应有关的内容。
    • 它指示客户端不应该将请求/响应的任何部分存储在缓存中,包括不存储请求的副本和不存储响应的副本。
  2. no-cache:

    • no-cache 是一个缓存控制指令,表示缓存需要重新验证。
    • 它指示客户端在使用缓存之前必须先验证缓存的有效性,即发送请求到服务器进行检查,但不一定需要下载整个响应。
  3. max-age=0:

    • max-age 是一个缓存控制指令,表示资源在缓存中的最大存储时间,单位是秒。
    • max-age=0 表示资源已经过期,客户端必须将请求发送到服务器进行验证,以确保缓存的内容仍然有效。实际上,这等效于 no-cache 指令。

总结区别:

  • no-store 表示完全禁止缓存,不存储任何内容。
  • no-cache 表示需要重新验证缓存,客户端需要发送请求到服务器进行检查。
  • max-age=0 也表示需要重新验证缓存,相当于 no-cache,因为 max-age=0 意味着资源已经过期。

token一般存放在哪儿

token可以存在在cookie或者local storage,但一般存在local storage

为什么不存储在 Cookie 中的一些考虑:

CSRF 攻击: Cookies 在每个请求中都会被自动发送到服务器,因此如果 Token 存储在 Cookie 中,那么攻击者可能通过构造恶意网站来利用用户的身份进行恶意请求,即 CSRF 攻击。

安全性和隐私: Cookies 通常会被浏览器自动管理,而 Local Storage 则由 JavaScript 控制。从安全性和隐私的角度来看,开发人员可能更喜欢使用 Local Storage,以便更精确地控制 Token 的存储和获取。

强缓存和协商缓存分别是什么,请求的过程是怎样的
客户端首次请求资源时服务器会在响应头中添加 Last-Modified 字段,表示资源的最后修改时间。当客户端再次请求资源时,可以在请求头中包含 If-Modified-Since 字段其值为上次收到的 Last-Modified 的值

服务器发现请求中的 If-Modified-Since 的值与服务器上资源的最后修改时间相同,说明客户端的资源仍然是最新的,服务器会返回 304 Not Modified,并告诉客户端可以使用缓存。

当服务器返回资源时,也可以在响应头中添加 ETag 字段,表示资源的唯一标识符。客户端再次请求资源时,可以在请求头中包含 If-None-Match 字段,其值为上次收到的 ETag 的值。

如果服务器发现请求中的 If-None-Match 的值与服务器上资源的 ETag 相同,说明客户端的资源仍然是最新的,服务器会返回 304 Not Modified,并告诉客户端可以使用缓存。

怎么设置强缓存和协商缓存

在服务器端设置强缓存或协商缓存可以通过在 HTTP 响应头中添加相应的字段来实现。以下是设置强缓存和协商缓存的常用响应头字段:

强缓存:

1. 使用 Cache-Control 头字段:
  • max-age: 设置资源的最大缓存时间,单位是秒。

    Cache-Control: max-age=3600
    
  • s-maxage: 用于代理服务器,设置共享缓存的最大时间。

    Cache-Control: s-maxage=3600
    
  • public: 表示资源可以被任何缓存(包括代理服务器)缓存。

    Cache-Control: public, max-age=3600
    
  • private: 表示资源仅可被浏览器缓存。

    Cache-Control: private, max-age=3600
    
  • no-cache: 表示浏览器每次请求都要向服务器验证资源是否过期。

    Cache-Control: no-cache
    

协商缓存:

1. 使用 Last-Modified 和 ETag 头字段:
  • Last-Modified: 表示资源的最后修改时间。

    Last-Modified: Tue, 23 Nov 2023 12:00:00 GMT
    
  • ETag: 表示资源的唯一标识符。

    ETag: "686897696a7c876b7e"
    
2. 在响应中返回 304 Not Modified:

当客户端发起请求时,服务器通过比较请求头中的 If-Modified-SinceIf-None-Match 字段与资源的修改时间或标识来判断是否需要返回新的资源。如果没有变化,服务器可以直接返回 304 Not Modified,告诉客户端可以使用缓存。

HTTP/1.1 304 Not Modified
Date: Tue, 23 Nov 2023 12:00:00 GMT

通过这些设置,服务器可以控制浏览器缓存行为,实现强缓存和协商缓存。请注意,在实际应用中,可以根据具体的业务需求选择适当的缓存策略。

http每次都要建立一个连接吗?

HTTP/1.1 中,默认情况下是可以复用连接的,即通过持久连接(Persistent Connection)的方式。这意味着在单个 TCP 连接上,可以传输多个 HTTP 请求和响应,而不必为每个请求都重新建立一个连接。

tcp连接的三次握手和四次挥手

TCP(Transmission Control Protocol)是一种面向连接的协议,它使用三次握手和四次挥手来建立和终止连接。

TCP(Transmission Control Protocol)是一种面向连接的协议,它使用三次握手和四次挥手来建立和终止连接。

三次握手(Establishing a Connection):

  1. 客户端发送 SYN(同步)报文:

    • 客户端向服务器发送一个 TCP 报文,标志位 SYN 置为 1,表示请求建立连接,并选择一个初始的序列号(ISN)。
  2. 服务器发送 SYN + ACK 报文:

    • 服务器收到客户端的 SYN 请求后,如果同意建立连接,会向客户端发送一个 TCP 报文,其中 SYN 置为 1,同时 ACK(确认)标志也置为 1,表示确认收到客户端的请求,并选择自己的初始序列号。
  3. 客户端发送 ACK 报文:

    • 客户端收到服务器的 SYN + ACK 报文后,会向服务器发送一个 ACK 报文,确认服务器的建立连接请求。

此时,连接建立完成,可以开始进行数据传输。

四次挥手(Terminating a Connection):

  1. 客户端发送 FIN 报文:

    • 客户端希望关闭连接时,会向服务器发送一个 FIN(结束)报文,表示不再发送数据。
  2. 服务器发送 ACK 报文:

    • 服务器收到客户端的 FIN 报文后,发送一个 ACK 报文,确认收到客户端的关闭请求。此时服务器进入 CLOSE-WAIT 状态,表示可以关闭连接,但还需要等待可能未发送完的数据。
  3. 服务器发送 FIN 报文:

    • 服务器确认可以关闭连接后,发送一个 FIN 报文给客户端,表示服务器也不再发送数据了。
  4. 客户端发送 ACK 报文:

    • 客户端收到服务器的 FIN 报文后,发送一个 ACK 报文,确认收到服务器的关闭请求。

此时,连接终止。客户端和服务器都进入 CLOSED 状态。

需要注意的是,四次挥手中的 ACK 报文通常和 FIN 报文合并在一个报文中发送,因此可能看起来只有三次数据包交换。

在这里插入图片描述

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

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

相关文章

unordered_map 与 unordered_set 的使用

unordered_map unordered_map 的介绍文档 unordered_map 的介绍文档&#xff1a;来自cpluscplus.com 的中文翻译 unordered_map是存储<key, value>键值对的关联式容器&#xff0c;其允许通过keys快速的索引到与 其对应的value。在unordered_map中&#xff0c;键值通常用…

码云 -- 本地代码上传到码云

1. 在码云上创建远程仓库 复制远程仓库地址 2. 在本地代码上创建 git 仓库 在本地代码文件夹上&#xff0c;打开git 命令窗口 输入初始化命令&#xff0c;创建 git 仓库 git init3. 给 git 仓库添加远程仓库 继续输入 git 命令 git remote add origin 远程仓库地址4. 按 git 的…

数字逻辑电路基础-时序逻辑电路之触发器

文章目录 一、D触发器二、verilog源码三、综合及仿真结果一、D触发器 本文介绍数字逻辑电路中常用的基础时序逻辑电路触发器。它有记忆和存储信息功能,触发器是边沿触发电路。 下图是触发器常用表示方式(时钟上升沿有效): 触发器由两个锁存器组成,前级是主锁存器,后级…

Git工作流和Commit规范

Git大家都非常熟悉了&#xff0c;就不做过多介绍&#xff0c;但是如何用好Git、如何进行合理的分支开发、Merge你是否有一个规范流程呢&#xff1f;&#x1f4a4; 不论是一个团队一起开发一个项目&#xff0c;还是自己独立开发一个项目&#xff0c;都少不了要和Git打交道&…

C++学习笔记——static对象

一、static对象——累计创建了多少对象和正在使用的对象数目 static更多的是作为一个介入类的一个第三方成员变量。 声明为static的类成员称为类的静态成员&#xff0c;用static修饰的成员变量&#xff0c;称之为静态成员变量&#xff1b; 用static修饰的成员函数&#xff0c;称…

JS逆向之wasm逆向(二)

本文仅供技术交流和技术学习 不做其他用途 接着上一篇继续讲&#xff1a; 上篇地址&#xff1a; JS逆向之wasm逆向(二进制) 网址&#xff1a; aHR0cHM6Ly93d3cuN3E2Y3lqLmNvbTo5MDAxL3JlZ2lzdGVyNDY5Njg/aV9jb2RlPTQ0Mjc5OTU1 这个网站我们后面可以继续讲他的debugger 和滑块…

Spring Boot 整合MyBatis-Plus 详解

MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 全新的 MyBatis-Plus 3.0 版本基于 JDK8&#xff0c;提供了 lambda 形…

【数据结构】树和二叉树详解

目录 1. 前言2. 树概念及结构2.1. 树的概念2.2. 与树有关的一些概念2.3. 树与非树2.4. 树的表示 3. 二叉树概念及结构3.1. 二叉树概念3.2. 特殊的二叉树3.3. 二叉树的性质3.4 二叉树的存储结构3.4.1 顺序存储3.4.2 链式存储 3.5 堆 1. 前言 在前面我们一起了解的数据结构有顺序…

振南技术干货集:制冷设备大型IoT监测项目研发纪实(6)

注解目录 1.制冷设备的监测迫在眉睫 1.1 冷食的利润贡献 1.2 冷设监测系统的困难 &#xff08;制冷设备对于便利店为何如何重要&#xff1f;了解一下你所不知道的便利店和新零售行业。关于电力线载波通信的论战。&#xff09; 2、电路设计 2.1 防护电路 2.1.1 强电防护 …

初识JVM(简单易懂),解开JVM神秘的面纱

目录 一、什么是JVM&#xff08;Java虚拟机&#xff09;&#xff1f; 二、JVM的功能 三、JVM的功能-即时编译 四、常见的JVM 五、JVM的组成 五、JVM的工作流程 参考资料 一、什么是JVM&#xff08;Java虚拟机&#xff09;&#xff1f; 在Java的世界里&#xff0c;Java虚…

【实验】配置用户自动获取IPv6地址的案例

【赠送】IT技术视频教程&#xff0c;白拿不谢&#xff01;思科、华为、红帽、数据库、云计算等等​编辑https://xmws-it.blog.csdn.net/article/details/117297837?spm1001.2014.3001.5502https://xmws-it.blog.csdn.net/article/details/117297837?spm1001.2014.3001.5502【…

云贝教育 |【技术文章】PG的缓存管理器原理

PG的缓存管理器原理 缓冲区管理器管理共享内存和持久存储之间的数据传输 &#xff0c; 它会对 DBMS 的性能产生重大影响。 PostgreSQL 缓冲区管理器工作非常高效。 本章介绍 PostgreSQL 缓冲区管理器。第一部分提供概述 &#xff0c;后续部分描述以下主题&#xff1a; 缓冲…

OSG动画与声音-路径动画之导出与导入(2)

路径的导出示例 路径的导出示例的代码如程序清单10-2所示。 1. // 创建路径 2. osg::ref_ptr<osg::AnimationPath> createAnimationPath(osg::Vec3 ¢er, 3. float radius, float looptime) 4. { 5. // 创建一个Path对象 6. osg::ref_ptr<…

【史上最细教程】服务器MySQL数据库完成主从复制

文章目录 MySQL完成主从复制教程准备&#xff1a;原理&#xff1a;步骤&#xff1a; 推荐文章 MySQL完成主从复制教程 主从复制&#xff08;也称 AB 复制&#xff09;就是将一个服务器&#xff08;主服务器&#xff09;的数据复制到一个或多个MySQL数据库服务器&#xff08;从…

云安全之盾:ZStack 云主机安全防护解决方案全方位保护云环境

随着云计算的蓬勃发展&#xff0c;网络威胁愈发复杂&#xff0c;涵盖了从勒索病毒到APT攻击的各种威胁类型。在这一风云变幻的网络安全环境下&#xff0c;云主机安全不再仅仅是一个选项&#xff0c;它是信息系统安全的核心要素。云轴科技ZStack 云主机安全防护解决方案是为了满…

java项目之品牌银饰售卖平台(ssm+vue)

项目简介 主要功能包括首页、个人中心、用户管理、促销活动管理、饰品管理、我的收藏管理、系统管理、订单管理等。管理员模块: 管理员可以查询、编辑、管理每个用户的信息和系统管理员自己的信息&#xff0c;同时还可以编辑、修改、查询用户账户和密码&#xff0c;以及对系统…

项目管理套路:看这一篇绝对够用❤️

写论文必不可少的&#xff0c;就是创建代码并进行实验。好的项目管理可以让实验进行得更加顺利。本篇博客以一次项目实践为例&#xff0c;介绍项目管理的方法&#xff0c;以及可能遇到的问题&#xff0c;并提供一些可行的解决方案。 目录 项目管理工具开始第一步版本管理十分关…

微信小程序:This Mini Program cannot be opened as your Weixin version is out-of-date.

项目场景&#xff1a; 问题描述 升级基础库3.2.0&#xff0c;然后PC端整个小程序都打不开了&#xff0c;点击小程序提示”This Mini Program cannot be opened as your Weixin version is out-of-date. Update Weixin to the latest version.“&#xff0c;并且点击Update Wei…

成为AI产品经理——模型构建流程(下)

目录 1.模型训练 2.模型验证 3.模型融合 4.模型部署 上节课我们讲了模型设计、特征工程&#xff0c;这节课我们来讲模型构建剩下的三个部分&#xff1a;模型训练、模型验证和模型融合。 1.模型训练 模型训练就是要不断地训练、验证、调优直至让模型达到最优。 那么怎么达…

Linux系统装宝塔面板提示磁盘空间不足如何清理,检测到当前磁盘超过80%,空间不足如何清理

Linux系统装宝塔面板提示磁盘空间不足如何清理&#xff0c;检测到当前磁盘超过80%&#xff0c;空间不足如何清理 今天登陆服务器查看到磁盘空间满&#xff0c;如题这部分属于运维问题&#xff0c;如果直接点击 如何直接点立即清理会跳转企业版购买&#xff0c;1599CNY对普通用…