当前位置: 首页 > news >正文

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

 

 

http://www.dtcms.com/a/75609.html

相关文章:

  • 味觉传送器E-Taste:开启虚拟世界的味觉之门
  • 紧急通知:某平台泄露充电桩财富公式!5台×120kW=1.3年回本,年利润34.3万!速删前收藏 - 慧知开源充电桩平台
  • 解决Xshell连接出现“SSH服务器拒绝了密码,请再试一次”问题
  • WPF-MVVM计数器
  • 华为供应链的变革模式和方法P105(105页PPT)(文末有下载方式)
  • MySQL中的事务隔离级别有哪些
  • 【MySQL】基础查询
  • xLua_001
  • AIAgent有哪些不错的开源平台
  • 每天看一篇漏洞报告
  • R语言入门课| 02 R及Rstudio的下载与安装
  • 类加载器及双亲委派机制
  • vscode vue3 jsconfig 与 tsconfig的区别
  • Vue渲染函数 - render 函数
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 的起步依赖:快速构建 JavaWeb 项目
  • vscode记录
  • SQL注入中空格与逗号过滤的绕过技巧总结
  • PHP、Java、Go、Python、Node.js、Ruby 写的接口,服务器承载量对比
  • 爬虫逆向:详细讲述iOS底层原理及机制
  • 健康养生:为生命注入活力
  • k8s基础资源管理指令
  • freeswitch (中继网关呼出配置)
  • VSCode - 查看 PDF 文件
  • 信息学奥赛一本通 1526:Blockade | 洛谷 P3469 [POI 2008] BLO-Blockade
  • 2024年 蓝桥杯 Python A组题目分析与讲解
  • 新造车不再比拼排名,恰是曲终人散时,剩者为王
  • 从PLC到云端:5G嵌入式网关的MQTT协议转换与Ubuntu二次开发全解析
  • 用VSCode做前端开发
  • BFGS学习
  • 第四章:ESP32零基础教学 - 4.1.4MPU6050加速度传感器