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();

相关推荐
今晚务必早点睡5 小时前
系统通信方式实战详解:HTTP、RPC、MQ、WebSocket 各用在什么场景?(附 SDK 示例)
websocket·http·rpc
松涛和鸣5 小时前
49、智能电源箱项目技术栈解析
服务器·c语言·开发语言·http·html·php
ps酷教程9 小时前
HttpPostRequestDecoder源码浅析
java·http·netty
寻星探路11 小时前
【Python 全栈测开之路】Python 基础语法精讲(一):常量、变量与运算符
java·开发语言·c++·python·http·ai·c#
栗子叶11 小时前
网页接收服务端消息的几种方式
前端·websocket·http·通信
野生技术架构师1 天前
原来可以搭建一个HTTP服务
网络·网络协议·http
TOPGUS2 天前
谷歌Chrome浏览器即将对HTTP网站设卡:突出展示“始终使用安全连接”功能
前端·网络·chrome·http·搜索引擎·seo·数字营销
Wadli2 天前
项目5 |HTTP服务框架
网络·网络协议·http
CCPC不拿奖不改名2 天前
网络与API:HTTP基础+面试习题
网络·python·网络协议·学习·http·面试·职场和发展
心之伊始2 天前
HTTP 与 HTTPS 协议深度剖析:从基础原理到现代演进与实践
网络协议·http·https