HTTP?413狀態(tài)碼詳解與前端處理請(qǐng)求體過(guò)大教程
前言
在 Web 開發(fā)中,HTTP 413 狀態(tài)碼是一個(gè)常見但容易被誤解的狀態(tài)碼,尤其在文件上傳或大請(qǐng)求體場(chǎng)景下。本文將從 413 的含義、觸發(fā)來(lái)源、前端處理、服務(wù)端自定義以及上傳大小上限等方面進(jìn)行詳細(xì)講解。
一、HTTP 413 代表什么?
HTTP 413 的全稱是 “413 Payload Too Large”(以前叫 Request Entity Too Large),表示客戶端發(fā)送的請(qǐng)求體過(guò)大,服務(wù)器拒絕處理。
狀態(tài)碼:413
含義:請(qǐng)求體超過(guò)服務(wù)器允許的最大值
常見場(chǎng)景:
用戶上傳過(guò)大的圖片、視頻或壓縮文件
POST/PUT 請(qǐng)求發(fā)送大量 JSON 或表單數(shù)據(jù)
批量操作接口一次性傳遞大量數(shù)據(jù)
簡(jiǎn)言之,就是請(qǐng)求的數(shù)據(jù)量超過(guò)了服務(wù)器的處理限制。
二、HTTP 413 是誰(shuí)返回的?
413 并不是瀏覽器主動(dòng)報(bào)的,實(shí)際上是 服務(wù)器或代理返回的。
Web 服務(wù)器或代理
Nginx、Apache、Cloudflare 等可以配置請(qǐng)求體大小限制
超過(guò)限制時(shí),直接返回 413,不會(huì)進(jìn)入后端應(yīng)用
后端框架
Express、Koa、Spring 等框架解析請(qǐng)求體時(shí),也可能根據(jù)配置返回 413
瀏覽器的作用
瀏覽器只負(fù)責(zé)發(fā)送請(qǐng)求
如果服務(wù)器拒絕,瀏覽器拿到響應(yīng)狀態(tài)碼
瀏覽器本身不會(huì)“自動(dòng)報(bào) 413”
三、可以手動(dòng)修改 413 狀態(tài)碼嗎?
如果你自己寫服務(wù)端邏輯,是可以手動(dòng)修改返回狀態(tài)碼的。
前提是 請(qǐng)求體沒(méi)有觸發(fā)服務(wù)器或框架的自動(dòng)限制
例如在 Node.js + Express 中:
const express = require('express');
const app = express();
// 自定義 body 限制
app.use(express.json({ limit: '100mb' }));
app.post('/upload', (req, res) => {
const data = req.body;
// 即使請(qǐng)求很大,也可以不返回 413
if (data.size > 50 * 1024 * 1024) {
return res.status(200).json({ message: '文件太大,但我選擇不返回 413' });
}
res.send('上傳成功');
});
app.listen(3000);注意事項(xiàng):
如果框架限制了請(qǐng)求體大小,超出限制的請(qǐng)求在解析階段就會(huì)報(bào)錯(cuò),無(wú)法手動(dòng)修改。
最好結(jié)合前端校驗(yàn),避免一次性請(qǐng)求過(guò)大占用服務(wù)器資源。
四、前端如何處理 413
前端主要從 請(qǐng)求控制 和 用戶體驗(yàn) 兩個(gè)方面應(yīng)對(duì) 413:
限制文件大小
const maxFileSize = 50 * 1024 * 1024; // 50MB
function handleFileUpload(file) {
if (file.size > maxFileSize) {
alert('文件過(guò)大,請(qǐng)上傳不超過(guò) 50MB 的文件');
return;
}
// 繼續(xù)上傳邏輯
}分片上傳
利用
Blob.slice或第三方庫(kù)(如tus-js-client)分片上傳每片上傳完成后,服務(wù)器合并
前端壓縮
對(duì)圖片、視頻等進(jìn)行壓縮,減少請(qǐng)求體大小
統(tǒng)一錯(cuò)誤處理
axios.post('/upload', file)
.catch(error => {
if (error.response?.status === 413) {
alert('上傳內(nèi)容過(guò)大,請(qǐng)嘗試壓縮或分片上傳');
}
});五、上傳文件大小的上限
理論上瀏覽器上傳沒(méi)有硬性上限
限制主要來(lái)自:
服務(wù)器或代理配置(如 Nginx 默認(rèn) 1MB)
后端框架請(qǐng)求體限制
瀏覽器在內(nèi)存或網(wǎng)絡(luò)受限的情況下,上傳非常大的文件可能失敗
最佳實(shí)踐:
前端限制文件大小
對(duì)大文件進(jìn)行分片上傳或壓縮
使用專業(yè)的上傳服務(wù)(OSS、S3 等)
六、總結(jié)
413 表示請(qǐng)求體過(guò)大,通常用于上傳或大數(shù)據(jù)請(qǐng)求
狀態(tài)碼由服務(wù)器或框架返回,瀏覽器不會(huì)自動(dòng)報(bào)錯(cuò)
自己寫服務(wù)端可以手動(dòng)修改狀態(tài)碼,但要注意框架或代理限制
上傳文件默認(rèn)沒(méi)有上限,實(shí)際上限取決于服務(wù)器配置、內(nèi)存和網(wǎng)絡(luò)狀況
前端處理:
限制大小
分片上傳
壓縮處理
捕獲 413 并給出友好提示
合理結(jié)合前端與后端的控制,可以有效避免 413 錯(cuò)誤,同時(shí)提升用戶體驗(yàn)。
到此這篇關(guān)于HTTP 413狀態(tài)碼詳解與前端處理請(qǐng)求體過(guò)大的文章就介紹到這了,更多相關(guān)HTTP 413狀態(tài)碼詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入解析HetuEngine實(shí)現(xiàn)On Yarn原理
這篇文章主要介紹了HetuEngine實(shí)現(xiàn)On Yarn原理,介紹了HetuEngine On Yarn的原理,其實(shí)現(xiàn)主要是借助了Yarn Service提供的能力,感興趣的朋友一起通過(guò)本文學(xué)習(xí)下2022-01-01
Mac下更換Homebrew鏡像源的實(shí)現(xiàn)方法
本文主要介紹了Mac下更換Homebrew鏡像源的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07
在小程序中實(shí)現(xiàn)ChatGPT?聊天打字兼自動(dòng)滾動(dòng)效果
ChatGPT已經(jīng)長(zhǎng)時(shí)間大火,未來(lái)將會(huì)是AI的天下,們需要更多地學(xué)習(xí)和掌握AI,而不是被AI所取代,在?ChatGPT?的背景下,我們今天來(lái)聊聊在小程序中怎么實(shí)現(xiàn)類似?chatGPT?的聊天打字效果,并且實(shí)現(xiàn)滾動(dòng)效果2023-06-06
VSCode遠(yuǎn)程連接其他主機(jī)的WSL2的問(wèn)題
這篇文章主要介紹了VSCode遠(yuǎn)程連接其他主機(jī)的WSL2的問(wèn)題,在 Windows 10 上開啟 SSH Server 服務(wù),設(shè)置 SSH 連接使用的默認(rèn) Shell,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-07-07
vscode任務(wù)配置之tasks.json用途說(shuō)明
這篇文章主要介紹了vscode任務(wù)配置之tasks.json的相關(guān)資料,在VSCode中配置任務(wù)主要涉及到編輯task.json文件,可以定義編譯、構(gòu)建、測(cè)試等任務(wù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01

