Chrome SingleFile 扩展将网页的 HTML DOM 发送到 restful API
如果你经常需要保存网页,强烈推荐 Chrome 扩展程序 SingleFile。
优点:它会将 CSS、图片、字体全部编码进同一个 HTML 文件中。
效果:保存后的本地文件看起来和在线网页一模一样,且只有一个文件,非常易于管理。
除了保存网页到本地之外,也支持其他网盘和restful API 的方式, 我这里尝试保存到 restful API,配置如下

测试了下,返回这个错误
SingleFile 错误: <html> <head><title>413 Request Entity Too Large</title></head> <body> <center><h1>413 Request Entity Too Large</h1></center> <hr> <center>nginx/1.29.3</center> </body> </html> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page --> <!-- a padding to disable MSIE and Chrome friendly error page --> (RestFormApi)
这个错误非常典型:413 Request Entity Too Large 意味着尝试上传的 HTML 文件体积超过了 Nginx 服务器允许的最大限制。
由于 SingleFile 会将图片、字体等资源全部编码为 Base64 嵌入到 HTML 中,生成的单文件体积往往会达到几 MB 甚至几十 MB,而 Nginx 默认的限制通常只有 1MB。
解决方法
你需要在 Nginx 配置文件中调大 client_max_body_size 参数。
1. 修改 Nginx 配置
找到你的 Nginx 配置文件(通常是 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/your_site.conf),在 http、server 或 location 段落中添加以下配置:
http {
# 允许上传最大 50MB 的文件(根据你的需求调整)
client_max_body_size 50M;
# ... 其他配置
}2. 检查后端限制
如果修改了 Nginx 后仍然报错,你的后端框架可能也有默认限制。例如:
PHP: 修改
php.ini中的upload_max_filesize和post_max_size。
3. 重载 Nginx
修改完配置后,别忘了测试并重启服务:
sudo nginx -t # 检查语法是否正确 sudo nginx -s reload # 平滑重启
如果你无法修改服务器配置
如果你使用的是第三方 API 或无法控制 Nginx 权限,可以尝试在 SingleFile 中优化减小文件体积:
开启压缩:在 SingleFile 选项中开启 "Compression"(这会消耗更多 CPU,但减小体积)。
精简内容:
取消勾选 "Save fonts"(字体文件通常很大)。
取消勾选 "Save images"(如果不需要图片)。
开启 "Remove unused CSS rules"。
修改后没有出现413错误,但在 laravel 后端接收不到 html 的内容,打印
json_encode($request->all(), JSON_PRETTY_PRINT)
显示
{
"url": "https:\/\/agingcoder.cn\/post\/100067.html",
"html": {}
}在 Laravel 中看到 "html": {} 这种输出,通常是因为 SingleFile 发送的并不是普通的 JSON 文本字段,而是一个 Multipart Form Data 里的 文件流(File Upload)。
当你使用 json_encode($request->all()) 时,PHP 无法将底层的 UploadedFile 对象直接序列化为字符串,所以显示为空对象 {}。
原因:它是“文件”而非“字符串”
SingleFile 在推送时,默认会将压缩后的 HTML 作为一个名为 file 或 html 的文件上传。
解决方法:在 Laravel 中获取
请尝试在你的 Controller 中改用以下方式来查看内容:
$file = $request->file('html');
$htmlContent = file_get_contents($file->getRealPath());