简易web服务器
简易web服务器
用 Python 写一个能跑的简易 web 服务器,核心代码不到 20 行。简易这不是简易教学演示,是简易我上周调试接口时随手搭的东西,结果发现它比想象中好用。简易
标准库里的简易 http.server 模块直接提供了现成的类。你只需要继承 BaseHTTPRequestHandler,简易重写 do_GET 方法,简易剩下的简易交给系统。下面这段代码我放在 server.py 里,简易命令行敲 python server.py 就能启动:
from http.server import HTTPServer,简易 BaseHTTPRequestHandler class Handler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('Content-Type', 'text/html; charset=utf-8') self.end_headers() self.wfile.write(b'<h1>It works</h1>') HTTPServer(('0.0.0.0', 8080), Handler).serve_forever() 跑起来后浏览器访问 localhost:8080,页面上就一行字。简易没有框架,简易没有依赖,简易连 requirements.txt 都不用建。简易
但真实场景不会这么简单。前端项目通常需要返回静态文件,比如 HTML、CSS、JS 和图片。我在 do_GET 里加了一段路径判断:如果请求的是 /,返回 index.html;否则把 self.path 拼到项目根目录下,用 open() 读文件。这里有个坑——路径穿越攻击。用户请求 /../../etc/passwd 时,如果不做校验,服务器会把系统文件吐出去。解决办法是用 os.path.abspath 把最终路径规范化,再检查它是否以项目根目录开头。我见过至少三个内部工具忘了这一步。
处理 POST 请求也不复杂。重写 do_POST,从 self.rfile 读取 Content-Length 指定的字节数,解析 JSON 或表单数据。我拿它做过一个临时的 webhook 接收器,接收 GitHub 的推送事件,打印出 commit 信息。延迟在 5 毫秒以内,比 Flask 开发服务器还快——毕竟没有中间件和路由匹配的开销。
并发是个问题。HTTPServer 默认单线程,一个请求处理不完,下一个就得等着。如果某个接口调用了外部 API 卡住 3 秒,整个服务就阻塞 3 秒。换成 ThreadingHTTPServer 就行,Python 3.7 之后标准库自带。每个请求开一个线程,适合 I/O 密集的场景。但线程数没有上限,压测时开几百个线程会把内存吃光。生产环境肯定不能用这个,不过内部工具、原型验证、本地调试,它完全够用。
日志默认打到 stderr,格式是 127.0.0.1 - - [时间] "GET / HTTP/1.1" 200 -。我习惯重写 log_message 方法,加上响应时间和请求体大小。有一次排查前端为什么加载慢,发现某个 JSON 接口返回了 2MB 数据,日志里一目了然。
这个简易服务器最大的价值是“透明”。你知道每一行代码在做什么,没有魔法。Flask 的 @app.route 背后是 Werkzeug 的路由表,Django 的 ORM 背后是复杂的查询构建器。而这里,请求进来,你决定返回什么。适合学习 HTTP 协议,也适合快速验证想法。我甚至用它做过一个局域网文件共享工具,加上目录列表和下载链接,总共 60 行代码。
当然,别把它暴露在公网。没有 HTTPS,没有请求限流,没有安全头。它就是一个工具,像螺丝刀一样——用对地方就行。
(责任编辑:探索)
-
凌晨两点,我蹲在网吧的角落里,手里捏着三张皱巴巴的百元钞,等一个网名叫“老狗”的人给我发账号密码。那是我第一次买论坛账号——一个老牌技术论坛的“元老级”ID,发帖权限高,能进版主区看些敏感资料。 老狗
...[详细]
-
小迪管家的智慧养老方案,核心就一句话:把“被动响应”变成“主动预判”。 我见过太多养老产品,本质是个带红外的呼叫器。老人按了,后台才动。可现实里,老人摔倒后往往按不了任何按钮。小迪的做法相反,它让红外
...[详细]
-
遵义老城区的梧桐树荫下,联通营业厅的玻璃门上贴着张泛黄的告示:“新到靓号,尾号8888”。我路过时正巧看见一位穿灰布衫的老先生推门进去,十分钟后出来时,手里攥着张新SIM卡,脸上带着买到了好茶叶般的满
...[详细]
-
浏览器地址栏里那串字符,是通往任何网页的唯一钥匙。但大多数人不知道,按下Ctrl+U,就能直接掀开网页的底牌——那份源代码。我见过太多人对着网页右键点了半天,只为了找个下载按钮,却不知道“查看网页源代
...[详细]
-
珠海做SEO优化的公司少说也有几十家,但真正能把排名做上去的,掰着手指头数得过来。上个月有个做打印耗材的老板找我喝茶,他去年换了三家服务商,花了小十万,关键词“珠海打印耗材批发”还在第三页晃悠。他说得
...[详细]
-
我在一个周三的下午,把三个不同版本的登录页原型扔给了十二个用户。每个版本只改了一个按钮的位置和颜色。结果让我意外——版本B的点击率比版本A高了整整40%,而版本C,那个我自认为最优雅的设计,几乎没人碰
...[详细]
-
2018年,安全研究员马修·希基发现了一个让他自己都愣住的漏洞:他买的那台惠普打印机,固件里藏着一个写死的管理员密码。密码是“123”。不是加密哈希,不是加了盐的复杂口令,就是明晃晃的“123”。他给
...[详细]
-
我翻了半天电脑,愣是没找到那份该死的合同备份。桌面、文档、下载,甚至回收站都看了,就是没有。最后在微信文件助手里找到了——三天前我自己传的,还标注了“重要文件,勿删”。 这年头,备份文件的位置比文件本
...[详细]
-
网站后台爆破工具:不是你想的那样 凌晨两点,我盯着屏幕上那个不断跳动的数字——429,请求被限流了。对面那个后台,已经连续尝试了六小时,连个验证码都没弹出来。这破站居然用的是纯前端校验,后台接口裸奔
...[详细]
-
我家书架上有一本《Linux服务器架构手册》,2014年买的,现在依然能打开。不是电子版,是纸的。这让我想起一个更极端的例子——我外婆家阁楼里那台1987年的小霸王学习机,插上电源,接上老式电视机,依
...[详细]

无名小站null官网
pythonpip安装包下载
国家自然科学基金项目查询网
验证码绕过漏洞
视频免费下载网站无水印
