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

news2025/2/24 12:20:54
头像
⭐️个人主页:@小羊
⭐️所属专栏: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.coloradmin.cn/o/2304390.html

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

相关文章

system verilog的流操作符

流操作符&#xff0c;有分为操作对象是一整个数组和单独的数据两种&#xff0c;例如bit [7:0] a[4]和bit [31:0] b&#xff0c;前者操作对象是数组&#xff0c;后者是单独一个较大位宽的数。 流操作符有<<和>>&#xff0c;代表从右向左打包和从左向右打包。 打包的…

LLM2CLIP论文学习笔记:强大的语言模型解锁更丰富的视觉表征

1. 写在前面 今天分享的一篇论文《LLM2CLIP: P OWERFUL L ANGUAGE M ODEL U NLOCKS R ICHER V ISUAL R EPRESENTATION》&#xff0c; 2024年9月微软和同济大学的一篇paper&#xff0c; 是多模态领域的一篇工作&#xff0c;主要探索了如何将大模型融合到Clip模型里面来进一步提…

计算机毕业设计SpringBoot+Vue.jst网上超市系统(源码+LW文档+PPT+讲解)

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

HTTP SSE 实现

参考&#xff1a; SSE协议 SSE技术详解&#xff1a;使用 HTTP 做服务端数据推送应用的技术 一句概扩 SSE可理解为&#xff1a;服务端和客户端建立连接之后双方均保持连接&#xff0c;但仅支持服务端向客户端推送数据。推送完毕之后关闭连接&#xff0c;无状态行。 下面是基于…

二分图检测算法以及最大匹配算法(C++)

上一节我们学习了有向图中的最大连通分量. 本节我们来学习二分图. 二分图是一种特殊的图结构, 能够帮助我们高效地解决这些匹配和分配问题. 本文将带你了解二分图的基本概念, 判定方法, 最大匹配算法以及实际应用场景. 环境要求 本文所用样例在Windows 11以及Ubuntu 24.04上面…

Keepalive基础

一。简介和功能 vrrp协议的软件实现&#xff0c;原生设计目的是为了高可用ipvs服务 功能&#xff1a; 1.基于vrrp协议完成地址流动 2.为vip地址所在的节点生成ipvs规则&#xff08;在配置文件中预先定义&#xff09; 3.为ipvs集群的各RS做健康状况检测 4.基于脚本调用接口…

计算机毕业设计SpringBoot+Vue.jst0图书馆管理系统(源码+LW文档+PPT+讲解)

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

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

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

【论文解读】TransMLA: Multi-Head Latent Attention Is All You Need

论文链接 1. 论文背景与问题动机 现代大规模语言模型&#xff08;LLM&#xff09;在推理时往往遇到通信瓶颈&#xff0c;主要原因在于自注意力机制中需要缓存大量的 Key-Value&#xff08;KV&#xff09;对。例如&#xff0c;对于 LLaMA‑65B 这种模型&#xff0c;即使采用 8…

登录-06.JWT令牌-生成和校验

一.JWT令牌的生成和校验 JWT令牌生成 想要生成JWT令牌&#xff0c;那么就要首先引入JWT令牌的相关依赖&#xff0c; <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.2</version>…

【Git】多人协作

文章目录 完成准备工作多人协作场景一场景二远程分支删除后&#xff0c;本地 git branch -a 依然能看到的解决办法 完成准备工作 在之前&#xff0c;我们所完成的工作如下&#xff1a; 基本完成 Git 的所有本地库的相关操作&#xff0c;git基本操作&#xff0c;分支理解&#…

邮件安全之发件人伪造

电子邮件工作原理 电子邮件传输过程中主要涉及到SMTP、IMAP、POP3三种协议&#xff0c;具体功能如下&#xff1a; SMTP:全称Simple Mail Transfer Protocol&#xff0c;即简单邮件传输协议&#xff0c;主要用于发送邮件&#xff0c;使用端口号25。 IMAP:全称Internet Mail Acce…

使用 AIStor 和 OpenSearch 增强搜索功能

在这篇文章中&#xff0c;我们将探讨搜索&#xff0c;特别是 OpenSearch 如何帮助我们识别模式或查看不断增长的数据中的趋势。例如&#xff0c;如果您正在查看运营数据&#xff0c;如果您的服务似乎是随机的&#xff0c;那么您需要尽可能回溯以识别模式并找出原因。这不仅适用…

【LLM】R1复现项目(SimpleRL、OpenR1、LogitRL、TinyZero)持续更新

note &#xff08;1&#xff09;未来的工作需亟待解决&#xff1a; 支持大规模 RL 训练&#xff08;PPO、GRPO 等&#xff09;的开源基础框架用于稳定训练的 GRPO 训练超参的自动化调优RL 训练数据的配比&#xff08;难度、领域、任务等&#xff09;基于 Instruct 模型训练 R…

买股票的最佳时机 - 2

买卖股票的最佳时机 III 题目描述&#xff1a; 提示&#xff1a; 1 < prices.length < 1050 < prices[i] < 105 分析过程&#xff1a; 写动态规划&#xff0c;我们需要考虑一下问题&#xff1a; 定义状态状态转移方程初始条件 遍历顺序 4种状态&#xff1a; …

Python基于flask的智慧交通可视化,大数据智慧交通数据可视化系统

博主介绍&#xff1a;✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447…

【Unity】鱼群效果模拟

鱼群效果模拟 文章目录 鱼群效果模拟Boid算法实现方式version1_CPUversion2_GPUversion3_Multilaterationversion4_Bitonic_Sorting &#xff08;GPU友好&#xff09;version5_Skinning &#xff08;TODO&#xff09; 细节项优化项参考链接 Boid算法 Boid算法是一种模拟群体行…

云图库平台(五)——后端图片模块开发

目录 一、需求分析二、库表设计三、图片的处理如何实现图片的上传和下载创建图片的业务流程如何对图片进行解析 四、创建并使用对象存储五、后端操作对象存储初始化客户端通用能力类文档上传文件下载 一、需求分析 管理员功能&#xff1a; 图片的上传和创建&#xff1a;仅管理…

postman调用ollama的api

按照如下设置&#xff0c;不需要设置key 保持长会话的方法 # 首次请求 curl http://localhost:11434/api/generate -d {"model": "deepseek-r1:32b","prompt": "请永久记住&#xff1a;110&#xff0c;1-12&#xff0c;之后所有数学计算必…

十、OSG学习笔记-多线程(OpenThreads)

上一节内容&#xff1a; 九、OSG学习笔记-NodeVisitor节点遍历器-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145742756?spm1001.2014.3001.5501 本章节代码&#xff1a; OsgStudy/Openthreads CuiQingCheng/OsgStudy - 码云 - 开源中国https://gite…