| read、write、recv、send 和 tcp 为什么支持全双工?
fg [任务号]
:将进程放到前台bg [任务号]
:将进程放到后台jobs
:查看当前用户启动的任务setseid
函数来创建一个会话, 前提是调用进程不能是一个进程组的组长。守护进程是后台进程的一种,但是后台进程依旧属于当前会话,而守护进程是独立会话。
#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);
}
}
}
| 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"
}
\r\n
分隔,遇到空行表示 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!"
}
\r\n
分隔,遇到空行表示 Header 部分结束Content-Length
属性来标识 Body 的长度,如果服务器返回了一个 html 页面,那么 html 页面内容就是在 body 中
方法 | 说明 | 支持的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
方法。
状态码 | 类别 | 描述 |
---|---|---|
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(临时重定向) :
HTTP/1.1 301 Moved Permanently\r\n
Location: https://www.new-url.com\r\n
HTTP/1.1 302 Found\r\n
Location: https://www.new-url.com\r\n
| 关于 connection 报头:
Connection: keep-alive
: 表示希望保持连接以复用 TCP 连接。
Connection: close
: 表示请求/响应完成后, 应该关闭 TCP 连接。
| 无连接:
Keep-Alive
机制,使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,避免了建立或者重新建立连接,但需要正确设置Keep-Alive的timeout时间。| 无状态:
Cookie
和Session
等技术来保持HTTP连接状态。
Cookie
通过在客户端存储信息来记住用户的状态,而Session
则通过在服务器端存储信息来实现状态管理。
Cookie基本格式:
Set-Cookie: <name>=<value>
其中 <name> 是 Cookie 的名称,<value> 是 Cookie 的值。
本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~