【Linux网络】序列化、守护进程、应用层协议HTTP、Cookie和Session

头像
⭐️个人主页:@小羊
⭐️所属专栏:Linux
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

动图描述

目录

    • 1、序列化和反序列化
    • 2、守护进程
      • 2.1 什么是进程组?
      • 2.2 什么是会话?
    • 3、应用层协议HTTP
      • 3.1 HTTP协议
      • 3.2 HTTP协议请求和响应格式
      • 3.3 HTTP的方法和常见状态码
      • 3.4 HTTP常见Header
      • 3.5 怎么理解HTTP是无连接无状态的?
    • 4、Cookie和Session
      • 4.1 Cookie
      • 4.2 Session


1、序列化和反序列化

  • 什么是序列化和反序列化?
    序列化是将对象或数据结构转换为可存储或传输的格式的过程,而反序列化是将这种格式转换回原始对象或数据结构的过程。
  • 为什么要进程序列化和反序列化?
    序列化和反序列化是为了实现对象状态的持久化存储、网络传输以及在不同系统或进程间的数据交换。
  • 关于制定协议
    所谓制定协议,本质其实就是在定制双方都认识的、符合通信和业务需要的结构化数据。

在这里插入图片描述

| read、write、recv、send 和 tcp 为什么支持全双工?

  • 在任意一台主机上,TCP连接既有发送缓冲区,又有接收缓冲区,所以在内核中发消息和收消息可以同时进行,也就是全双工。
    在这里插入图片描述

2、守护进程

2.1 什么是进程组?

  • 每一个进程除了有一个进程 ID(PID)之外,还属于一个进程组。进程组是一个或者多个进程的集合,一个进程组可以包含多个进程。 每一个进程组也有一个唯一的进程组 ID(PGID), 并且这个 PGID 类似于进程 ID, 同样是一个正整数, 可以存放在 pid_t 数据类型中。
  • 每一个进程组都有一个组长进程。 组长进程的 ID 等于其进程 ID。

在这里插入图片描述

  • fg [任务号]:将进程放到前台
  • bg [任务号]:将进程放到后台
  • jobs:查看当前用户启动的任务

在这里插入图片描述

  1. 任何登录,只允许任何时刻有一个前台进程(因为标准输入只有一个),多个或0个后台进程
  2. 命令行启动任何进程,bash自动变成后台,直到前台进程结束

2.2 什么是会话?

  • 会话可以看成是一个或多个进程组的集合, 一个会话可以包含多个进程组。每一个会话也有一个会话 ID(SID)。
  • 可以调用 setseid 函数来创建一个会话, 前提是调用进程不能是一个进程组的组长。

守护进程是后台进程的一种,但是后台进程依旧属于当前会话,而守护进程是独立会话。

  • 守护进程要脱离终端——从网络、磁盘文件IO
  • 守护进程是特殊的孤儿进程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#pragma once#include <iostream>
#include <cstdlib>
#include <signal.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>#define ROOT "/"
#define DEVNULL "/dev/null" // 黑洞文件void Daemon(bool ischdir, bool isclose)
{// 1.守护进程一般要屏蔽掉特定的异常信号signal(SIGCHLD, SIG_IGN);signal(SIGPIPE, SIG_IGN);// 2.成为非组长if (fork() > 0) exit(0);// 3.建立新会话setsid();// 4.每一个进程都有自己的CWD,是否将当前进程的CWD更给为根目录if (ischdir) chdir(ROOT);// 5.已经变成守护进程了,不需要和用户输入输出if (isclose){close(0);close(1);close(2);}else{int fd = open(DEVNULL, O_WRONLY);if (fd > 0){dup2(fd, 0);dup2(fd, 1);dup2(fd, 2);close(fd);}}
}

3、应用层协议HTTP

3.1 HTTP协议

  • HTTP(HyperText Transfer Protocol,超文本传输协议)是一个非常重要的协议,它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如 HTML 文档)。
  • 客户端通过 HTTP 协议向服务器发送请求,服务器收到请求后处理并返回响应。
  • HTTP 协议是一个无连接、无状态的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。

3.2 HTTP协议请求和响应格式

| HTTP请求:

POST /api/v1/users HTTP/1.1
Host: example.com
User-Agent: Custom-HTTP-Client/1.0
Content-Type: application/json
Content-Length: 135{"username": "newuser","password": "securepassword123","email": "newuser@example.com","firstName": "John","lastName": "Doe"
}
  • 首行:[方法] + [url] + [版本](上面的POST就是请求方法
  • Header:请求的属性+冒号分割的键值对,每组属性之间使用\r\n 分隔,遇到空行表示 Header 部分结束
  • Body:空行后面的内容都是 Body,Body 允许为空字符串,如果 Body 存在, 则在Header 中会有一个 Content-Length 属性来标识 Body 的长度

在这里插入图片描述

| HTTP响应:

HTTP/1.1 200 OK
Date: Tue, 15 Nov 2023 08:12:31 GMT
Content-Type: application/json
Content-Length: 44
Connection: keep-alive{"message": "Hello, this is a sample HTTP response!"
}
  • 首行:[版本号] + [状态码] + [状态码解释]
  • Header:请求的属性,冒号分割的键值对,每组属性之间使用\r\n 分隔,遇到空行表示 Header 部分结束
  • Body:空行后面的内容都是 Body,Body 允许为空字符串,如果 Body 存在,则在Header 中会有一个 Content-Length 属性来标识 Body 的长度,如果服务器返回了一个 html 页面,那么 html 页面内容就是在 body 中
    在这里插入图片描述

3.3 HTTP的方法和常见状态码

方法说明支持的HTTP版本
GET请求从指定的资源获取数据HTTP/1.0, HTTP/1.1
HEAD类似于GET请求,但只返回响应头,不返回响应体HTTP/1.0, HTTP/1.1
POST向指定资源提交数据以进行处理HTTP/1.0, HTTP/1.1
PUT向指定资源上传其最新内容,通常会替换掉原有内容HTTP/1.1
DELETE请求服务器删除指定的资源HTTP/1.1
CONNECT将请求连接转换为透明的TCP/IP隧道,通常用于HTTPS代理HTTP/1.1
OPTIONS描述目标资源的通信选项HTTP/1.1
TRACE沿着到目标资源的路径,回显服务器收到的请求消息HTTP/1.1
PATCH对资源进行部分修改HTTP/1.1

其中最常用的就是 GET 方法和 POST 方法。

  • GET:主要用于从服务器获取资源,GET把提交的参数拼接到URL的后面
  • POST:主要用于向服务器提交数据,通常用于创建、更新或删除资源等操作,POST通过正文传递参数,因此POST传递参数更私密。
状态码类别描述
100信息性状态码Continue - 客户端应继续其请求
101信息性状态码Switching Protocols - 服务器根据客户端的请求切换协议
200成功状态码OK - 请求成功
201成功状态码Created - 请求成功并创建了新的资源
301重定向状态码Moved Permanently - 请求的资源已永久移动到新的URI
302重定向状态码Found - 请求的资源临时从不同的URI响应请求
403客户端错误Forbidden - 服务器拒绝请求
404客户端错误Not Found - 请求的资源未找到
409客户端错误Conflict - 请求与当前服务器状态冲突
500服务器错误Internal Server Error - 服务器内部错误,无法完成请求
501服务器错误Not Implemented - 服务器不支持请求的功能,无法完成请求

关于状态码301(永久重定向)302(临时重定向)

  • 301(永久重定向)
    当服务器返回 HTTP 301 状态码时, 表示请求的资源已经被永久移动到新的位
    置。在这种情况下, 服务器会在响应中添加一个 Location 头部, 用于指定资源的新位置,浏览器会自动重定向到该地址。
HTTP/1.1 301 Moved Permanently\r\n
Location: https://www.new-url.com\r\n
  • 302(临时重定向)
    当服务器返回 HTTP 302 状态码时, 表示请求的资源临时被移动到新的位置。服务器也会在响应中添加一个 Location 头部来指定资源的新位置。 浏览器会暂时使用新的 URL 进行后续的请求, 但不会缓存这个重定向。
HTTP/1.1 302 Found\r\n
Location: https://www.new-url.com\r\n

3.4 HTTP常见Header

  • Content-Type:数据类型(text/html 等)
  • Content-Length:Body 的长度
  • Host:客户端告知服务器,所请求的资源是在哪个主机的哪个端口上
  • User-Agent:声明用户的操作系统和浏览器版本信息
  • referer:当前页面是从哪个页面跳转过来的
  • Location:搭配 3xx 状态码使用,告诉客户端接下来要去哪里访问
  • Cookie:用于在客户端存储少量信息,通常用于实现会话(session)的功能

| 关于 connection 报头

  • HTTP 中的 Connection 字段是 HTTP 报文头的一部分, 它主要用于控制和管理客户端与服务器之间的连接状态

  • 管理持久连接:持久连接(也称为长连接)允许客户端和服务器在请求或响应完成后不立即关闭 TCP 连接, 以便在同一个连接上发送多个请求和接收多个响应。

  • HTTP/1.1 协议中, 默认使用持久连接。 当客户端和服务器都不明确指定关闭连接时, 连接将保持打开状态, 以便后续的请求和响应可以复用同一个连接。

  • HTTP/1.0 协议中, 默认连接是非持久的。 如果希望在 HTTP/1.0上实现持久连接, 需要在请求头中显式设置 Connection: keep-alive。

  • Connection: keep-alive: 表示希望保持连接以复用 TCP 连接。

  • Connection: close: 表示请求/响应完成后, 应该关闭 TCP 连接。


3.5 怎么理解HTTP是无连接无状态的?

| 无连接:

  • 含义:并不是指不建立连接,而是指每次连接只处理一个请求;当服务器返回本次请求的应答后,连接即被关闭,下次请求再重新建立连接。
  • 优点:节省传输时间,提高服务器执行效率。
  • 缺点:每次访问都需要建立一次TCP连接效率不高,所以有了Keep-Alive机制,使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,避免了建立或者重新建立连接,但需要正确设置Keep-Alive的timeout时间。

| 无状态:

  • 含义:HTTP协议对于事务处理没有记忆能力,即服务器不会保留任何关于客户端状态的信息。
  • 优点:简化服务器设计,提高可扩展性和容错性。
  • 缺点:HTTP无状态的特性严重阻碍了需要动态交互应用程序的实现,并且导致传输重复内容。
  • 解决方案:应用CookieSession等技术来保持HTTP连接状态。

4、Cookie和Session

Cookie通过在客户端存储信息来记住用户的状态,而Session则通过在服务器端存储信息来实现状态管理。

4.1 Cookie

  • 定义:Cookie 是服务器发送到用户浏览器并保存在浏览器上的一小块数据,它会在浏览器之后向同一服务器再次发起请求时被携带并发送到服务器上。通常用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态、记录用户偏好等。
  • 原理:用户第一次访问网站时,服务器在响应的 HTTP 头中设置 Set-Cookie字段,用于发送 Cookie 到用户的浏览器,浏览器在接收到 Cookie 后,会将其保存在本地,在之后的请求中,浏览器会自动在 HTTP 请求头中携带 Cookie 字段,将之前保存的 Cookie 信息发送给服务器。
  • 分类:会话 Cookie(Session Cookie)和持久 Cookie(Persistent Cookie),带有明确的过期日期或持续时间,可以跨多个浏览器会话存在。
  • 安全性:由于 Cookie 是存储在客户端的,因此存在被篡改或窃取的风险。

Cookie基本格式:

Set-Cookie: <name>=<value>
其中 <name> 是 Cookie 的名称,<value> 是 Cookie 的值。

4.2 Session

  • 定义:Session 是服务器用来跟踪用户与服务器交互期间用户状态的机制。由于 HTTP协议是无状态的,因此服务器需要通过 Session 来记住用户的信息。
  • 原理:当用户首次访问网站时,服务器会为用户创建一个唯一的 Session ID,并通过 Cookie 将其发送到客户端。客户端在之后的请求中会携带这个 Session ID,服务器通过 Session ID 来识别用户,从而获取用户的会话信息。
  • 安全性:与 Cookie 相似,由于 Session ID 是在客户端和服务器之间传递的,因此也存在被窃取的风险,但是用户只泄漏了一个 Session ID,私密信息暂时没有被泄露的风险
  • 超时和失效:Session 可以设置超时时间,当超过这个时间后,Session 会自动失效。服务器也可以主动使 Session 失效,例如当用户登出时。

本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

头像

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

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

相关文章

【Java消息队列】应对消息丢失、重复、顺序与积压的全面策略

应对消息丢失、重复、顺序与积压的全面策略 引言kafka消息丢失生产者消费者重复消费顺序消费消息积压生产者消费者其他RabbitMQ消息丢失生产者事务机制,保证生产者发送消息到 RabbitMQ Server发送方确认机制,保证消息能从交换机路由到指定队列保证消息在 RabbitMQ Server 中的…

Windows 上源码安装 FastGPT

FastGPT 是一个强大的 AI RAG 平台&#xff0c;值得我们去学习了解。与常见的 Python 体系不同&#xff0c;Fast GPT 采用 Node.js/Next.js 平台&#xff08;对于广大 JS 开发者或前端开发者比较亲切友好&#xff09;&#xff0c;安装或部署比较简单。虽然一般情况下推荐简单的…

【HeadFirst系列之HeadFirstJava】第5天之超强力方法 —— 从战舰游戏到循环控制

编写程序&#xff1a;超强力方法 —— 从战舰游戏到循环控制 在《Head First Java》的第五章节中&#xff0c;作者通过一个简单的战舰游戏示例&#xff0c;深入讲解了如何编写Java程序&#xff0c;并重点介绍了方法和循环控制的使用。这一章节的核心思想是&#xff1a;通过模块…

软件单元测试的技术要求

文章目录 一、软件单元测试的概念二、测试对象三、测试目的四、进入条件五、测试内容六、测试环境七、测试实施方一、软件单元测试的概念 单元测试(Unit Testing),是指对软件中的最小可测试单元进行测试验证。单元测试是白盒测试,主要依据软件详细设计和软件代码进行,不仅…

‌挖数据平台对接DeepSeek推出一键云端部署功能:API接口驱动金融、汽车等行业智能化升级

云端部署 引言&#xff1a;当数据生产力遇上云端智能化 2025年2月23日&#xff0c;国内领先的数据服务商挖数据平台宣布与人工智能巨头DeepSeek达成战略合作&#xff0c;正式推出“一键云端部署”功能。这一功能以API&#xff08;应用程序接口&#xff09;为核心&#xff0c;通…

QPainter绘制3D 饼状图

先展示图片 核心代码如下&#xff1a; pie.h #ifndef Q3DPIE_H #define Q3DPIE_H#include <QtGui/QPen> #include <QtGui/QBrush>class Pie { public:double value; QBrush brush; QString description; double percentValue;QString p…

VMWare安装Debian操作系统

参考链接 https://blog.csdn.net/weixin_61536532/article/details/129778310 注意 如果希望折腾Linux&#xff0c;建议缺省使用英语。在极端情况下&#xff0c;系统可能会只能输出ASCII码&#xff0c;使用中文可能会导致无法正常打印log 本文使用VMWare WorkStation Pro&a…

Compose 常用UI组件

Compose 常用UI组件 概述Modifier 修饰符常用Modifier修饰符作用域限定Modifier Modifier 实现原理Modifier.Element链的构建链的解析 常用基础组件文字组件图片组件按钮组件选择器对话框进度条 常用布局组件线性布局帧布局 列表组件 概述 Compose 预置了很多基础组件&#xf…

基于Python+django+mysql旅游数据爬虫采集可视化分析推荐系统

2024旅游推荐系统爬虫可视化&#xff08;协同过滤算法&#xff09; 基于Pythondjangomysql旅游数据爬虫采集可视化分析推荐系统 有文档说明 部署文档 视频讲解 ✅️基于用户的协同过滤推荐算法 卖价就是标价~ 项目技术栈 Python语言、Django框架、MySQL数据库、requests网络爬虫…

R 语言科研绘图 --- 散点图-汇总

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

3分钟idea接入deepseek

DeepSeek简介 DeepSeek 是杭州深度求索人工智能基础技术研究有限公司开发的一系列大语言模型&#xff0c;背后是知名量化资管巨头幻方量化3。它专注于开发先进的大语言模型和相关技术&#xff0c;拥有多个版本的模型&#xff0c;如 DeepSeek-LLM、DeepSeek-V2、DeepSeek-V3 等&…

【数据结构】(12) 反射、枚举、lambda 表达式

一、反射 1、反射机制定义及作用 反射是允许程序在运行时检查和操作类、方法、属性等的机制&#xff0c;能够动态地获取信息、调用方法等。换句话说&#xff0c;在编写程序时&#xff0c;不需要知道要操作的类的具体信息&#xff0c;而是在程序运行时获取和使用。 2、反射机制…

基于Flask的去哪儿网海南旅游攻略数据分析系统的设计与实现

【Flask】基于Flask的去哪儿网海南旅游攻略数据分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着旅游业的蓬勃发展&#xff0c;如何高效地整合、分析并呈现旅游数据&am…

从零开始构建一个小型字符级语言模型的完整详细教程(基于Transformer架构)

最近特别火的DeepSeek,是一个大语言模型,那一个模型是如何构建起来的呢?DeepSeek基于Transformer架构,接下来我们也从零开始构建一个基于Transformer架构的小型语言模型,并说明构建的详细步骤及内部组件说明。我们以构建一个字符级语言模型(Char-Level LM)为例,目标是通…

MyBatisPlus学习

MyBatisPlus 今日目标 基于MyBatisPlus完成标准Dao的增删改查功能 掌握MyBatisPlus中的分页及条件查询构建 掌握主键ID的生成策略 了解MyBatisPlus的代码生成器 本节主要讲的内容如下&#xff1a; 1&#xff0c;MyBatisPlus入门案例与简介 这一节我们来学习下MyBatisPlus的入…

golang内存泄漏

golang也用了好几年了&#xff0c;趁着有空 整理归纳下&#xff0c;以后忘了好看下 一般认为 Go 10次内存泄漏&#xff0c;8次goroutine泄漏&#xff0c;1次是真正内存泄漏&#xff0c;还有1次是cgo导致的内存泄漏 1:环境 go1.20 win10 2:goroutine泄漏 单个Goroutine占用内存&…

计算机毕业设计SpringBoot+Vue.jst房屋租赁系统(源码+LW文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

DevEco Studio常用快捷键以及如何跟AndroidStudio的保持同步

DevEco Studio快捷键 DevEco Studio是华为推出的用于开发HarmonyOS应用的集成开发环境&#xff0c;它提供了丰富的快捷键以提高开发效率&#xff0c;以下为你详细介绍不同操作场景下的常用快捷键&#xff1a; 通用操作快捷键 操作描述Windows/Linux 快捷键Mac 快捷键打开设置窗…

qt5实现表盘的旋转效果,通过提升QLabel类

因为工作需要&#xff0c;需要实现温度的表盘展示效果 实现思路&#xff1a; 通过提示声QLabel控价类&#xff0c;实现报盘的旋转和展示效果 1. 编写一个QLabel的类MyQLabel,实现两个方法 1. void paintEvent(QPaintEvent *event); //重绘函数 2. void valueChanged(int va…

vscode settings(一):全局| 用户设置常用的设置项

参考资料 Visual Studio Code权威指南 by 韩骏 一. 全局设置与用户设置 1.1 Vscode支持两种不同范围的设置 用户设置(User Settings)&#xff1a;这是一个全局范围的设置&#xff0c;会应用到所有的Visual Studio Code实例中。工作区设置(Workspace Settings)&#xff1a;设…