HTTP服务器的工作逻辑

一、主要目的

介绍HTTP服务器的工作逻辑。

二、主要内容

(一)技术路线

每个请求对应一个TCP连接。

每个请求对应一个线程任务。

用线程池执行每个任务。

只探讨简单的TCP短连接返回HTML资源的情形。

(二)HTTP服务器的核心逻辑

// 初始化各种资源

// 建立服务端TCP套接字,绑定端口,设置最大连接数

// 建立线程池

init();

// 进入循环,用变量控制循环的进行

while(运行为真){

// 阻塞获取一个客户端的TCP套接字

// 用客户端套接字创建一个线程任务

// 把线程任务提交到线程池执行

}

// 后续处理

destoy();

(三)线程任务的逻辑

// 建立TCP套接字的输入流,输出流

// 读取一行,获得HTTP请求行

// 循环读取每个HTTP请求头,直到空行

// 每个请求头根据":"分割,去除两端多余空白字符,加入到散列表Map中

// 判断是否为Get请求

if(是GET请求){

// 获得请求资源路径,解码成原始的URL格式

// 去除后面的请求参数(如果存在)

// 根据项目目录的磁盘路径,连接资源路径

// 用文件接口判断该资源是不是存在

if(资源存在){

// 设置Content-Length响应头的值是文件的字节数

// 输出HTTP 200响应头部

// 把项目下对应资源文件的所有字节接在头部后面输出到TCP套接字中

} else {

// 文件不存在,输出404响应

// 响应内容格式如下:

" HTTP/1.1 404 Not Found\r\n

Server: TT\r\n

Content-Type: text/plain\r\n

Content-Length: 10\r\n

\r\n

Not Found

"

}

} else {

// 输出不支持方法的响应

// 响应内容格式如下:

" HTTP/1.1 405 Not Support\r\n

Server: TT\r\n

Content-Type: text/plain\r\n

Content-Length: 11\r\n

\r\n

Not Support

"

}

// 刷新输出流

// 关闭TCP套接字

socket.close();

相关推荐
国服第二切图仔19 小时前
Electron for 鸿蒙PC实战案例Gitcode口袋工具之HTTP请求封装的技术实现与设计解析
http·electron·gitcode
cccyi71 天前
HTTP 协议详解:从基础到核心特性
网络协议·http·应用层
特种加菲猫1 天前
HTTP协议核心机制解析
网络·网络协议·http
重生之我是Java开发战士1 天前
【Java SE】HTTP与HTTPS通信协议
java·http·https
zt1985q1 天前
外部访问 Python 搭建的 HTTP 服务器
运维·服务器·网络·windows·网络协议·http
熙客1 天前
HTTP Client介绍
网络·网络协议·http
Arva .2 天前
HTTP vs. HTTPS 有什么区别?
http·https
西瓜树枝2 天前
前端必读:HTTP 协议核心知识全景图(三)—— 响应头详解
前端·http
IUGEI2 天前
【计算机网络】HTTP/3如何实现可靠传输?
java·网络·后端·网络协议·tcp/ip·计算机网络·http
爱学习的大牛1232 天前
基于 FRP 实现内网穿透的跨网络 HTTP 服务转发方案
网络·网络协议·http