【HTTP协议其实很简单】03.自己写一个微型静态Web服务器

Amber-Garden:轻量级阳台种植生长日志方案 生长日志是园艺数字化的基础形态,其核心在于将模糊的植物观察转化为可回溯、可比对的结构化数据。基于离线优先、本地存储与多模态记录(照片+时间戳+手写笔记)的设计原理,该方案显著降低认知负荷与技术门槛,尤其适用于无传感器、无智能硬件的城市阳台种植场景。通过硬币参照物、固定拍摄距离和Git同步机制,实现毫米级形态变化捕捉与绝对数据主权保障,兼顾退休人群、通勤族与亲子家庭等多元用户的真实使用习惯。本文详解一套零APP、零云依赖、纯前端驱动的轻量化数字园艺实践路径。 阅读详情

自己做一个微型静态Web服务器

这一篇简单粗暴一点,先上干货,看代码注释

JDK版本:1.8

实现自定义错误页、404页。

package com.hawkon;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Date;

public class MyServer {
    public static String HOME_DIR = "d:/home";  //定义服务器默认的文件夹在哪里
    public static String NOT_FOUND_FILE = "d:/home/404.html"; //定义404错误页
    public static String ERR_FILE = "d:/home/err.html"; //定义500错误页
    public static String DEFAULT_FILE = "/index.html"; //定义默认页面

    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(8009); //定义端口
        while (true) { //循环是不断的接受新的请求
            Socket socket = serverSocket.accept(); //当服务器运行起来没有请求的时候会在这里等待
            InputStream is = socket.getInputStream(); //创建一个输入流
            InputStreamReader sr = new InputStreamReader(is); //过渡代码主要是为下一行创建对象
            BufferedReader br = new BufferedReader(sr); //创建BufferedReader对象,在本文中采用一行一行的读的方式,比较方便。
            try {
                String request = "";
                request = br.readLine(); //只读取了第一行,后面报头本文暂时没用。
                System.out.println("request:");
                System.out.println(request); //输出一下请求的报头
                String[] arr = request.split(" "); //拆分出第一行的三部分内容
                do { //循环是为了把剩下的请求内容读完,否则会产生异常
                    request=br.readLine();
                    System.out.println(request); //把全部报头都输出
                }while(!request.equals(""));
                if (arr.length != 3 || !arr[0].equals("GET")) { //如果不是GET请求,拆分出的第一行也不是三部分内容直接返回错误页
                    outPutFile(ERR_FILE, socket.getOutputStream(), 500);
                } else {
                    String path = arr[1]; //取出请求的资源路径
                    if(path.equals("/")) //如果请求的内容没有指定文件,则返回默认的页面
                        path=DEFAULT_FILE;
                    if (Files.exists(Paths.get(HOME_DIR + path))) { //判断文件是否存在 ,如果不存在,返回404页面
                        outPutFile(HOME_DIR + path, socket.getOutputStream(), 200);
                    } else { //如果文件不存在,返回404页面
                        outPutFile(NOT_FOUND_FILE, socket.getOutputStream(), 404);
                    }
                }
            } catch (Exception ex) {
                ex.printStackTrace(); //输出异常信息
            } finally {
                br.close();
                sr.close();
                is.close();
            }
        }
    }

    public static void outPutFile(String fileName, OutputStream os, int status) throws IOException {
        System.out.println("response:");
        System.out.println(fileName);
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("HTTP/1.1 " + status + " OK\r\n"); //输出状态码
        stringBuilder.append("Date: " + (new Date()).toString() + "\r\n");
        stringBuilder.append("Server: MyServer 0.0.1\r\n");  //代表服务器的软件名称
        stringBuilder.append("X-Powered-By: Hawkon\r\n");    //这行可以换成你的英文名,看起来会有点diao
        stringBuilder.append("Keep-Alive: timeout=5, max=100\r\n");
        stringBuilder.append("Connection: Keep-Alive\r\n");
        stringBuilder.append("Content-Type: text/html;charset=utf-8\r\n"); //字符串编码
        stringBuilder.append("\r\n");//多输出一个空行,用来分割报头和报体,HTTP协议要求
        FileInputStream fis = new FileInputStream(fileName);
        byte[] bytes = new byte[1024];
        int len;
        os.write(stringBuilder.toString().getBytes("UTF-8"));  //输出响应报头
        while ((len = fis.read(bytes)) != -1) { //输出文件内容
            os.write(bytes, 0, len);
        }
        os.flush();
        os.close();
        fis.close();
    }
}


下图是请求响应的报头信息。

image

浏览器运行的情况
image

AI系统DDoS防护指南:超量级防护四层实战体系 AI服务因其状态敏感、资源不对称和时延敏感等特性,正成为DDoS攻击的新焦点。传统基于带宽和规则的防御手段在面对协议熵攻击、多层协同攻击及AI定制化载荷时已严重失效。理解AI工作负载的本质脆弱性,是构建有效防护的前提;而‘超量级防护’概念强调从全局流量卸载、边缘意图识别、应用韧性加固到攻击溯源的全栈闭环。本文结合真实运维场景,详解如何将Cloudflare等平台能力与Kubernetes、Envoy、Nginx深度集成,实现对LLM API、实时推理服务等关键AI基础设施的可落地防护。 阅读详情

相关推荐

Claude Skills机制深度解析:本地代理与结构化能力封装

Claude Skills并非插件或扩展,而是一种运行在本地的结构化能力封装协议,其核心是通过skill-creator构建的轻量级HTTP代理服务,拦截并重写Claude Code发往Anthropic API的请求。该机制依赖SKILL.md文件定义触发规则、模型参数与system指令,实现离线、可控、可组合的AI能力调度。技术价值在于解耦提示工程与执行环境,支持精准模型约束、格式强校验与技能链编排;典型应用场景包括代码格式化、注释生成、SQL解释等开发者工作流增强。本文聚焦于skill-creator

cuml0912的博客 1047

【亲测免费】 推荐一款简单易用的微型Web服务器:Tiny Web Server

推荐一款简单易用的微型Web服务器:Tiny Web Server 如果你需要一个轻量级、易于部署和管理的Web服务器,那么你可能会对感兴趣。 Tiny Web Server是什么? Tiny Web Server是一个简单的微型Web服务器,它使用C语言编写,并且可以运行在各种操作系统上,包括Windows、Linux、Mac OS等。 Tiny Web Server能用来做什么? Tiny W...

gitblog_00033的博客 1942

miniweb一个小巧轻量级http服务器

一个小巧轻量级http服务器,可以用于局域网文件共享,绿色免安装,还有一个很好的用途就是为路由器刷机提供SFTP、FTP替代。对没有内置SFTP、FTP支持的路由器,你可以用电脑上的miniweb和路由器上的wget传输文件

【亲测免费】 探索TinyWeb:一个轻量级的微型Web服务器

探索TinyWeb:一个轻量级的微型Web服务器 是一个小型且高效的Web服务器项目,设计用于快速搭建本地服务或简单的网页应用。这个项目以其简洁、易用和低资源消耗的特点,为开发者提供了便捷的工具,尤其适合初学者进行学习和实践。 技术分析 TinyWeb的核心是基于C++编写的,这使得它在性能上具有天然的优势。它采用了单线程异步I/O模型,通过非阻塞I/O操作提高了并发处理能力,即使面对高流量请求也...

gitblog_00016的博客 1108

微型web服务器(tiny web server)

1.The Tiny Web server (tiny.tar). 2.Expands with tar xvf tiny.tar into a directory called ./tiny that contains everything you need to test the Tiny web server, including sample HTML files, GIFS, CGI scripts, and the csapp.c and csapp.h files. Compiled and tested on Linux boxes. 3.The authoritative list of MIME types.

基于http协议的自定义协议封装

用http协议包装xml实现的一个自定义协议

探索轻量级的力量:tinyWS - 强大的C++微型Web服务器

探索轻量级的力量:tinyWS - 强大的C++微型Web服务器 在互联网基础设施日益复杂的今天,高性能且灵活的Web服务器成为了开发者的必备工具。今天,让我们一起深入了解一个名为tinyWS的开源项目,一款以C++精心打造的微型Web服务器,它以简洁高效著称,旨在为轻量级应用提供强大的网络服务支持。 项目介绍 tinyWS,正如其名,是一个小巧而功能强大的Web服务器,专为追求性能和资源效率的...

gitblog_00294的博客 415

JAVA实现简单的http静态网页服务器

NULL 博文链接:https://xiaomy.iteye.com/blog/798156

快速把 EPUB 电子书转成 Markdown 完整指南

你手头是不是攒了一堆 `.epub` 电子书,想导入笔记库或喂给 AI 分析,却要一章一章手动复制、格式还一团糟?markitdown 是一款免费开源的 Python 工具,能把 EPUB 电子书快速转成结构化 Markdown——装完环境、敲一条命令,`.epub` 就变成带元数据、带章节层次的 `.md` 文本,直接能用。 下面带你从零转出第一本电子书:先跑通命令,再看真实输出,最后讲清它内

gitblog_01055的博客 424

Tiny_web_server(小型web服务器代码)

C语言实现的小型web服务器。参考csapp代码,改成了多线程版。分别使用OpenMp和Pthread实现。手动改动部分就可以改成串行。

企业碳排放计算方法与实践:从年度总量到月度分配的完整流程

本文系统介绍了企业碳排放计算的全流程方法,包括数据预处理、能源活动与产品生产碳排放计算、年度汇总及月度分配优化。通过ARIMA模型预测补充缺失数据,采用二次规划算法实现基于用电量模式的月度碳排放分配,确保计算结果的准确性与合理性。该方法为企业碳排放管理提供了科学工具,有助于精准监控排放、制定减排策略并满足合规要求。实施中需注重数据质量控制和排放因子选择,并根据企业特点调整参数。该流程适用于制造业企业,为实现碳中和目标提供可靠的数据基础和管理支持。

applehunqiu的博客 1572

微型Web服务器

CSAPP这本书好厚,曾经一度以为可能买了就是吃灰,很难读完。每次拿起觉得太厚了,简单的翻翻又放下。后来我就不整体看,每周花个1-2个小时的时间,只看一章,看完一章在目录打个勾,而看书的...

519

R语言笔记十:独立性检验函数

1.独立性检验函数        独立性检验是根据频数信息判断两类因子彼此相关或相互独立的假设检验。所谓独立性就是指变量之间是独立的,没有关系。 独立性检验算法:卡方检验、Fisher检验、Cochran-Mantel-Haenszel检验 2.假设检验 假设检验(Hypothesis Testing)是数理统计学中根据一定假设条件由样本推断总体的一种方法。 原假设——没有发生 备择假设——发生了 具体做法:根据问题的需要对所研究的总体作

weixin_44384631的博客 4111

嵌入式轻量级HTTP服务器设计:从ColdFire到现代MCU的移植与优化

HTTP协议作为Web应用的基础,其核心在于客户端与服务器之间的请求-响应模型。在嵌入式系统中,实现HTTP服务器面临资源受限的挑战,需要精简协议栈并优化内存管理。其技术价值在于为物联网设备提供标准化的网络交互接口,无需专用上位机软件即可实现远程监控与配置。通过状态机驱动和分层架构设计,可以在微控制器上构建稳定高效的Web服务。应用场景广泛覆盖工业控制、智能设备管理等领域。本文以经典的ColdFire Lite HTTP Server为例,深入解析其轻量级实现,涵盖**单线程轮询**架构和**Flash文件

weixin_30697239的博客 524

Vanna 2.0:基于LLM的智能文本到SQL框架,实现企业级数据查询与权限控制

文本到SQL技术是自然语言处理与数据库交互的重要桥梁,它允许用户使用日常语言直接查询数据库,无需编写复杂的SQL语句。其核心原理是利用大语言模型理解用户意图,并结合检索增强生成技术,将自然语言问题转换为准确的结构化查询语言。这项技术的价值在于大幅降低了数据访问门槛,提升了业务人员的数据自助分析能力,并能在金融分析、销售报表、运营监控等场景中实现实时数据洞察。Vanna 2.0作为一个开源框架,通过引入用户感知的智能体架构和行级安全策略,解决了企业级应用中的多租户数据隔离与权限控制等关键问题,使得自然语言数据

weixin_42629522的博客 543

kaggle学习笔记-餐厅数据挖掘

分析Zomato数据集的基本思想是为了公平地了解影响在班加罗尔不同地方建立不同类型餐厅的因素,每个餐厅的总评级,班加罗尔是这样一个城市,拥有超过12,000家餐厅,餐厅供应来自世界各地的菜肴。每天都有新的餐馆开业,这个行业还没有饱和,需求也在与日俱增。然而,尽管需求不断增加,新餐馆却很难与老牌餐馆竞争。大多数餐厅都供应同样的食物。班加罗尔是印度的IT之都。这里的大多数人主要依靠餐馆的食物,因为他们没有时间自己做饭。由于对餐馆的需求如此巨大,因此研究一个地方的人口统计学就变得很重要。

优快云XXCQ的博客 1861

RESTinio:现代C++异步HTTP/WebSocket服务器库

RESTinio是一款轻量级C++开源网络库,基于C++14/17标准开发,支持HTTP/HTTPS/WebSocket协议。其核心特性包括:纯头文件依赖、异步高并发、跨平台兼容(Linux/Windows/macOS)和极简API设计。文章详细介绍了RESTinio的安装部署方法(含Linux/Windows环境)并提供了多个可直接运行的实战示例,包括基础HTTP服务、RESTful GET/POST接口实现,以及完整的WebSocket服务端代码(含连接管理、消息广播等功能)。该库特别适用于嵌入式设备、

踏板鞋的专栏 478

从一只龙虾到一支团队:OpenClaw 单 Bot 多 Agent 配置实践

单 Bot 多 Agent只有一个对外的聊天入口(飞书 Bot)内部有多个独立的 AI Agent,各司其职主 Agent(总指挥)负责接收任务并分配给子 Agent子 Agent 完成任务后将结果返回给主 Agent角色Agent ID职责使用场景🎯 总指挥main-agent统筹协调,任务分发接收所有用户请求✍️ 笔杆子内容创作公众号、博客、小红书🔬 参谋canmou深度研究竞品分析、市场调研📋 运营官operations运营管理邮件、日历、社交媒体。

Maynor的博客 1078

JAVA-DAY24(JavaWeb---Tomact)

Tomcat

qq_53439751的博客 157

【Bug已解决】Claude Team Plan 购买席位报错 Payment failed 解决方案

方案适用场景推荐指数检查账单历史状态排查的第一步⭐⭐⭐⭐⭐更换支付方式类型快速尝试是否能绕开问题⭐⭐⭐联系官方支持团队最终解决问题的正规渠道⭐⭐⭐⭐⭐临时过渡方案紧急用人需求的应急处理⭐⭐⭐关注官方修复进度确认属于系统性缺陷的场景⭐⭐⭐⭐Claude Team Plan 增购席位报的问题,社区反馈和实际排查表明很大概率属于平台计费系统在处理按比例分摊费用这类复杂计算链路时的系统性缺陷,而不是用户自身的支付信息填写有误。先排除自身账单历史是否存在异常。

一键难忘的博客 4177

别再用Selenium被秒封了!2026最新反爬全突破+动态渲染实战(通过率99%)

做爬虫的同学,肯定都有过这样的经历:遇到一个纯前端渲染的网站,Requests抓包只能拿到一堆空的div标签,所有数据都是JS动态生成的。这时候你想到了Selenium,结果刚打开浏览器,网站直接跳出来一个"检测到机器人访问"的页面,或者直接返回403。我之前做一个跨境电商的爬虫项目,就踩了这个大坑。一开始用默认的Selenium ChromeDriver,10次请求有9次被封,通过率不到10%。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1383

基于W5500以太网与Arduino实现实时股价数据获取的物联网应用开发

在物联网和嵌入式系统开发中,网络通信是连接物理设备与云端服务的核心技术。硬件协议栈(如W5500)与软件协议栈(如常见Wi-Fi模块)在实现TCP/IP通信时,其底层原理和资源占用方式存在显著差异。硬件协议栈通过专用芯片处理网络协议,能极大减轻主控MCU的负担,提升系统在实时性要求高或资源受限场景下的稳定性和可靠性。这项技术的核心价值在于为嵌入式设备提供了稳定、高效的有线网络接入能力,尤其适用于工业控制、环境监测及智能硬件等对通信抗干扰和链路稳定性要求严苛的应用场景。本文将以实时股价数据获取这一具体案例为切

weixin_34032792的博客 393

74、光谱成像在电子内窥镜及色彩理论中的应用

本文探讨了光谱成像在电子内窥镜中的应用及其与色彩理论的深度融合。通过分析FICE技术、色彩再现模型及胃黏膜光谱测量,展示了光谱信息在提升医学诊断准确性方面的潜力。同时,系统阐述了颜色的物理属性、标准表示方法、同色异谱现象、颜色测量技术(密度法与比色法)以及CIELAB等均匀颜色空间的构建原理。结合流程图与对比表格,梳理了从光信号获取到颜色处理的完整路径,并展望了人工智能与新型视觉模型在未来医疗成像与色彩科学中的发展方向。

g2h3i4j5的博客 152

Web文件上传安全实战:从基础校验到纵深防御的七层体系

文件上传是Web开发中的基础功能,其核心原理是通过HTTP协议将客户端文件数据传输至服务器。这一过程涉及网络传输、数据解析和文件存储等多个环节,技术价值在于构建稳定、安全的数据交换通道。在实际应用场景中,文件上传功能广泛应用于用户头像、文档分享、媒体内容管理等业务。然而,不严谨的实现会引入严重的安全风险,例如恶意文件上传和服务器资源耗尽。本文聚焦于构建一套从前端到后端的纵深防御体系,通过七层校验策略,系统性地解决文件上传中的安全与稳定性问题,其中关键措施包括文件内容类型校验和服务器资源隔离,确保功能在复杂环

weixin_34007886的博客 335

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Trae skills实现服务器轻量级在线取证

轻量级在线取证(Lightweight Live Forensics)是一种面向响应时效性与系统扰动控制的现场数据采集技术,其核心原理是通过最小权限、低开销、结构化方式获取易失性证据(如进程、网络连接、登录日志),严格遵循NIST SP 800-86中‘Live Response’最佳实践。该技术具备高可审计性、上下文感知与自动化执行能力,显著提升电子数据取证竞赛、云主机安全巡检及渗透测试证据固化等场景的效率与可靠性。Trae skills 作为能力封装单元,结合 SSH 安全信道,实现了声明式取证工作流的

weixin_34116110的博客 348

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

基于ESP32与WLED打造智能RGB灯光系统:从原理到DIY钢铁侠反应堆实践

可编程RGB LED(如WS2812B)和微控制器(如ESP32)是智能照明与物联网交互的核心组件。其原理在于通过单线归零码协议实现每个LED像素的独立寻址与控制,结合高性能处理器与丰富内存,可流畅驱动数百灯珠并处理复杂动画逻辑。这项技术的价值在于将动态光效与网络控制能力集成于低成本硬件,极大拓展了灯光在装饰、氛围营造与信息可视化中的应用边界。WLED作为专为ESP32优化的开源固件,封装了上百种预制光效、音乐同步及网络API,显著降低了开发门槛。本文以DIY钢铁侠方舟反应堆桌面摆件为例,详细展示了如何结合

weixin_30239339的博客 448

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: Java算法题,打印平行四边形,至少有四五个坑
下一篇: 【HTTP协议其实很简单】04.给我报告vs我要汇报&GET vs POST&Request vs Response(自己实现Servlet)
我是老姚
博客等级 码龄23年 97粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是老姚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值