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

news/2025/2/21 6:39:56/
http://www.w3.org/2000/svg" style="display: none;">
https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fprofile-avatar.csdnimg.cn%2F6a6e5a3b2851472b8f925f626982fb0f_2301_78843337.jpg!1&pos_id=img-Fy1FHcBQ-1740060398303%29" alt="头像" width="100" height="100" />
⭐️个人主页:@小羊
⭐️所属专栏:Linux
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

https://img-blog.csdnimg.cn/direct/e678d5c05144448f9c9233bf292616a1.gif" alt="动图描述" />

目录

    • 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、序列化和反序列化

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

https://i-blog.csdnimg.cn/direct/2d23978d088047a18f952ab8415488f6.png" alt="在这里插入图片描述" />

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

  • 在任意一台主机上,TCP连接既有发送缓冲区,又有接收缓冲区,所以在内核中发消息和收消息可以同时进行,也就是全双工。
    https://i-blog.csdnimg.cn/direct/e58a7394df2d4439b49f9107938a72cb.png" alt="在这里插入图片描述" />

2、守护进程

2.1 什么是进程组?

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

https://i-blog.csdnimg.cn/direct/5731e1d1af5a42eba595a5f8a8bec821.png" alt="在这里插入图片描述" />

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

https://i-blog.csdnimg.cn/direct/f0439c4c8a1d47b6b7f3a6e83aa3b2bf.png" alt="在这里插入图片描述" />

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

2.2 什么是会话?

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

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

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

https://i-blog.csdnimg.cn/direct/7a6b8e82242d485fa3764530393371b9.png" alt="在这里插入图片描述" />
https://i-blog.csdnimg.cn/direct/ca6ec4df12024dbdb88935fdaa28ba20.png" alt="在这里插入图片描述" />
https://i-blog.csdnimg.cn/direct/5e37798c29034730b1142eace9e9a02c.png" alt="在这里插入图片描述" />

#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 的长度

https://i-blog.csdnimg.cn/direct/6b0031139ebe48709e537272c4ba5bf6.png" alt="在这里插入图片描述" height="300" />

| 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 中
    https://i-blog.csdnimg.cn/direct/9f6c8ae435e842a6a9921d91598b60f2.png" alt="在这里插入图片描述" height="300" />

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 失效,例如当用户登出时。

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

https://img-blog.csdnimg.cn/img_convert/ef07608f8c5523995a3671f982ca95bd.jpeg" alt="头像" width="200" height="200" />

http://www.ppmy.cn/news/1573817.html

相关文章

Mentalab Explore Pro:第三代移动 EEG 设备,开启便携式脑电研究新时代

Mentalab推出的Explore Pro是一款专为研究和工业领域设计的第三代移动脑电图&#xff08;EEG&#xff09;设备。它凭借很高的精度和小巧的尺寸&#xff0c;为脑电研究提供了新的可能性。这款设备凭借强大的功能和灵活的设计&#xff0c;成为研究人员在各种实验环境中重要的工具…

人工智能之视频分割模型sam2源码解读

目前只提供了测试的,没训练的代码这一块。 &#xff08;1&#xff09;下载源码后按下面几步操作&#xff1a; 也许vs版本低一点也行吧,至此视频已经切成图片了。 (2)预测 它是先把视频分割成图像,然后第一帧先指定要分割的那些东西,然后它就是每帧去处理,最后输出分割后的图像…

新手小白如何挖掘cnvd通用漏洞之存储xss漏洞(利用xss钓鱼)

视频教程和更多福利在我主页简介或专栏里 &#xff08;不懂都可以来问我 专栏找我哦&#xff09; 如果对你有帮助你可以来专栏找我&#xff0c;我可以无偿分享给你对你更有帮助的一些经验和资料哦 目录&#xff1a; 一、XSS的三种类型&#xff1a; 二、XSS攻击的危害&#x…

基于 Flask 与 MySQL 构建简单的博客系统

引言 在互联网时代&#xff0c;博客是人们分享知识、记录生活的重要平台。借助 Python 的 Flask 框架与 MySQL 数据库&#xff0c;我们可以快速搭建一个简单的博客系统。本文将详细介绍如何从零开始构建这样一个系统&#xff0c;涵盖环境搭建、数据库设计、后端接口实现以及前端…

前端web安全

一、黑盒扫描和白盒扫描 白盒扫描和黑盒扫描都是针对网络安全和应用程序安全的常用测试方法。 1、白盒扫描指的是测试人员具有关于系统内部结构和代码的全部或部分信息&#xff0c;是基于源代码的安全检测方法&#xff0c;它可以对源代码进行深度分析&#xff0c;从而发现潜在…

python解析url参数

python解析url参数 方法一&#xff1a;使用urllib.parse库中的parse_qs函数方法二&#xff1a;使用urllib.parse库中的parse_qsl函数方法三&#xff1a;使用urllib.parse库中的urlsplit函数和parse_qs函数 在Python中&#xff0c;可以使用urllib.parse库来解析URL参数 方法一&a…

罗格科技发布全球首款税务智能合规终端“罗拉DeepTax双引擎AI一体机”

——开启企业级税务智能管理新时代&#xff0c;迈入零部署、AI与场景深度融合新范式 罗格科技于2025年2月18日正式推出全球首款深度集成税务合规与强推理能力的“罗拉DeepTax双引擎AI一体机&#xff08;LoLR DeepTax Dual Engine AI Appliance&#xff09;”。该产品通过融合自…

《动手学机器人学》笔记

目录 0.介绍1.概述&#xff5c;空间位置、姿态的描述&#xff08;33&#xff09;&#xff5c;《动手学机器人学》2.&#xff08;2&#xff09;-Robotics Toolbox①&#xff08;V10.4&#xff09;3.齐次坐标与变换矩阵4.一般形式的旋转变换矩阵5.&#xff08;轴角法&#xff09;…