From 317db5bf9cbb18449f2124d19e0fbbbd826be9ea Mon Sep 17 00:00:00 2001 From: luojh Date: Fri, 3 Jan 2025 16:26:25 +0800 Subject: [PATCH 01/11] luojh: add planet mirroring article 2025/01/03 --- pages/_planet/2025-01-03-local-mirroring.md | 72 +++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 pages/_planet/2025-01-03-local-mirroring.md diff --git a/pages/_planet/2025-01-03-local-mirroring.md b/pages/_planet/2025-01-03-local-mirroring.md new file mode 100644 index 0000000000..11a65c01b8 --- /dev/null +++ b/pages/_planet/2025-01-03-local-mirroring.md @@ -0,0 +1,72 @@ +--- +title: "LUG 网站 Planet 文章模板" +author: luojh +categories: + - mirrors +tags: Windows 镜像 +--- + +USTCLUG 的一个重要服务是它的 [开源软件镜像](https://mirrors.ustc.edu.cn)。但是我们今天要讨论的,是另一种自己在本地搭建的镜像。这篇文章来源于帮同学解决的一个小问题。 + +## 目的 + +某些课程作业附带的代码示例会通过 HTTP 的方式获取运行需要的输入数据,但是如果这个数据不巧放在某台访问速率很低的服务器上(例如不少用`.edu`域名的国外大学的课程网站上),则会使得作业的运行时间大大加长——通过只有几 KB/s 的网络下载数十 MB 的数据总不是个好主意。更有可能的是,样例代码还需要做一些修改才能满足要求,这时候每次调试运行代码时都要去下载一次输入数据,简直难以忍受。本文将针对 Windows 用户,讲解如何快速搭建一个 HTTP 服务器来在本地“镜像”一份这种数据,以实现快速访问。 + +_注:为何不写针对 Linux 用户的教程呢?这是因为,由于有 Apache 和 NGINX 这类成熟好用的服务器软件,再加上 Linux 操作系统优秀的包管理器,结合网上的教程,用几分钟的时间在 Linux 平台上快速建立并运行一个 HTTP 服务器应该不是难事。而在 Windows 上,配置 IIS 这类大而笨重的服务器非常麻烦,使用 Apache/NGINX 之类的服务器软件又由于操作习惯的不同,也不方便。_ + +## 获取一个 HTTP 服务器 + +首先当然是要获取一个 HTTP 服务器了,这里我们选择的是 `EasyWebSvr`。这个服务器是一个体积超小(只有数十 KB)、单文件、几乎不需要配置的小型 HTTP 服务器,甚至支持 CGI 和 PHP。`EasyWebSvr`是一个历史久远的[开源项目](https://github.com/baojianjob/EasyWebSvr),使用 MSVC 作为开发环境,而且很容易下载到它的编译好的版本(搜索`EasyWebSvr`就可以了)。下载后你将得到一个 `EasyWebSvr.exe` 和一些其他的文件。不用理会其他的文件(事实上它们是不必要的),直接将 `EasyWebSvr.exe` 复制到一个空文件夹里面就可以了。 + +## 准备数据 + +- 从原始的地址上下载一份要被镜像的数据,也放到上面所说的那个空文件夹里面。 +- 运行 `EasyWebSvr.exe` ,可以看到一个小窗口。 +- 点击右下角的锤子按钮(菜单),选择最下面的`设置`一项。 +- 在弹出的设置对话框里面,选择`主目录`为当前 `EasyWebSvr.exe` 所在的目录。 +- 在`文档`选项卡里面勾选`允许目录浏览`和`总是显示目录内容`。 +- 点击`确定`结束并保存配置。 +- 然后在主窗口里面点击右下方的红色按钮(在菜单按钮的边上),正常应该看到它变成蓝绿色(这时候如果有 Windows 防火墙提示,请选择允许)。 +- 此时服务器就配置好了,打开浏览器输入`http://localhost`即可看到文件列表。 + +## 修改原先的代码 + +- 例如原先提供的代码中数据文件的 URL 是 `http://some.site.edu/path/to/file/data.csv`,而这份数据就和 `EasyWebSvr.exe` 在同一文件夹下,则将代码中的地址修改为 `http://localhost/data.csv` 就可以使用本地的镜像了! +- 服务器最小化后会显示一个小托盘图标,右键点击它可以显示各种选项,包括重新显示主窗口。 +- 使用完后,点击蓝绿色图标,它会变成红色,此时服务器就关闭了。 + +## 特殊情况 + +### 代码不支持修改地址 + +如果代码不支持修改地址(这很少见),那么也可以按照原来的 URL 在本地建立文件夹,类似下面这样: + +``` +EasyWebSvr.exe +path/ -> 建立这个目录 + to/ -> 建立这个目录 + file/ -> 建立这个目录 + data.csv -> 数据文件在这里 +``` + +然后修改 `hosts` 文件(一般在 `C:\Windows\System32\drivers\etc` 里面,需要管理员权限,具体请看相关教程),加上一句 + +``` +127.0.0.1 some.site.edu +``` + +然后以管理员权限运行 + +``` +ipconfig /flushdns +``` + +即可。可以通过浏览器访问 `http://some.site.edu/path/to/file/data.csv` 来确认。这一操作会修改所有对 `some.site.edu` 的请求,因此用完后请删去在 `hosts` 中加入的那一行,然后再运行一次 `ipconfig /flushdns`。 + +### 原地址有非 `80` 的端口号 + +如果你拿到的地址使用了别的端口(例如 `some.site.edu:8080`)且不能修改,那么请在 EasyWebServer 的设置页面`端口号`处输入对应的端口号 `8080`,对应的访问地址就是 `localhost:8080`。 + +### 提示端口已被占用 + +和上面非 `80` 端口一样,换一个别的端口就好了,例如 `8080` 或者 `8000`,然后再次点红色圆球图标开启服务器。这时候记得访问地址也要加上对应的端口号。 From 214a08146999f6b651563089385e787a5359fc9b Mon Sep 17 00:00:00 2001 From: luojh Date: Fri, 3 Jan 2025 16:43:52 +0800 Subject: [PATCH 02/11] add title --- pages/_planet/2025-01-03-local-mirroring.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/_planet/2025-01-03-local-mirroring.md b/pages/_planet/2025-01-03-local-mirroring.md index 11a65c01b8..6cd88663ab 100644 --- a/pages/_planet/2025-01-03-local-mirroring.md +++ b/pages/_planet/2025-01-03-local-mirroring.md @@ -1,5 +1,5 @@ --- -title: "LUG 网站 Planet 文章模板" +title: "快速建立本地 HTTP 文件镜像" author: luojh categories: - mirrors From eaab6bb23c7feeed54d0513f8123acc437802f2b Mon Sep 17 00:00:00 2001 From: luojh Date: Fri, 3 Jan 2025 16:50:29 +0800 Subject: [PATCH 03/11] rtxux suggested: add python http.server to start a HTTP server --- pages/_planet/2025-01-03-local-mirroring.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pages/_planet/2025-01-03-local-mirroring.md b/pages/_planet/2025-01-03-local-mirroring.md index 6cd88663ab..b23d7912e7 100644 --- a/pages/_planet/2025-01-03-local-mirroring.md +++ b/pages/_planet/2025-01-03-local-mirroring.md @@ -14,6 +14,20 @@ USTCLUG 的一个重要服务是它的 [开源软件镜像](https://mirrors.ustc _注:为何不写针对 Linux 用户的教程呢?这是因为,由于有 Apache 和 NGINX 这类成熟好用的服务器软件,再加上 Linux 操作系统优秀的包管理器,结合网上的教程,用几分钟的时间在 Linux 平台上快速建立并运行一个 HTTP 服务器应该不是难事。而在 Windows 上,配置 IIS 这类大而笨重的服务器非常麻烦,使用 Apache/NGINX 之类的服务器软件又由于操作习惯的不同,也不方便。_ +## 使用 Python `http.server` + +**对比下面的(老旧的)`EasyWebSvr`,使用 Python 很容易完成一个简单的 HTTP 服务器搭建。**如果你已经安装了 Python,则可以直接使用 + +``` +python3 -m http.server +``` + +来以当前目录为根目录,``为端口运行一个 HTTP 服务器。如果需要指定别的目录``作为根目录,可以使用 + +``` +python3 -m http.server --directory +``` + ## 获取一个 HTTP 服务器 首先当然是要获取一个 HTTP 服务器了,这里我们选择的是 `EasyWebSvr`。这个服务器是一个体积超小(只有数十 KB)、单文件、几乎不需要配置的小型 HTTP 服务器,甚至支持 CGI 和 PHP。`EasyWebSvr`是一个历史久远的[开源项目](https://github.com/baojianjob/EasyWebSvr),使用 MSVC 作为开发环境,而且很容易下载到它的编译好的版本(搜索`EasyWebSvr`就可以了)。下载后你将得到一个 `EasyWebSvr.exe` 和一些其他的文件。不用理会其他的文件(事实上它们是不必要的),直接将 `EasyWebSvr.exe` 复制到一个空文件夹里面就可以了。 From cf3ec8b913843203af053f02ff76d3ffe5940d4d Mon Sep 17 00:00:00 2001 From: luojh Date: Fri, 3 Jan 2025 17:09:40 +0800 Subject: [PATCH 04/11] Fix according to suggestions --- pages/_planet/2025-01-03-local-mirroring.md | 30 ++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pages/_planet/2025-01-03-local-mirroring.md b/pages/_planet/2025-01-03-local-mirroring.md index b23d7912e7..7db1a3b2e2 100644 --- a/pages/_planet/2025-01-03-local-mirroring.md +++ b/pages/_planet/2025-01-03-local-mirroring.md @@ -1,16 +1,16 @@ --- -title: "快速建立本地 HTTP 文件镜像" +title: "快速建立本地 HTTP 文件服务" author: luojh categories: - mirrors -tags: Windows 镜像 +tags: Windows HTTP --- -USTCLUG 的一个重要服务是它的 [开源软件镜像](https://mirrors.ustc.edu.cn)。但是我们今天要讨论的,是另一种自己在本地搭建的镜像。这篇文章来源于帮同学解决的一个小问题。 +USTCLUG 的一个重要服务是它的 [开源软件镜像](https://mirrors.ustc.edu.cn)。但是我们这里要讨论的,是另一种自己在本地搭建的文件服务,目的是加速对远程静态文件的访问。这篇文章来源于帮同学解决的一个小问题。 ## 目的 -某些课程作业附带的代码示例会通过 HTTP 的方式获取运行需要的输入数据,但是如果这个数据不巧放在某台访问速率很低的服务器上(例如不少用`.edu`域名的国外大学的课程网站上),则会使得作业的运行时间大大加长——通过只有几 KB/s 的网络下载数十 MB 的数据总不是个好主意。更有可能的是,样例代码还需要做一些修改才能满足要求,这时候每次调试运行代码时都要去下载一次输入数据,简直难以忍受。本文将针对 Windows 用户,讲解如何快速搭建一个 HTTP 服务器来在本地“镜像”一份这种数据,以实现快速访问。 +某些课程作业附带的代码示例会通过 HTTP 的方式获取运行需要的输入数据,但是如果这个数据不巧放在某台访问速率很低的服务器上(例如不少用`.edu`域名的国外大学的课程网站上),则会使得作业的运行时间大大加长——通过只有几 KB/s 的网络下载数十 MB 的数据总不是个好主意。更有可能的是,样例代码还需要做一些修改才能满足要求,这时候每次调试运行代码时都要去下载一次输入数据,简直难以忍受。本文将针对 Windows 用户,讲解如何快速搭建一个 HTTP 服务器来在本地提供一份这种数据,以实现快速访问。 _注:为何不写针对 Linux 用户的教程呢?这是因为,由于有 Apache 和 NGINX 这类成熟好用的服务器软件,再加上 Linux 操作系统优秀的包管理器,结合网上的教程,用几分钟的时间在 Linux 平台上快速建立并运行一个 HTTP 服务器应该不是难事。而在 Windows 上,配置 IIS 这类大而笨重的服务器非常麻烦,使用 Apache/NGINX 之类的服务器软件又由于操作习惯的不同,也不方便。_ @@ -22,7 +22,7 @@ _注:为何不写针对 Linux 用户的教程呢?这是因为,由于有 Ap python3 -m http.server ``` -来以当前目录为根目录,``为端口运行一个 HTTP 服务器。如果需要指定别的目录``作为根目录,可以使用 +来以当前目录为根目录,`` 为端口运行一个 HTTP 服务器。如果需要指定别的目录 `` 作为根目录,可以使用 ``` python3 -m http.server --directory @@ -30,22 +30,22 @@ python3 -m http.server --directory ## 获取一个 HTTP 服务器 -首先当然是要获取一个 HTTP 服务器了,这里我们选择的是 `EasyWebSvr`。这个服务器是一个体积超小(只有数十 KB)、单文件、几乎不需要配置的小型 HTTP 服务器,甚至支持 CGI 和 PHP。`EasyWebSvr`是一个历史久远的[开源项目](https://github.com/baojianjob/EasyWebSvr),使用 MSVC 作为开发环境,而且很容易下载到它的编译好的版本(搜索`EasyWebSvr`就可以了)。下载后你将得到一个 `EasyWebSvr.exe` 和一些其他的文件。不用理会其他的文件(事实上它们是不必要的),直接将 `EasyWebSvr.exe` 复制到一个空文件夹里面就可以了。 +首先当然是要获取一个 HTTP 服务器了,这里我们选择的是 `EasyWebSvr`。这个服务器是一个体积超小(只有数十 KB)、单文件、几乎不需要配置的小型 HTTP 服务器,甚至支持 CGI 和 PHP。`EasyWebSvr` 是一个历史久远的[开源项目](https://github.com/baojianjob/EasyWebSvr),使用 MSVC 作为开发环境,而且很容易下载到它的编译好的版本(搜索 `EasyWebSvr` 就可以了)。下载后你将得到一个 `EasyWebSvr.exe` 和一些其他的文件。不用理会其他的文件(事实上它们是不必要的),直接将 `EasyWebSvr.exe` 复制到一个空文件夹里面就可以了。 ## 准备数据 -- 从原始的地址上下载一份要被镜像的数据,也放到上面所说的那个空文件夹里面。 -- 运行 `EasyWebSvr.exe` ,可以看到一个小窗口。 -- 点击右下角的锤子按钮(菜单),选择最下面的`设置`一项。 -- 在弹出的设置对话框里面,选择`主目录`为当前 `EasyWebSvr.exe` 所在的目录。 -- 在`文档`选项卡里面勾选`允许目录浏览`和`总是显示目录内容`。 -- 点击`确定`结束并保存配置。 +- 从原始的地址上下载一份要被访问的数据,也放到上面所说的那个空文件夹里面。 +- 运行 `EasyWebSvr.exe`,可以看到一个小窗口。 +- 点击右下角的锤子按钮(菜单),选择最下面的 `设置` 一项。 +- 在弹出的设置对话框里面,选择 `主目录` 为当前 `EasyWebSvr.exe` 所在的目录。 +- 在 `文档` 选项卡里面勾选 `允许目录浏览` 和 `总是显示目录内容`。 +- 点击 `确定` 结束并保存配置。 - 然后在主窗口里面点击右下方的红色按钮(在菜单按钮的边上),正常应该看到它变成蓝绿色(这时候如果有 Windows 防火墙提示,请选择允许)。 -- 此时服务器就配置好了,打开浏览器输入`http://localhost`即可看到文件列表。 +- 此时服务器就配置好了,打开浏览器输入 `http://localhost` 即可看到文件列表。 ## 修改原先的代码 -- 例如原先提供的代码中数据文件的 URL 是 `http://some.site.edu/path/to/file/data.csv`,而这份数据就和 `EasyWebSvr.exe` 在同一文件夹下,则将代码中的地址修改为 `http://localhost/data.csv` 就可以使用本地的镜像了! +- 例如原先提供的代码中数据文件的 URL 是 `http://some.site.edu/path/to/file/data.csv`,而这份数据就和 `EasyWebSvr.exe` 在同一文件夹下,则将代码中的地址修改为 `http://localhost/data.csv` 就可以使用本地的文件服务了! - 服务器最小化后会显示一个小托盘图标,右键点击它可以显示各种选项,包括重新显示主窗口。 - 使用完后,点击蓝绿色图标,它会变成红色,此时服务器就关闭了。 @@ -79,7 +79,7 @@ ipconfig /flushdns ### 原地址有非 `80` 的端口号 -如果你拿到的地址使用了别的端口(例如 `some.site.edu:8080`)且不能修改,那么请在 EasyWebServer 的设置页面`端口号`处输入对应的端口号 `8080`,对应的访问地址就是 `localhost:8080`。 +如果你拿到的地址使用了别的端口(例如 `some.site.edu:8080`)且不能修改,那么请在 EasyWebServer 的设置页面 `端口号` 处输入对应的端口号 `8080`,对应的访问地址就是 `localhost:8080`。 ### 提示端口已被占用 From f6c53aaa6e1e9f695f588a75d2d27bd9a5cb0258 Mon Sep 17 00:00:00 2001 From: luojh Date: Fri, 3 Jan 2025 17:38:04 +0800 Subject: [PATCH 05/11] Fix easywebsvr: add security warning; Check spacing --- pages/_planet/2025-01-03-local-mirroring.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pages/_planet/2025-01-03-local-mirroring.md b/pages/_planet/2025-01-03-local-mirroring.md index 7db1a3b2e2..1ab234fbe5 100644 --- a/pages/_planet/2025-01-03-local-mirroring.md +++ b/pages/_planet/2025-01-03-local-mirroring.md @@ -2,7 +2,7 @@ title: "快速建立本地 HTTP 文件服务" author: luojh categories: - - mirrors + - "Tech Tutorial" tags: Windows HTTP --- @@ -10,7 +10,7 @@ USTCLUG 的一个重要服务是它的 [开源软件镜像](https://mirrors.ustc ## 目的 -某些课程作业附带的代码示例会通过 HTTP 的方式获取运行需要的输入数据,但是如果这个数据不巧放在某台访问速率很低的服务器上(例如不少用`.edu`域名的国外大学的课程网站上),则会使得作业的运行时间大大加长——通过只有几 KB/s 的网络下载数十 MB 的数据总不是个好主意。更有可能的是,样例代码还需要做一些修改才能满足要求,这时候每次调试运行代码时都要去下载一次输入数据,简直难以忍受。本文将针对 Windows 用户,讲解如何快速搭建一个 HTTP 服务器来在本地提供一份这种数据,以实现快速访问。 +某些课程作业附带的代码示例会通过 HTTP 的方式获取运行需要的输入数据,但是如果这个数据不巧放在某台访问速率很低的服务器上(例如不少用 `.edu` 域名的国外大学的课程网站上),则会使得作业的运行时间大大加长——通过只有几 KB/s 的网络下载数十 MB 的数据总不是个好主意。更有可能的是,样例代码还需要做一些修改才能满足要求,这时候每次调试运行代码时都要去下载一次输入数据,简直难以忍受。本文将针对 Windows 用户,讲解如何快速搭建一个 HTTP 服务器来在本地提供一份这种数据,以实现快速访问。 _注:为何不写针对 Linux 用户的教程呢?这是因为,由于有 Apache 和 NGINX 这类成熟好用的服务器软件,再加上 Linux 操作系统优秀的包管理器,结合网上的教程,用几分钟的时间在 Linux 平台上快速建立并运行一个 HTTP 服务器应该不是难事。而在 Windows 上,配置 IIS 这类大而笨重的服务器非常麻烦,使用 Apache/NGINX 之类的服务器软件又由于操作习惯的不同,也不方便。_ @@ -28,10 +28,18 @@ python3 -m http.server python3 -m http.server --directory ``` +如果需要 bind 到特定的地址(对于本地服务而言,应该使用 `127.0.0.1`) + +``` +python3 -m http.server --bind 127.0.0.1 +``` + ## 获取一个 HTTP 服务器 首先当然是要获取一个 HTTP 服务器了,这里我们选择的是 `EasyWebSvr`。这个服务器是一个体积超小(只有数十 KB)、单文件、几乎不需要配置的小型 HTTP 服务器,甚至支持 CGI 和 PHP。`EasyWebSvr` 是一个历史久远的[开源项目](https://github.com/baojianjob/EasyWebSvr),使用 MSVC 作为开发环境,而且很容易下载到它的编译好的版本(搜索 `EasyWebSvr` 就可以了)。下载后你将得到一个 `EasyWebSvr.exe` 和一些其他的文件。不用理会其他的文件(事实上它们是不必要的),直接将 `EasyWebSvr.exe` 复制到一个空文件夹里面就可以了。 +_提示:根据[代码](https://github.com/baojianjob/EasyWebSvr/blob/796448f6b312ad0676add90024940316dfa34299/EasyWebSvr/Socket.cpp#L439),EasyWebSvr 会 bind 到 `0.0.0.0`,这可能会导致**安全问题**。如果需要 bind 到 `127.0.0.1`,可能需要修改代码并重新构建。_ + ## 准备数据 - 从原始的地址上下载一份要被访问的数据,也放到上面所说的那个空文件夹里面。 From 299b2d7a8ec105aa957ec50fcf91e9dc44cd69b4 Mon Sep 17 00:00:00 2001 From: luojh Date: Sat, 4 Jan 2025 21:17:32 +0800 Subject: [PATCH 06/11] luojh changed local file serving planet article --- ...ng.md => 2025-01-03-local-file-serving.md} | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) rename pages/_planet/{2025-01-03-local-mirroring.md => 2025-01-03-local-file-serving.md} (62%) diff --git a/pages/_planet/2025-01-03-local-mirroring.md b/pages/_planet/2025-01-03-local-file-serving.md similarity index 62% rename from pages/_planet/2025-01-03-local-mirroring.md rename to pages/_planet/2025-01-03-local-file-serving.md index 1ab234fbe5..ba7494e97d 100644 --- a/pages/_planet/2025-01-03-local-mirroring.md +++ b/pages/_planet/2025-01-03-local-file-serving.md @@ -10,39 +10,45 @@ USTCLUG 的一个重要服务是它的 [开源软件镜像](https://mirrors.ustc ## 目的 -某些课程作业附带的代码示例会通过 HTTP 的方式获取运行需要的输入数据,但是如果这个数据不巧放在某台访问速率很低的服务器上(例如不少用 `.edu` 域名的国外大学的课程网站上),则会使得作业的运行时间大大加长——通过只有几 KB/s 的网络下载数十 MB 的数据总不是个好主意。更有可能的是,样例代码还需要做一些修改才能满足要求,这时候每次调试运行代码时都要去下载一次输入数据,简直难以忍受。本文将针对 Windows 用户,讲解如何快速搭建一个 HTTP 服务器来在本地提供一份这种数据,以实现快速访问。 +某些课程作业附带的代码示例会通过 HTTP 的方式获取运行需要的输入数据,但是如果这个数据不巧放在某台访问速率很低的服务器上(例如不少用 `.edu` 域名的国外大学的课程网站上),则会使得作业的运行时间大大加长——通过只有几 KB/s 的网络下载数十 MB 的数据总不是个好主意。更有可能的是,根据作业内容,样例代码还需要做一些修改,这时候每次调试运行代码时都要去下载一次输入数据,简直难以忍受。本文将针对 Windows 用户,讲解如何在手工下载一次相关的文件后,在本地快速搭建一个 HTTP 服务器提供数据文件,以避免反复访问慢速的源地址。对于不能修改访问地址的情况,也提供了相应的对策。 -_注:为何不写针对 Linux 用户的教程呢?这是因为,由于有 Apache 和 NGINX 这类成熟好用的服务器软件,再加上 Linux 操作系统优秀的包管理器,结合网上的教程,用几分钟的时间在 Linux 平台上快速建立并运行一个 HTTP 服务器应该不是难事。而在 Windows 上,配置 IIS 这类大而笨重的服务器非常麻烦,使用 Apache/NGINX 之类的服务器软件又由于操作习惯的不同,也不方便。_ +> 为何不写针对 Linux 用户的教程呢?这是因为,由于有 Apache 和 NGINX 这类成熟好用的服务器软件,再加上 Linux 操作系统优秀的包管理器,结合网上的教程,用几分钟的时间在 Linux 平台上快速建立并运行一个 HTTP 服务器应该不是难事。而在 Windows 上,配置 IIS 这类大而笨重的服务器非常麻烦,使用 Apache/NGINX 之类的服务器软件又由于操作习惯的不同,也不方便。\_ ## 使用 Python `http.server` -**对比下面的(老旧的)`EasyWebSvr`,使用 Python 很容易完成一个简单的 HTTP 服务器搭建。**如果你已经安装了 Python,则可以直接使用 +**对比下面的(老旧的)`EasyWebSvr`,使用 Python 很容易完成一个简单的 HTTP 服务器搭建。** + +如果你已经安装了 Python,则可以直接使用 ``` python3 -m http.server ``` -来以当前目录为根目录,`` 为端口运行一个 HTTP 服务器。如果需要指定别的目录 `` 作为根目录,可以使用 +来以当前目录为根目录,`` 为端口运行一个 HTTP 服务器。 + +如果需要指定别的目录 `` 作为 HTTP 服务的根目录,可以使用 ``` python3 -m http.server --directory ``` -如果需要 bind 到特定的地址(对于本地服务而言,应该使用 `127.0.0.1`) +如果需要 bind 到特定的地址(对于本地服务而言,应该使用 `127.0.0.1`),可以使用下面的命令。`bind` 是指将一个网络地址(IP 和端口)与服务器软件中的套接字关联的过程,使得该服务器能接收指定地址上的网络数据。如果只需要本地访问,则可以使用本地回环地址 `127.0.0.1`。 ``` python3 -m http.server --bind 127.0.0.1 ``` -## 获取一个 HTTP 服务器 +## 使用 EasyWebServer + +### 获取一个 HTTP 服务器 首先当然是要获取一个 HTTP 服务器了,这里我们选择的是 `EasyWebSvr`。这个服务器是一个体积超小(只有数十 KB)、单文件、几乎不需要配置的小型 HTTP 服务器,甚至支持 CGI 和 PHP。`EasyWebSvr` 是一个历史久远的[开源项目](https://github.com/baojianjob/EasyWebSvr),使用 MSVC 作为开发环境,而且很容易下载到它的编译好的版本(搜索 `EasyWebSvr` 就可以了)。下载后你将得到一个 `EasyWebSvr.exe` 和一些其他的文件。不用理会其他的文件(事实上它们是不必要的),直接将 `EasyWebSvr.exe` 复制到一个空文件夹里面就可以了。 -_提示:根据[代码](https://github.com/baojianjob/EasyWebSvr/blob/796448f6b312ad0676add90024940316dfa34299/EasyWebSvr/Socket.cpp#L439),EasyWebSvr 会 bind 到 `0.0.0.0`,这可能会导致**安全问题**。如果需要 bind 到 `127.0.0.1`,可能需要修改代码并重新构建。_ +> 提示:根据[代码](https://github.com/baojianjob/EasyWebSvr/blob/796448f6b312ad0676add90024940316dfa34299/EasyWebSvr/Socket.cpp#L439),EasyWebSvr 会 bind 到 `0.0.0.0`,这可能会导致**安全问题**。如果需要 bind 到 `127.0.0.1`,可能需要修改代码并重新构建。 -## 准备数据 +### 准备数据 -- 从原始的地址上下载一份要被访问的数据,也放到上面所说的那个空文件夹里面。 +- 从原始的地址上手工下载一份要被访问的数据,放到上面所说的那个空文件夹里面。 - 运行 `EasyWebSvr.exe`,可以看到一个小窗口。 - 点击右下角的锤子按钮(菜单),选择最下面的 `设置` 一项。 - 在弹出的设置对话框里面,选择 `主目录` 为当前 `EasyWebSvr.exe` 所在的目录。 @@ -51,15 +57,15 @@ _提示:根据[代码](https://github.com/baojianjob/EasyWebSvr/blob/796448f6b - 然后在主窗口里面点击右下方的红色按钮(在菜单按钮的边上),正常应该看到它变成蓝绿色(这时候如果有 Windows 防火墙提示,请选择允许)。 - 此时服务器就配置好了,打开浏览器输入 `http://localhost` 即可看到文件列表。 -## 修改原先的代码 +### 修改原先的代码 - 例如原先提供的代码中数据文件的 URL 是 `http://some.site.edu/path/to/file/data.csv`,而这份数据就和 `EasyWebSvr.exe` 在同一文件夹下,则将代码中的地址修改为 `http://localhost/data.csv` 就可以使用本地的文件服务了! - 服务器最小化后会显示一个小托盘图标,右键点击它可以显示各种选项,包括重新显示主窗口。 - 使用完后,点击蓝绿色图标,它会变成红色,此时服务器就关闭了。 -## 特殊情况 +### 特殊情况 -### 代码不支持修改地址 +#### 代码不支持修改地址 如果代码不支持修改地址(这很少见),那么也可以按照原来的 URL 在本地建立文件夹,类似下面这样: @@ -85,10 +91,10 @@ ipconfig /flushdns 即可。可以通过浏览器访问 `http://some.site.edu/path/to/file/data.csv` 来确认。这一操作会修改所有对 `some.site.edu` 的请求,因此用完后请删去在 `hosts` 中加入的那一行,然后再运行一次 `ipconfig /flushdns`。 -### 原地址有非 `80` 的端口号 +#### 原地址有非 `80` 的端口号 如果你拿到的地址使用了别的端口(例如 `some.site.edu:8080`)且不能修改,那么请在 EasyWebServer 的设置页面 `端口号` 处输入对应的端口号 `8080`,对应的访问地址就是 `localhost:8080`。 -### 提示端口已被占用 +#### 提示端口已被占用 -和上面非 `80` 端口一样,换一个别的端口就好了,例如 `8080` 或者 `8000`,然后再次点红色圆球图标开启服务器。这时候记得访问地址也要加上对应的端口号。 +这可能是因为有其他应用在使用 `80` 端口。通过 `netstat -ano` 命令可以查看机器上正被使用的端口号和对应的进程 ID。如果不希望关闭占用 `80` 端口的程序,那么和上面非 `80` 端口一样,将我们的 HTTP 文件服务器换到一个别的端口就好了,例如 `8080` 或者 `8000`,然后再次点红色圆球图标开启服务器。这时候记得访问地址也要加上对应的端口号。 From a068afb36b2a6b68b01f593f4cc8535c3194cacb Mon Sep 17 00:00:00 2001 From: Jiahong Luo Date: Sun, 5 Jan 2025 16:41:57 +0800 Subject: [PATCH 07/11] Update pages/_planet/2025-01-03-local-file-serving.md Co-authored-by: taoky --- pages/_planet/2025-01-03-local-file-serving.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/_planet/2025-01-03-local-file-serving.md b/pages/_planet/2025-01-03-local-file-serving.md index ba7494e97d..6e82712849 100644 --- a/pages/_planet/2025-01-03-local-file-serving.md +++ b/pages/_planet/2025-01-03-local-file-serving.md @@ -12,7 +12,7 @@ USTCLUG 的一个重要服务是它的 [开源软件镜像](https://mirrors.ustc 某些课程作业附带的代码示例会通过 HTTP 的方式获取运行需要的输入数据,但是如果这个数据不巧放在某台访问速率很低的服务器上(例如不少用 `.edu` 域名的国外大学的课程网站上),则会使得作业的运行时间大大加长——通过只有几 KB/s 的网络下载数十 MB 的数据总不是个好主意。更有可能的是,根据作业内容,样例代码还需要做一些修改,这时候每次调试运行代码时都要去下载一次输入数据,简直难以忍受。本文将针对 Windows 用户,讲解如何在手工下载一次相关的文件后,在本地快速搭建一个 HTTP 服务器提供数据文件,以避免反复访问慢速的源地址。对于不能修改访问地址的情况,也提供了相应的对策。 -> 为何不写针对 Linux 用户的教程呢?这是因为,由于有 Apache 和 NGINX 这类成熟好用的服务器软件,再加上 Linux 操作系统优秀的包管理器,结合网上的教程,用几分钟的时间在 Linux 平台上快速建立并运行一个 HTTP 服务器应该不是难事。而在 Windows 上,配置 IIS 这类大而笨重的服务器非常麻烦,使用 Apache/NGINX 之类的服务器软件又由于操作习惯的不同,也不方便。\_ +> 为何不写针对 Linux 用户的教程呢?这是因为,由于有 Apache 和 NGINX 这类成熟好用的服务器软件,再加上 Linux 操作系统优秀的包管理器,结合网上的教程,用几分钟的时间在 Linux 平台上快速建立并运行一个 HTTP 服务器应该不是难事。而在 Windows 上,配置 IIS 这类大而笨重的服务器非常麻烦,使用 Apache/NGINX 之类的服务器软件又由于操作习惯的不同,也不方便。 ## 使用 Python `http.server` From f1b8983f89c46c5b08fefa7021925989cf345142 Mon Sep 17 00:00:00 2001 From: luojh Date: Sun, 5 Jan 2025 16:46:21 +0800 Subject: [PATCH 08/11] Add author --- _data/authors.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/_data/authors.yml b/_data/authors.yml index a49a84ffbf..2842183562 100644 --- a/_data/authors.yml +++ b/_data/authors.yml @@ -56,6 +56,14 @@ tiankaima: icon: fab fa-fw fa-github url: https://github.com/tiankaima +luojh: + name: luojh + avatar: "https://avatars.githubusercontent.com/u/147305241?v=4" + links: + - label: GitHub + icon: fab fa-fw fa-github + url: https://github.com/ustcljh + ibug: name: iBug avatar: "https://avatars.githubusercontent.com/u/7273074?v=4" From 38530d3f3f121edea6fdf1fe109d557e49049742 Mon Sep 17 00:00:00 2001 From: Jiahong Luo Date: Mon, 6 Jan 2025 12:18:14 +0800 Subject: [PATCH 09/11] fix default bind address in Python http.server: Update pages/_planet/2025-01-03-local-file-serving.md Co-authored-by: taoky --- pages/_planet/2025-01-03-local-file-serving.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/_planet/2025-01-03-local-file-serving.md b/pages/_planet/2025-01-03-local-file-serving.md index 6e82712849..8743809ce8 100644 --- a/pages/_planet/2025-01-03-local-file-serving.md +++ b/pages/_planet/2025-01-03-local-file-serving.md @@ -32,7 +32,7 @@ python3 -m http.server python3 -m http.server --directory ``` -如果需要 bind 到特定的地址(对于本地服务而言,应该使用 `127.0.0.1`),可以使用下面的命令。`bind` 是指将一个网络地址(IP 和端口)与服务器软件中的套接字关联的过程,使得该服务器能接收指定地址上的网络数据。如果只需要本地访问,则可以使用本地回环地址 `127.0.0.1`。 +如果需要 bind 到特定的地址(对于本地服务而言,应该使用 `127.0.0.1`),可以使用下面的命令。`bind` 是指将一个网络地址(IP 和端口)与服务器软件中的套接字关联的过程,使得该服务器能接收指定地址上的网络数据。**Python 的 http.server 默认值为 `0.0.0.0`,代表所有人都可以访问**。如果只需要本地访问,则可以使用本地回环地址 `127.0.0.1`。 ``` python3 -m http.server --bind 127.0.0.1 From 0c88d59fbc495d6a2bdd08a0e37b43ff829c13f2 Mon Sep 17 00:00:00 2001 From: luojh Date: Mon, 6 Jan 2025 12:20:57 +0800 Subject: [PATCH 10/11] luojh: Fix small fmt and spelling issues --- pages/_planet/2025-01-03-local-file-serving.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pages/_planet/2025-01-03-local-file-serving.md b/pages/_planet/2025-01-03-local-file-serving.md index 8743809ce8..db32d48e7c 100644 --- a/pages/_planet/2025-01-03-local-file-serving.md +++ b/pages/_planet/2025-01-03-local-file-serving.md @@ -12,7 +12,7 @@ USTCLUG 的一个重要服务是它的 [开源软件镜像](https://mirrors.ustc 某些课程作业附带的代码示例会通过 HTTP 的方式获取运行需要的输入数据,但是如果这个数据不巧放在某台访问速率很低的服务器上(例如不少用 `.edu` 域名的国外大学的课程网站上),则会使得作业的运行时间大大加长——通过只有几 KB/s 的网络下载数十 MB 的数据总不是个好主意。更有可能的是,根据作业内容,样例代码还需要做一些修改,这时候每次调试运行代码时都要去下载一次输入数据,简直难以忍受。本文将针对 Windows 用户,讲解如何在手工下载一次相关的文件后,在本地快速搭建一个 HTTP 服务器提供数据文件,以避免反复访问慢速的源地址。对于不能修改访问地址的情况,也提供了相应的对策。 -> 为何不写针对 Linux 用户的教程呢?这是因为,由于有 Apache 和 NGINX 这类成熟好用的服务器软件,再加上 Linux 操作系统优秀的包管理器,结合网上的教程,用几分钟的时间在 Linux 平台上快速建立并运行一个 HTTP 服务器应该不是难事。而在 Windows 上,配置 IIS 这类大而笨重的服务器非常麻烦,使用 Apache/NGINX 之类的服务器软件又由于操作习惯的不同,也不方便。 +> 为何不写针对 Linux 用户的教程呢?这是因为,由于有 Apache 和 Nginx 这类成熟好用的服务器软件,再加上 Linux 操作系统优秀的包管理器,结合网上的教程,用几分钟的时间在 Linux 平台上快速建立并运行一个 HTTP 服务器应该不是难事。而在 Windows 上,配置 IIS 这类大而笨重的服务器非常麻烦,使用 Apache/Nginx 之类的服务器软件又由于操作习惯的不同,也不方便。 ## 使用 Python `http.server` @@ -20,7 +20,7 @@ USTCLUG 的一个重要服务是它的 [开源软件镜像](https://mirrors.ustc 如果你已经安装了 Python,则可以直接使用 -``` +```cmd python3 -m http.server ``` @@ -28,13 +28,13 @@ python3 -m http.server 如果需要指定别的目录 `` 作为 HTTP 服务的根目录,可以使用 -``` +```cmd python3 -m http.server --directory ``` 如果需要 bind 到特定的地址(对于本地服务而言,应该使用 `127.0.0.1`),可以使用下面的命令。`bind` 是指将一个网络地址(IP 和端口)与服务器软件中的套接字关联的过程,使得该服务器能接收指定地址上的网络数据。**Python 的 http.server 默认值为 `0.0.0.0`,代表所有人都可以访问**。如果只需要本地访问,则可以使用本地回环地址 `127.0.0.1`。 -``` +```cmd python3 -m http.server --bind 127.0.0.1 ``` @@ -69,7 +69,7 @@ python3 -m http.server --bind 127.0.0.1 如果代码不支持修改地址(这很少见),那么也可以按照原来的 URL 在本地建立文件夹,类似下面这样: -``` +```text EasyWebSvr.exe path/ -> 建立这个目录 to/ -> 建立这个目录 @@ -79,22 +79,22 @@ path/ -> 建立这个目录 然后修改 `hosts` 文件(一般在 `C:\Windows\System32\drivers\etc` 里面,需要管理员权限,具体请看相关教程),加上一句 -``` +```text 127.0.0.1 some.site.edu ``` 然后以管理员权限运行 -``` +```cmd ipconfig /flushdns ``` 即可。可以通过浏览器访问 `http://some.site.edu/path/to/file/data.csv` 来确认。这一操作会修改所有对 `some.site.edu` 的请求,因此用完后请删去在 `hosts` 中加入的那一行,然后再运行一次 `ipconfig /flushdns`。 -#### 原地址有非 `80` 的端口号 +#### 原地址有非 80 的端口号 如果你拿到的地址使用了别的端口(例如 `some.site.edu:8080`)且不能修改,那么请在 EasyWebServer 的设置页面 `端口号` 处输入对应的端口号 `8080`,对应的访问地址就是 `localhost:8080`。 #### 提示端口已被占用 -这可能是因为有其他应用在使用 `80` 端口。通过 `netstat -ano` 命令可以查看机器上正被使用的端口号和对应的进程 ID。如果不希望关闭占用 `80` 端口的程序,那么和上面非 `80` 端口一样,将我们的 HTTP 文件服务器换到一个别的端口就好了,例如 `8080` 或者 `8000`,然后再次点红色圆球图标开启服务器。这时候记得访问地址也要加上对应的端口号。 +这可能是因为有其他应用在使用 80 端口。通过 `netstat -ano` 命令可以查看机器上正被使用的端口号和对应的进程 ID。如果不希望关闭占用 80 端口的程序,那么和上面非 80 端口一样,将我们的 HTTP 文件服务器换到一个别的端口就好了,例如 `8080` 或者 `8000`,然后再次点红色圆球图标开启服务器。这时候记得访问地址也要加上对应的端口号。 From c807527c07aaa41117329dbc7d0a560035d236a8 Mon Sep 17 00:00:00 2001 From: luojh Date: Mon, 6 Jan 2025 13:36:37 +0800 Subject: [PATCH 11/11] Fix code block langage --- pages/_planet/2025-01-03-local-file-serving.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pages/_planet/2025-01-03-local-file-serving.md b/pages/_planet/2025-01-03-local-file-serving.md index db32d48e7c..1808968c72 100644 --- a/pages/_planet/2025-01-03-local-file-serving.md +++ b/pages/_planet/2025-01-03-local-file-serving.md @@ -20,7 +20,7 @@ USTCLUG 的一个重要服务是它的 [开源软件镜像](https://mirrors.ustc 如果你已经安装了 Python,则可以直接使用 -```cmd +```shell python3 -m http.server ``` @@ -28,13 +28,13 @@ python3 -m http.server 如果需要指定别的目录 `` 作为 HTTP 服务的根目录,可以使用 -```cmd +```shell python3 -m http.server --directory ``` 如果需要 bind 到特定的地址(对于本地服务而言,应该使用 `127.0.0.1`),可以使用下面的命令。`bind` 是指将一个网络地址(IP 和端口)与服务器软件中的套接字关联的过程,使得该服务器能接收指定地址上的网络数据。**Python 的 http.server 默认值为 `0.0.0.0`,代表所有人都可以访问**。如果只需要本地访问,则可以使用本地回环地址 `127.0.0.1`。 -```cmd +```shell python3 -m http.server --bind 127.0.0.1 ``` @@ -85,7 +85,7 @@ path/ -> 建立这个目录 然后以管理员权限运行 -```cmd +```shell ipconfig /flushdns ```