日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

fetchEventSource與fetch流式請(qǐng)求實(shí)戰(zhàn):AbortSignal復(fù)用引發(fā)的failed to fetch排查

fetchEventSource與fetch流式請(qǐng)求實(shí)戰(zhàn):AbortSignal復(fù)用引發(fā)的failed to fetch排查 1. 先交代背景我是怎么踩進(jìn)這個(gè)坑的最近在做一個(gè) AI 對(duì)話前端改造需要把大模型回答從“等半天一次性吐出來(lái)”改成“邊生成邊渲染”的流式效果。需求本身不復(fù)雜但落地時(shí)卻讓我在fetchEventSource和原生fetch之間反復(fù)橫跳折騰了整整兩天。最崩潰的一條報(bào)錯(cuò)長(zhǎng)這樣failed to fetch dynamically im 無(wú)法加載 agent 預(yù)設(shè) client api: agentpresets/list failed: failed to fetch明明上一秒接口還能通換掉請(qǐng)求方式之后水靈靈地就開(kāi)始failed to fetch而且只有流式相關(guān)接口跪了普通 JSON 接口一切正常。后來(lái)我把整套鏈路從瀏覽器到服務(wù)端到 SSL 全查了一遍最后才發(fā)現(xiàn)問(wèn)題不是網(wǎng)絡(luò)不是網(wǎng)關(guān)而是我跟fetchEventSource之間有層“沒(méi)有說(shuō)透的窗戶紙”。這篇文章不打算寫那種“fetchEventSource 比 fetch 好”的結(jié)論帖而是想把我這次真實(shí)的排查過(guò)程拆開(kāi)講清楚兩個(gè)東西在流式場(chǎng)景下的本質(zhì)區(qū)別。如果你也在做 SSE 流式輸出、大模型實(shí)時(shí)渲染或者遇到failed to fetch、agentpresets/list failed、abort被莫名觸發(fā)這類報(bào)錯(cuò)這篇文章里的排查思路和結(jié)論應(yīng)該能幫你少走不少?gòu)澛?。先說(shuō)結(jié)論要點(diǎn)原生fetch支持讀流但它只是“給了你水管”fetchEventSource則是一套完整的水泵系統(tǒng)。兩者在流式場(chǎng)景下的區(qū)別主要集中在四個(gè)地方——事件解析、斷線重連、請(qǐng)求頭約束、以及中止信號(hào)的語(yǔ)義。搞懂這四點(diǎn)幾乎所有流式報(bào)錯(cuò)都能定位。2. 重新認(rèn)識(shí)兩個(gè)讀取方式fetchEventSource 與 fetch 的本質(zhì)差別2.1 原生 fetch 的流式是“給了水管但沒(méi)給你水泵”原生fetch從很早開(kāi)始就支持讀取流式響應(yīng)了核心就三個(gè) APIconst response await fetch(/api/chat, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ prompt: 你好 }), }); const reader response.body.getReader(); const decoder new TextDecoder(); let buffer ; while (true) { const { value, done } await reader.read(); if (done) break; buffer decoder.decode(value, { stream: true }); // 自己解析 buffer 里的數(shù)據(jù) // SSE 格式通常是data: {content:xxx}\n\n const events buffer.split(\n\n); buffer events.pop(); for (const event of events) { const dataLine event.startsWith(data:) ? event.slice(5).trim() : ; if (dataLine dataLine ! [DONE]) { const json JSON.parse(dataLine); renderContent(json.content); } } }你看原生fetch其實(shí)完全能干這事。它把response.body變成了一個(gè)ReadableStream你每次reader.read()拿到一塊 Uint8Array然后自己解碼、自己切分、自己解析事件。也就是說(shuō)原生 fetch 的能力邊界是“給你一根水管水流過(guò)來(lái)你自己接”。這里能滿足基本的流式需求而且足夠輕量。但問(wèn)題在于它太“原生”了很多坑留給了使用者。比如SSE 協(xié)議規(guī)定事件之間用空行分隔但網(wǎng)絡(luò)分包可能把一個(gè)事件切成兩半你得自己維護(hù) buffer如果服務(wù)端發(fā)了注釋行以:開(kāi)頭的行用于心跳?;钅愕米约禾^(guò)斷線了不會(huì)自動(dòng)重連得自己寫重試邏輯請(qǐng)求頭雖然隨便你加但服務(wù)端 CORS 是否會(huì)暴露、預(yù)檢請(qǐng)求能否通過(guò)依然要自己處理。這些“自己來(lái)”的部分看著都不難但疊加在一起就是典型的多處邏輯交織、邊界問(wèn)題頻發(fā)的狀態(tài)。我第一次用原生 fetch 寫流式60 行代碼里有 30 行都在處理字符串切分和異常兜底。2.2 fetchEventSource可以理解為“配備了泵、閥門和儀表盤的成套方案”fetchEventSource是微軟出的一個(gè)庫(kù)本質(zhì)是在fetch之上做了一層封裝專門針對(duì) SSE 流式場(chǎng)景。它解決的核心痛點(diǎn)是EventSource天然只支持 GET不能用 POST 傳業(yè)務(wù)參數(shù)也不能自定義請(qǐng)求頭比如帶上 Authorization 令牌而 AI 對(duì)話類接口幾乎都是 POST JSON 鑒權(quán)頭。fetchEventSource用fetch重新實(shí)現(xiàn)了 SSE 的完整行為保留了 EventSource 的事件語(yǔ)義同時(shí)突破了它的請(qǐng)求約束。它的基本用法很短import { fetchEventSource } from microsoft/fetch-event-source; const ctrl new AbortController(); await fetchEventSource(/api/chat, { method: POST, headers: { Content-Type: application/json, Authorization: Bearer ${token}, }, body: JSON.stringify({ prompt: 你好 }), signal: ctrl.signal, openWhenHidden: true, // 頁(yè)面隱藏時(shí)保持連接 async onopen(response) { if (response.ok) { console.log(連接建立狀態(tài)碼, response.status); } else { throw new Error(HTTP ${response.status}); } }, onmessage(event) { const data JSON.parse(event.data); renderContent(data.content); }, onclose() { console.log(流正常關(guān)閉); }, onerror(error) { console.error(流異常嘗試重連, error); // 返回非 void 時(shí)庫(kù)會(huì)自動(dòng)重連 // 如果不想重連可以 throw error }, });這套 API 看起來(lái)清爽多了。onmessage幫你把 SSE 的data:行解析好event.data直接就是內(nèi)容onerror里返回一個(gè)值庫(kù)會(huì)幫你做自動(dòng)重連連接建立、打開(kāi)、失敗、關(guān)閉全都有回調(diào)鉤子。還有openWhenHidden這個(gè)參數(shù)處理了頁(yè)面切換 Tab 時(shí)瀏覽器對(duì)連接的限制原生 EventSource 在這個(gè)場(chǎng)景下有個(gè)痛點(diǎn)是隱藏頁(yè)面會(huì)掛起這庫(kù)能繞開(kāi)。用一句生活化的話說(shuō)原生 fetch 給你一根水管讓你自己裝水泵、裝水表、裝閥門fetchEventSource直接交付一套集成好的供水系統(tǒng)你只需要打開(kāi)龍頭。2.3 為什么說(shuō)“自定義 header”是分水嶺很多人在選型時(shí)糾結(jié)“為什么不用 EventSource它不也是 SSE 嗎”——這就是沒(méi)踩過(guò)真實(shí)需求場(chǎng)景才會(huì)有的疑問(wèn)。原生EventSource的問(wèn)題非常致命它不能帶自定義請(qǐng)求頭。你拿它調(diào)一個(gè)需要Authorization的私有化模型接口直接就是 401 甚至跨域預(yù)檢失敗?,F(xiàn)在不少 LLM 網(wǎng)關(guān)還要求請(qǐng)求里帶api-key、trace-id這玩意兒根本塞不進(jìn)去。所以這時(shí)候有兩類選擇用原生fetch自己解析流請(qǐng)求頭管夠代價(jià)是解析邏輯、斷線重連、心跳保護(hù)全手寫用fetchEventSource它內(nèi)部用 fetch 實(shí)現(xiàn)自定義 header、POST body 都支持同時(shí)把 SSE 協(xié)議的上層語(yǔ)義補(bǔ)齊。我在這次改造里選的是fetchEventSource理由很簡(jiǎn)單——我們的服務(wù)端網(wǎng)關(guān)要求每個(gè)流請(qǐng)求都帶內(nèi)部api-key和request-id原生 EventSource 直接出局而項(xiàng)目里又要求快速交付手寫解析器的維護(hù)成本不低用一個(gè)成熟封裝更穩(wěn)妥。但正是這次選型讓一個(gè)問(wèn)題暴露出來(lái)fetchEventSource太好用了以至于讓我忽略了它內(nèi)部對(duì)“錯(cuò)誤響應(yīng)”和“連接中止”有一套自己的處理邏輯而這套邏輯在某些場(chǎng)景下和原生fetch的語(yǔ)義完全不一致。3. 真實(shí)踩坑過(guò)程一次 agent 預(yù)設(shè)加載失敗引發(fā)的排查3.1 現(xiàn)象復(fù)盤先還原一下我當(dāng)時(shí)的場(chǎng)景。項(xiàng)目里有一個(gè)“智能體預(yù)設(shè)列表”的接口/api/agentpresets/list用來(lái)給對(duì)話頁(yè)加載可選的 AI 角色。這不是個(gè)大模型流式接口而是普通參數(shù)列表接口。但當(dāng)時(shí)前端統(tǒng)一把這類接口從fetch切換成了fetchEventSource——因?yàn)槲姨煺娴匾詾椤凹热欢际亲?HTTP統(tǒng)一封裝組件最省事”。切換之后一連串接口開(kāi)始報(bào)錯(cuò)failed to fetch 無(wú)法加載 agent 預(yù)設(shè) client api: agentpresets/list failed: failed to fetch注意最后一次報(bào)錯(cuò)這是瀏覽器終端的原始信息翻譯過(guò)來(lái)就是fetch在請(qǐng)求還沒(méi)有拿到任何響應(yīng)頭之前連接就被中止了。因?yàn)閒etchEventSource的onopen回調(diào)只有在收到響應(yīng)頭之后才會(huì)觸發(fā)而這次請(qǐng)求連這一步都沒(méi)走到。我第一反應(yīng)是服務(wù)端掛了。于是用 Postman 直接打同一個(gè)接口200秒回?cái)?shù)據(jù)完整。再用 curl 打200一切正常。那么問(wèn)題就出在前端請(qǐng)求本身。3.2 排查鏈路我按下面這個(gè)順序排除寫下來(lái)給同樣踩坑的人參考第一層看請(qǐng)求是否真正發(fā)出。打開(kāi) DevTools 的 Network 面板在agentpresets/list請(qǐng)求上右鍵復(fù)制為 curl命令行跑一遍。如果 curl 能通說(shuō)明服務(wù)端、網(wǎng)關(guān)、SSL 都沒(méi)問(wèn)題。剩下的問(wèn)題集中在瀏覽器環(huán)境和請(qǐng)求庫(kù)。第二層查 CORS 和預(yù)檢。我們的接口帶Authorization和api-key自定義頭瀏覽器會(huì)先發(fā)一個(gè)OPTIONS預(yù)檢請(qǐng)求???Network 面板里是否有預(yù)檢請(qǐng)求預(yù)檢是否返回了正確的Access-Control-Allow-Headers這一步很關(guān)鍵因?yàn)閒etchEventSource內(nèi)部即使設(shè)置了 headers如果服務(wù)端沒(méi)放行這些自定義頭請(qǐng)求在預(yù)檢階段就被瀏覽器攔截了表現(xiàn)就是failed to fetch。這個(gè)坑非常經(jīng)典尤其是從 Postman 測(cè)不出問(wèn)題的情況下十有八九卡在這。第三層查代理層和網(wǎng)關(guān)是否對(duì)流式請(qǐng)求做了特殊處理。我們服務(wù)端有個(gè) Nginx 網(wǎng)關(guān)檢查proxy_read_timeout、proxy_buffering這類配置。如果proxy_buffering開(kāi)著SSE 流的響應(yīng)會(huì)被 Nginx 攢著不吐客戶端遲遲收不到第一個(gè)字節(jié)容易觸發(fā)表層超時(shí)。雖然這里報(bào)的是“預(yù)設(shè)列表”接口但網(wǎng)關(guān)是統(tǒng)一入口配置影響所有接口。第四層查 AbortController 與頁(yè)面生命周期。我們的對(duì)話頁(yè)在組件卸載時(shí)會(huì)調(diào)用ctrl.abort()取消未完成的流式請(qǐng)求。如果請(qǐng)求時(shí)序上組件先卸載、請(qǐng)求后返回那么 abort 信號(hào)會(huì)導(dǎo)致 fetch 以AbortError結(jié)束最終同樣表現(xiàn)為failed to fetch。這個(gè)在所有異步請(qǐng)求中都可能發(fā)生屬于經(jīng)典競(jìng)態(tài)。四層查完前三層都沒(méi)問(wèn)題第四層嫌疑最大。于是我打開(kāi) Network 面板盯著預(yù)設(shè)列表請(qǐng)求的 timing發(fā)現(xiàn) Grunt 一個(gè)巧合這個(gè)接口發(fā)出的時(shí)機(jī)和上一個(gè)流式請(qǐng)求 abort 的時(shí)機(jī)幾乎重疊。3.3 根因定位到這里真相就比較清晰了。我們的對(duì)話頁(yè)切換 agent 預(yù)設(shè)時(shí)會(huì)先abort()上一個(gè)流式請(qǐng)求再發(fā)起新的預(yù)設(shè)列表請(qǐng)求。而fetchEventSource有個(gè)重要特性它內(nèi)部維護(hù)的是同一個(gè)AbortSignal信號(hào)鏈。如果你在fetchEventSource的選項(xiàng)里傳入某個(gè)signal它內(nèi)部的所有重連嘗試都會(huì)復(fù)用這個(gè)信號(hào)。問(wèn)題出在我沒(méi)有為每次請(qǐng)求創(chuàng)建獨(dú)立的AbortController而是模板里復(fù)用了同一個(gè)。第一次請(qǐng)求 abort 后這個(gè) controller 的 signal 狀態(tài)變成了aborted接下來(lái)所有復(fù)用這個(gè) signal 的請(qǐng)求fetch 都會(huì)立即拒絕根本不會(huì)發(fā)出網(wǎng)絡(luò)請(qǐng)求。換句話說(shuō)fetchEventSource的signal一旦 abort 就永久失效它是“一次性信號(hào)”。而原生fetch遇到同樣的情況也一樣是被 abort 拉住——這不算 fetchEventSource 獨(dú)有的問(wèn)題但因?yàn)閒etchEventSource內(nèi)部消息循環(huán)和重連機(jī)制的存在這種“被 abort 拒絕”的請(qǐng)求其錯(cuò)誤信息里沒(méi)有明確的AbortError標(biāo)記而是被轉(zhuǎn)換成了TypeError: Failed to fetch所以排查時(shí)很容易誤判成網(wǎng)絡(luò)問(wèn)題。再進(jìn)一步看為什么這個(gè)報(bào)錯(cuò)會(huì)串到agentpresets/list這樣完全無(wú)關(guān)的接口上就是因?yàn)槲野淹粋€(gè)AbortController傳給了所有接口請(qǐng)求。表面上代碼是這個(gè)樣子的// 錯(cuò)誤示范所有請(qǐng)求復(fù)用一個(gè) controller const sharedController new AbortController(); async function loadPresets() { await fetchEventSource(/api/agentpresets/list, { signal: sharedController.signal, onmessage(msg) { /* 處理 */ }, }); } async function chatStream() { await fetchEventSource(/api/chat, { signal: sharedController.signal, onmessage(msg) { /* 處理 */ }, }); }一旦某個(gè)環(huán)節(jié)調(diào)用了sharedController.abort()后面再發(fā)的任何復(fù)用請(qǐng)求都不再有意義。這不是fetchEventSource的問(wèn)題而是我對(duì)“AbortSignal 是一次性狀態(tài)”這個(gè)底層語(yǔ)義理解不到位——所以我在標(biāo)題里強(qiáng)調(diào)這是一次“本質(zhì)區(qū)別”本質(zhì)不是 API 長(zhǎng)什么樣而是狀態(tài)語(yǔ)義。修復(fù)辦法非常簡(jiǎn)單每次請(qǐng)求都 new 一個(gè)獨(dú)立的AbortControllerasync function loadPresets() { const ctrl new AbortController(); await fetchEventSource(/api/agentpresets/list, { signal: ctrl.signal, onmessage(msg) { /* 處理 */ }, }); } async function chatStream() { const ctrl new AbortController(); await fetchEventSource(/api/chat, { signal: ctrl.signal, onmessage(msg) { /* 處理 */ }, }); }如果你真的需要在某個(gè)頁(yè)面級(jí)別統(tǒng)一取消所有請(qǐng)求也建議維護(hù)一個(gè) controller 集合而不是共用一個(gè)AbortController。每次請(qǐng)求創(chuàng)建獨(dú)立 controller頁(yè)面卸載時(shí)統(tǒng)一調(diào)用集合里的abort()。注意AbortSignal一旦進(jìn)入 aborted 狀態(tài)是無(wú)法恢復(fù)的。你沒(méi)法把同一個(gè) signal 取消后再?gòu)?fù)用。這是 web 平臺(tái)的固定語(yǔ)義跟庫(kù)無(wú)關(guān)。4. 避坑經(jīng)驗(yàn)與報(bào)錯(cuò)速查表4.1 選型建議什么時(shí)候用 fetchEventSource什么時(shí)候用原生 fetch這次踩坑之后我把“流式讀取”的選型標(biāo)準(zhǔn)重新梳理了一遍。沒(méi)有哪個(gè)方式是絕對(duì)正確的只有更適合你當(dāng)前場(chǎng)景的。場(chǎng)景推薦方式原因大模型對(duì)話需要 POST 自定義 header SSEfetchEventSource自動(dòng)解析事件、自動(dòng)重連、支持 POST 和 header后端就是標(biāo)準(zhǔn) GET SSE比如某些開(kāi)源消息推送原生EventSource瀏覽器原生能力不需要引庫(kù)天然支持自動(dòng)重連只需要非常輕量的單次響應(yīng)讀取不關(guān)心重連原生fetchReadableStream依賴少代碼可控涉及復(fù)雜的多遍流處理、事件類型多樣、需要精細(xì)控制每類事件fetchEventSource它的onopen/onmessage/onerror/onclose鉤子比原生fetch的裸流處理清晰得多項(xiàng)目對(duì)依賴包體積極其敏感原生fetch少一個(gè)運(yùn)行時(shí)依賴打包體積自然減小我個(gè)人的經(jīng)驗(yàn)是如果你在做 AI 對(duì)話類功能第一選擇就是fetchEventSource。它讓你把精力花在業(yè)務(wù)邏輯上不用每次糾結(jié)字符串切拆和心跳處理。但代價(jià)是——它是個(gè)封裝層你踩的坑往往不是它本身不夠好而是你沒(méi)搞懂它背后依賴的底層語(yǔ)義比如 AbortSignal 的一次性特性、自動(dòng)重連可能帶來(lái)的重復(fù)數(shù)據(jù)問(wèn)題。4.2 常見(jiàn)報(bào)錯(cuò)速查表把這次項(xiàng)目里遇到的和網(wǎng)上高頻出現(xiàn)的問(wèn)題整理成了一張速查表按failed to fetch相關(guān)錯(cuò)誤類型和排查路徑給出來(lái)報(bào)錯(cuò)關(guān)鍵詞可能原因排查順序failed to fetch跨域預(yù)檢失敗、服務(wù)端未響應(yīng)、連接被 abort、網(wǎng)關(guān) buffer1. Network 復(fù)制 curl 驗(yàn)證服務(wù)端 2. 檢查 OPTIONS 預(yù)檢 3. 檢查 body 是否被 abortfailed to fetch dynamically只用于動(dòng)態(tài)導(dǎo)入和運(yùn)行時(shí) fetch 無(wú)直接關(guān)系但報(bào)錯(cuò)前常伴隨網(wǎng)絡(luò)不可達(dá)或單頁(yè)應(yīng)用資源加載失敗檢查靜態(tài)資源 CDN 可達(dá)性、路由目錄是否正確agentpresets/list failed: failed to fetch請(qǐng)求被 AbortSignal 攔截、或者自定義 header 未通過(guò) CORS重點(diǎn)查 AbortController 是否被復(fù)用、預(yù)檢響應(yīng)頭connect econnrefused服務(wù)端端口未監(jiān)聽(tīng)、防火墻攔截、服務(wù)未啟動(dòng)curl -v看握手過(guò)程檢查服務(wù)日志failed to fetch version from claude.ai這是某些工具在檢測(cè)網(wǎng)絡(luò)或版本源時(shí)的通用錯(cuò)誤多數(shù)和代理/證書/網(wǎng)絡(luò)隔離相關(guān)換網(wǎng)絡(luò)源看是否能通檢查系統(tǒng)代理設(shè)置git fetch或git pull很慢緩沖區(qū)容量、協(xié)議差異、DNS 解析慢git config --global http.postBuffer調(diào)大檢查https.sslVerifyVS Code 服務(wù)器failed to fetch遠(yuǎn)程環(huán)境下載 server 包失敗手動(dòng)下載vscode-server-linux-x64.tar.gz放到指定目錄這里必須強(qiáng)調(diào)failed to fetch是前端最常見(jiàn)但又最沒(méi)有信息量的錯(cuò)誤。小技巧是在onerror回調(diào)里加一層錯(cuò)誤轉(zhuǎn)換把error.name和error.message都打出來(lái)。如果error.name AbortError說(shuō)明是主動(dòng)中止如果error.message含NetworkError說(shuō)明是連接層面的問(wèn)題如果是TypeError: Failed to fetch但實(shí)際請(qǐng)求沒(méi)有發(fā)出大概率是 CORS 或 signal 問(wèn)題。這一手能在你上 DevTools 之前先快速縮小范圍。另外一個(gè)小技巧如果你需要排查“請(qǐng)求到底有沒(méi)有發(fā)到服務(wù)器”可以在組件里臨時(shí)給fetchEventSource加一個(gè)onopen回調(diào)onopen(response) { console.log(HTTP 狀態(tài), response.status, 說(shuō)明服務(wù)端已收到請(qǐng)求); }只要onopen執(zhí)行了說(shuō)明服務(wù)端已返回響應(yīng)頭問(wèn)題不在“服務(wù)端沒(méi)收到請(qǐng)求”。如果onopen一直不執(zhí)行那就是請(qǐng)求沒(méi)到服務(wù)端優(yōu)先查 CORS、DNS、證書、signal。這個(gè)“響應(yīng)頭是否返回”的判斷思路能把你從“服務(wù)端到底通沒(méi)通”的泥潭里拉出來(lái)。4.3 一個(gè)額外的坑重連造成的重復(fù)數(shù)據(jù)除了 AbortSignal 的坑fetchEventSource自動(dòng)重連機(jī)制還會(huì)帶來(lái)另一個(gè)問(wèn)題斷線重連后消息可能重復(fù)。比如你調(diào)大模型接口流式返回了一部分內(nèi)容后網(wǎng)絡(luò)閃斷fetchEventSource會(huì)自動(dòng)重連并重新發(fā)送請(qǐng)求。如果服務(wù)端沒(méi)有做“斷點(diǎn)續(xù)傳”或者“請(qǐng)求去重”那前端就會(huì)再次收到從第一條開(kāi)始的內(nèi)容界面上就出現(xiàn)了重復(fù)的渲染。我當(dāng)時(shí)調(diào)的是一個(gè)內(nèi)部 LLM 網(wǎng)關(guān)網(wǎng)關(guān)并不緩存歷史輸出重連后從零開(kāi)始生成前端渲染里就出現(xiàn)了兩遍回答拼接的詭異效果。這類問(wèn)題的處理思路有兩個(gè)方向前端做消息冪等靠event.id或遞增序號(hào)重復(fù)內(nèi)容直接丟棄重連后讓用戶手動(dòng)確認(rèn)“是否繼續(xù)上次回答”而不是無(wú)感重放。對(duì)于 AI 對(duì)話這種場(chǎng)景自動(dòng)重連不總是好事。服務(wù)端生成狀態(tài)已經(jīng)在第一輪請(qǐng)求里消耗過(guò)一遍了重連不是在“繼續(xù)生成”而是在“重新生成”此時(shí)自動(dòng)重連反而制造混亂。所以我后來(lái)把onerror改成了手動(dòng)控制onerror(err) { // 打印原始錯(cuò)誤 console.error(流產(chǎn)生錯(cuò)誤, err.name, err.message); // 如果是 AbortError說(shuō)明是用戶/組件主動(dòng)中止不重連 if (err.name AbortError) { throw err; } // 其他錯(cuò)誤默認(rèn)自動(dòng)重連這里不返回具體值即可 // 如果你希望手動(dòng)控制直接 throw 出去 throw err; }實(shí)際項(xiàng)目里我會(huì)區(qū)分錯(cuò)誤類型來(lái)決策是否重連。主動(dòng) abort 的重試毫無(wú)意義網(wǎng)絡(luò)抖動(dòng)且服務(wù)端支持冪等時(shí)自動(dòng)重連才值得開(kāi)。這樣的決策能力是裸fetch和fetchEventSource都很難替你做主的都需要你對(duì)業(yè)務(wù)流有清晰判斷。5. 寫在最后的個(gè)人體會(huì)這次踩坑讓我最深的感受是凡是封裝良好的庫(kù)都會(huì)在“易用性”和“可控性”之間做選擇。fetchEventSource把 SSE 流式處理中繁瑣的部分——事件解析、重連、打開(kāi)關(guān)閉回調(diào)——全封裝了這是它的價(jià)值但這也意味著你對(duì)底層fetch行為、AbortSignal 語(yǔ)義、甚至是 HTTP 連接生命周期的理解成了你能不能用好它的關(guān)鍵。踩過(guò)幾次坑之后我現(xiàn)在寫流式請(qǐng)求代碼時(shí)一定會(huì)遵循幾個(gè)鐵律每個(gè)AbortController只服務(wù)一個(gè)請(qǐng)求絕不復(fù)用onerror里至少要打一行錯(cuò)誤日志包含error.name和error.messageonopen回調(diào)里記錄 HTTP 狀態(tài)碼方便日后判斷問(wèn)題在“服務(wù)端”還是“連接”服務(wù)端要支持冪等時(shí)再開(kāi)自動(dòng)重連否則必須在業(yè)務(wù)層做去重依賴包升級(jí)后重新過(guò)一遍openWhenHidden、signal、onerror的默認(rèn)行為是否變化。如果讓我對(duì)正在做 AI 應(yīng)用、或者準(zhǔn)備做流式渲染的朋友說(shuō)一句掏心窩的話別急著把所有接口都換到fetchEventSource它不是萬(wàn)能的也別因?yàn)橐淮蝔ailed to fetch就退回原生 fetch那個(gè)坑更大。先想清楚你的業(yè)務(wù)究竟需要什么控制粒度再?zèng)Q定用哪把工具。最后再分享一個(gè)我在排查任何failed to fetch時(shí)的定式先看error.name再看onopen是否執(zhí)行然后復(fù)制 curl 驗(yàn)證服務(wù)端最后檢查 CORS 預(yù)檢和 AbortSignal 狀態(tài)。按這個(gè)順序走目前我還沒(méi)遇到定位不出來(lái)的failed to fetch。希望這篇踩坑記錄能幫你少熬一個(gè)夜。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
青青久久久| 天天舔日美女视频| 亚洲毛片久久| 亚洲成?V人片在线观看福利| 九九九九日本| 日韩免费在线视频观看| 久久夜嗨| 精品人妻免费观看| 欧美少妇熟女| 美女高潮国产高清| 中文字幕性感少妇av| 欧美 日韩 国产传媒| 欧美乱欲| 五月丁香成人网| 超碰到97情色| 一区二区影院| 国产久久久9999| 精品免费囯产一区二区三区| 久久久97| 国产蜜臀在线| 操人妻少妇中文| 久草色在线观看| 人人艹亚洲| 伊人久久大香蕉线AV五月天| 顶级丝袜熟女一区二区三区| 日本精品九九九| 中文字幕乱在线伦视频中文字幕乱码在线 | 天天做日日爱夜夜爽| 日韩少妇无吗| 亚洲一区二区三区中文字幕| 亚洲好色人妻| 九九九九九九九九九九九免费国产| 国产伦精品| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 亚洲欧美伦综合| 天天干少妇| 成人九九| 区一在线观看| 久久精品国产亚洲妲己影视| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 欧美日韩国产高清在线一二三区 | 国产AAAAAABBBBB| 青娱乐亚洲热| 黄色大片免费在线| 少妇精品久久久| 午夜福利精品| 色欲久久99国产精品久久久久久| 国产精品久久发布| 成人乱人伦一区二区| 91挑色欧美| 国产精品视频一区二区三区八戒| 欧美色爱综合| 成人AV素股で擦久久| 丁香婷婷五月| 九九亚洲| 91高清日| 欧亚乱色熟一区二区三四区| 99re在线观看| 精品一二三区久久AAA片| 久久中文字幕人妻熟av女蜜柚| 美日韩成人| 日本久久女同性恋视频| 91精品操美女| 亚洲情色1区| 在线色导航| 99这里都是精品| 蜜乳av首页| 久久久久九九九九| 夜夜做夜夜爽精品视频| 熟妇人妻一区二区三区| 国产综合网站在线播放| 91丝袜在线观看| 妇人噜噜| 91女在线观看| 亚洲精品成人动漫在线| 亚洲中字慕不卡| 69综合网| www.91色| 日本女优在线视频福利| 中文字幕第9页萱萱影音先锋| 涩涩久久精品| 国产精品肉丝自拍| 99这里有精品视频| 久久久久久国产手机AV| 人妻一区视频| 天天草夜夜草高潮片| 色香网| 中文字幕一区二区三区人妻少妇在线| 熟女突然公开看18禁影片 | 91美女国产在线| 成人AV素股で擦久久| 手机在线观看不卡无码av| 欧美亚洲情色| 97在线免费看视频| 国产天天噜一噜久久久| 久热69九色熟妇97| 美腿丝袜偷拍亚洲欧美| ,国产乱人伦精品一区二区三区| 自拍大香蕉乱插| 大香蕉乱级| 一本久久久精品| 超碰这里只有精品| 欧洲亚洲天堂精品 | 欧美性爱另类综合| 国产亚州高清国产拍精| 日本三级大片| 人妻中文在线| 日本色色色| A 天堂在线观看视频| 国产三级在线现体验区| 免费自拍三级综合| 美国精品国产精品| 中国zzijzzijzzwww精品| 在线视频免费观看午夜| 啊啊啊想要| 91操熟女视频| 亚州欧美在线| 国产极品粉嫩馒头一线天av| 欧洲综合无码| 懂色av色欲av蜜臀av| 久久久精品91八戒| 色网在线视频观看免费| 日本操大逼| 综合久久久久久久久91| 国产精品自在自拍视频| 凸凹视频在线观看| 无码WWW免费视频网站| 天天艹天天日| 亚欧性爱ab| 欧美中出1| 欧美成人性爱视频大全| 久久丁香五月婷婷| 四虎AV影视国产精品亚洲精品| 日日夜夜天天| 九九精品美女高溯喷水| 人人澡综合涩| 久久中文字幕人妻熟av女蜜柚| 一级免费精品| 黄片qw| 懂色av色欲av蜜臀av| 综合操逼| 吻戏激情性巴克| 午夜精品99久久久久传媒| 日韩精品99999| 日韩熟女精品无码专区一区二区 | 成年人黄色小视频网站| 亚洲精品久久久久久久蜜桃臀| 国产女人91精品嗷嗷嗷嗷| 五月丁香婷婷色| 26uuu国产| 六九九九| 中文字幕AV片| 天天综合色图| 乱伦av麻豆| 97人人模人人爽人人| 920日本午夜免费| 日产国产精品中文久久婷婷| 十八禁电影伊人网| 视频国产欧美在线播放| 爽 好舒服 无码刺激久久| 激情自拍 校园春色| 久久、1234| 97伦综合| 国产97视频免费观看| 花野真衣| 亚洲精品欧洲色| 国产美女销魂在线观看不卡| 蜜桃在线观看一区二区三区| 精品二区久久| 无码操逼视频一下| 青娱乐日韩无码| 碰碰在线视频| 日本高清一本二本免费不卡| 八戒午夜福利理论片| 无码 有码 国产18p| 97人肏| 青青草视频爽一爽| 无套后入双马尾| 搞中出久久| 天天综合网~69| 九九综合网| 91精品人妻一品二品三品| 777琪琪午夜免费A片| 婷婷五月天成人网| 久久久久久久9最新免费视频观看| 欧美性爱一区二区三区| 岛国视频一二三区| 91蜜臀在线久久久久| 亚州国产成人精品女人久久 | 亚洲不卡av在线| 欧美九九九| 久久国内| 色哟哟av| 大香蕉一区二区在线观看.| 桃花色涩综合影院| 蜜臀av网址| 久久国产AⅤ| 香蕉在线一区二区三区| 欧美激情高清性猛交| 少妇xx精品| 久久久婷| 亚洲色图尤物视频| 熟妇艹鸡八| 久久精品黄色| 成人资源中文字幕在线观看天天| 果冻传媒一区二区三区| 五十路三级片| 99久在线精品99re8a| 青娱乐999| 毛片视频白嫩| 又粗又长又大国产不卡| 97人肏| 91四海无码日韩欧美| 一区二区三区视频在线观看免费| 国产精品久久久久久夜夜夜夜| 亚洲 日本 国产 综合| 色鬼在线综合| 不卡一区二区日本视频 | 国产精品成人蜜臀AV在线| 精品无码久久久久| 人人透人人操| 精品亚洲| 国产嫩草精品A88AV在线| 最新av网站在线观看| 夜夜爽妓女| 人人模人人看| 天天干人妻| 亚洲激情综合另类男同| 夜夜国自区| 超碰久热| 日本丝袜人妻内射| 狠狠97| 亚洲欧洲另类| 自拍偷拍第26| 国产自偷| 中文字幕一区 二 区 三 四 五 区日 日 骚| 蜜臀视频网站| 日日黄色三级网站| 国产成人精品亚洲日本| 97 色综合| 自拍盗摄一区| av凤凰久久久| 一区二区三区看视频| 欧美中文字幕男人天堂久久精品| 嫩草影院在线观看精品| 91精品国产91熟女| oumeizonghese,www| 两性色网| 外国91| av麻豆啪啪| 国产亚洲精品自在线亚洲情侣| 蜜臀久久99精品久久久久久婷婷 | 国产亚州精品美女久久久免费| 蜜臀中文无码午夜| 日本一级婬片试看三分钟| 中文字幕视频2区| 啊啊啊啊啊啊啊国| 欧美另类综合久久| 欧亚日韩中文在线| 麻豆激情综合| 约操熟妇| 日韩三级伦理中文字幕| 九九九九九九九九九九九九九九九女| 久久直播国产| 麻豆视频一区二区| 青青草成人视频在线观看二区| 黄色一级视| 青青操网| 麻豆91熟妇人妻中文字幕茄子| 欧美九九99久久精品| 国产精品成人无码av无码免费| 久久系列| 男人的天堂在线| 巨爆乳肉感一区二区三区竹菊影视| 欧洲黄色网| 少妇色综合| 人人天天欧洲| 91性高朝久久久久久久久| 夜夜操夜夜高潮夜夜爽国产精品区| 人妻少妇蜜桃视频欧美一区| 97任你吞精| 国产成人91一区二区三区| 天堂精品一区| 91成人国产综合久久精品蜜月| 五月天激情视频| 太久视频| 日本操逼视频在线| 色臀AV| 亚洲色棕合| 久久色一区二区| 蜜桃色色网站视频三区| 久久午夜伦| 妺妺跟我一起洗澡没忍住| av天堂天堂av日韩| 三级日本一区二区三区| 综合 亚洲 欧美| 亚洲第一男人天堂| 嫩草伊人久久精品| 欧美 亚洲 大香| 国产精品白虎| 精品国产网站| 亚洲色性情三级| 韩日男人的天堂| 水澄无码AV| 久久久A∨| www网站黄| 98人妻精品一区二区色欲| 大学生美女口爆| 97碰碰色| 亚洲欧美另类少妇精品| 国产成人天堂| 欧美视频一区二区在线| 超碰1997| 污啪啪啪视频| 中文字幕人妻色偷偷久久皮| 综合网,亚洲,欧美| 91老妇女| 人妻中文字幕日韩电影| 思思热免费视频观看| 成人av影院在线观看| 欧美高清16| 九九精品热| 国产日韩精品suv| 欧亚在线视频| 夜夜骑日日| 欧美激情亚洲| 日韩熟女精一区二区三区不卡| 成人开心网在线视频| 国产中午字一暮区| 欧美激情综合网| 色综合一区二区三区| 国产成人99久久亚洲综合| 亚洲一区日韩精品| 日韩精品在线观看网站| 女人被添高潮免费视频| 操人妻少妇中文| 激情自拍 校园春色| av操操不卡| 亚洲性感丝袜诱惑在线观看| 黄色交缠性感爆操91国产精品免费一区二区三区 | 国产91 丝袜在线播放00-百度| 秋霞色色影院| 亚洲国产麻豆一区二区三区| 五月婷婷色色| 久久久久久久久久精| 成人日本片久久久蜜桃| 88xx成人精品视频| 精品人妻美妇91job| 六月丁香五月婷婷| 狠狠躁天天躁日日躁97| 男人天堂新在线| www久久国产精品| 日韩av一级黄片| 97久久资源| 久久成人午夜狠狠| 国产成人亚洲精品无| 天天操天天干一区二区| 极品色社| 久久激情视频| 欧洲熟妇xxXx欧美老妇裸体| 久久久不能久久久久| 秋霞福利网| 17c嫩草51久久91嫩草| 操逼www.| 一区黄二区黄| AV女资源| 欧美日韩操操操| 少妇99成人麻豆| 久久精品日韩专区免费观看| 美女被啪到深处抽搐视频| 去干网最新版| 黄资源| 69麻豆天美| 国产剧情AV不卡在线观看| 精品久久久av| 蜜臀网 一区| 亚洲无码久久久久久久| 久久久久久九九九九-美女久久久久久久-成人AV| 九99久久| 夜夜影视四色| 神马午夜久久久| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 夫妻四区五区六区| 亚洲欧洲综合| h无码动漫在线观看| 久久综合乱子伦国产免费| 欧美综合色图片| 被体育老师抱着c到高潮| 91久久久视| yw尤物av无码点击进入麻豆| 婷婷三区| 欧美一区二区三区不卡高清视频| 99热精品在线在线| 亚洲青青草| 97操| 欧美制服网站美腿丝袜| 好吊色综合| 亚洲精品丝袜-不卡成人免费……| 97硬碰| 中文字幕视频二区| 日本色色网| 一区二区三区麻豆| 人妻少妇蜜桃视频欧美一区| 青女偷拍网| 五月丁香啪| 精品国产99| 色丁香五月婷婷| 影音先锋一区二区在线资源| 一区| 久久动漫精品视频这里只有精品| 人人干黄色| 夜夜嗨av午夜成人| 成全在线观看免费观看| 欧美精品三区| 日韩乱插| 欧美色偷偷| 无码99| 亚洲无码偷拍| 日韩情色AV| 日小BB小视频| 少妇精品久久久八区九区| 狠狠色噜噜狠狠狠狠狠色综合久久 | 丁香六月东京热| 日本欧美色| 乱伦Av网| 色97欧美| 欧色综合| 夜夜草网站| 亚洲人久久久久日| 91爱看| 色综合色欲色综合色综合色综合| 国产精品操| 夜夜夜夜夜夜夜夜夜狠狠狠狠狠狠狠| 亚洲图片日本AⅤ欧美在线| 九九九久久久久| 99久久无码| AV色图| 亚洲中文字幕噜噜噜久久久| 久久伊人亚洲AV无码网站 | 欧美日韩性爱精品| 日本熟女不卡视频| 天天爱综合网| 色色婷婷五月| 18禁美女裸体无遮挡啪啪| 夜夜嗨TV| 伊人91| 狠狠色伊人亚洲综合网站色| 色综九九九一区| 亚洲精品一区二区三区新线路| 国产一区二区三区视频在线看| 综合自拍| 天天色怡春院| 欧美香蕉视xxx| 日韩视频啪啪| 亚洲成人激情小说视频| 女人天堂网| 日韩偷拍色图| 日韩成人电影AV| 91老熟女| 91白嫩| 日日夜夜模| 91精品人妻一区二区三区蜜桃臀 | 麻豆天美在线喷水AV| 亚洲18禁| 99色在线视频| av无码av无码专区| 呦呦一区| 国产美女自拍视频| 亚洲欧美国产精品久久久久久久| 熟女欧美日韩综合婷婷| 狠狠色丁香| 日韩精品一区二区高清| 一本色道久久综合亚洲二区三区| 亚洲 图片 欧美 色图| 加勒比大香蕉视频在线| 欧美特大黄一级片片免费| 久久久亚洲Av| 亚洲高清视频在线免费观看| 亚洲欧美清纯| 亚洲激情欧美色图| 久久色AV线| 爱干爱射网啊啊啊| 97爱爱影院| 99自拍视频| 国产九九九九九九九九| 大香网站| 蜜臀操逼黄色视频操的好爽| 自拍偷拍 高清无码| 眼镜人妻101.com| 成人线上超碰| 色吧 综合| 99精品人妻| 天天热精品| 国产日韩欧美| 亚洲偷拍欧美激情| av麻豆啪啪| 台欧久久精品视频| 素人美腿视频网站| 久久久草成人网站久久久草成人久久久草久久久| 国产三级电影免费观看| 色欲久久综合| 亚洲人成网www| 久久久九97| 亚洲精品视频二区| 四虎AV无码| 亚洲熟女国产综合另类| 超碰在线人妻不卡| 最新av在线| 伊人网在线视频| 欧美亚州色的图| 亚洲脚交| 免费视频97| 白丝AV| 岛国1区2区3区在线观看| 久久久久久人体| 一本久道久久综合狠狠爱一密臀精| 久久精品超碰| 国内偷拍精品一区二区| 日韩无码精品综合久久| 日韩国产欧美伦理在线| 家庭乱伦网站国产| 噜噜噜狠狠色综合| 午夜天堂精品久久| 97久久精品国产| 91亚洲欧美综合高清在线| 易易A毛视频| 尤物视频偷拍免费| 91熟女在线| 免费αV在线视频| 能直接看AV的网站| 男女91| 少妇九九九九| 2024年最新色情网站在线观看 | 天天操天天日天天干| 男人的天堂99| 精品成人动漫一区二区| 色狠狠综合| 大香蕉综合久久| 国产女人成人精品视频| 亚洲宗合电影| 男人的天堂kva| 91露脸熟女专区| 大香蕉五月天婷婷| 九月AV| 九九九成人| 99re热有精品视频国产| 激情五月婷婷| 中文字幕av一区二区三区人妻少妇| 一区二区三| 伊人五月天激情| 春色校园综合网| 中文字幕色AV| 国产日韩区| 亚洲精品久| 亚洲欧美天| 男女猛烈无遮掩视频免费软件| 久久久 国产精品| 欧美色图私拍91| 欧美性高潮| 人妻精品一区二区在线| 天天舔九色婷婷| 久久久人妻| 另类天堂| 嗯~啊~轻一点 视频| 26uuu性物| 亚洲 欧美 另类 综合 偷拍| 97在线免费视频观看| 操操吧亚洲乱伦视频| 91久精品| 女人综合网| 色综合久| 亚洲双插| 亚洲 欧美 手机在线观看| 一区二区蜜臀| 青娱乐亚洲自拍| 日韩一级二级在线| 国产免费黄色一级大片| 人妻密肉在线观看| 国产精品爆乳懂色蜜乳| av在线资源| 色男人色天堂东京热| 正在播放国产精品一区| 日韩懂色网| 操东北女人| 高凊专区人人操| 亚洲日韩电影| 97在线欧洲| 亚洲在线网站| 免费的av网| 精品国产三级av韩国在线| 91狠婷| 99re这里只有精品9| 日本超碰在线国产一区| 精品午夜福利| 亚洲精品久| 欧美色www亚洲国产阿娇要播| 荡小穴在线观看| 极品白嫩美少妇在地板上位骑射淫水泛滥| 熟妇最新先锋一二三区| a亚洲欧美色欲| 人妻日日夜夜精品| 中文字幕天堂在线| 日韩精品人妻中文字幕久久久| 久久av一级av少妇av高潮 | 鲁鲁色综合网| 午夜小电影在线插入淫高潮| 四虎AV影视国产精品亚洲精品| 欧美偷拍区| 日本东京热大香蕉a片| 男女激烈网站最新| 国产97在线播放| www.天天干| 9Ⅰ老熟女| 欧美精品偷拍| 7777欧美成是人在线观看| 亚洲中文sv| av在线浏览| 精品人妻1区| 日日骚 av| 91站街按摩店老熟女熟女| 久久在肏| 老女人碰碰在线碰碰视频| 国产尤物AV尤物在线观看不卡| 亚洲伊人青青草| 久久侵犯人妻爽爽爽| www.91人妻.com| 精品人妻视频一区二区在线播放| 操人妻少妇中文 | 久久无码精品| 91网18| 人干人人人操人人摸| 熟妇人妻精品一区二区| 国产专区路线| 成人av福利在线观看| 97在线观视频免费观看| 丁香五月天激情综合| 小说区 图片区色 综合区| 亚洲色图加勒比| 亚洲码专区| 2017av无码免费无线播| 久久久精品九| 日韩AV一起草| 色操逼网| 亲子敌伦对白在线播放| 欧美极品少妇| 天天天天天天天天综合| 激情五月综合| 凹凸视频在线观看伊人| 国产精品爆乳懂色蜜乳| 国产丁香精品露脸视频| 亚洲综合激情五月久久| 亚洲成人一区二区精品| 深夜福利黄片| 亚洲a色| 久久久精品视频欧州站| 欧美五区| 91超碰人人| 日韩操人| 精品毛片久久久精品毛片| 亚洲无码国产探花在线观看| 天天综合网~91| 九一国产精品| 久操在97| 亚洲 中文 女同| 五月激情天| 岛国在线一区二区三区| 日韩黄片视频试看| 国产在线视频午夜精华在 | 丝袜综合| 伊人五月天| AA丁香综合激情| 欧美性爱一级操| 精品久久久久av影院| 日韩偷拍一区二区三区 | 久久久久久久久国产| 亚洲综合97中文网| 久操九九九九| 资源在线观一 二| 天美精品av| 9 9精品一区二区三区| 国产在线视视频有精品| 国产91久久九九免费精品无码| 亚洲av综合色区图片亚洲| 久久性生大片免费观看性| 97超碰欧美精品| 中文字幕福利视频一区二区三区在线观看| 色97国产69香蕉| 精品视频久久区| 夫妻AV网站| asc国产精品| 国产91丝袜在线播放蜜月| 亚洲高清在线se| 中文字幕一区二区三四五区日日骚| 蜜臀精品1区2区| 日韩精品9999| 亚洲男人的天堂网| 素人伊尹大香蕉免费下载视频| 91AV天美在线视频| 蜜桃臀AV在线| 日夜精品| 亚洲黄片免费在线播放| 中文字幕一区二区免费在线| 中国一级操逼视频| 秋霞网—男女啪啪亚洲免费体验区 | 免費人妻夜夜爽天天爽爽一区| 日本精品国产视频| 亚洲欧洲无码一区夜| 少妇熟女视频一区二区三区| 4tube欧美女厕所| 色777999综合| 日韩大香蕉| 亚洲日韩人妻中文字幕一区| 东北丰满熟女国产一区| 黄片www.| 高树玛利亚无码流出| 久草在| 蜜桃臀一区二区三区久久| 精品人妻一区二区三区四区| 91成人18| 国语国产操逼伊人AV网| 亚洲夜夜欢无码一区二区| 国产少妇肉丝在线观看| 亚洲三级网址久久最新| 国产精彩女在线观看视频| 国产精品成人午夜福利| 青青青国产手线观看视频2| 午夜福利精品| 女优视频第10页| 白丝jkav| 91亚洲综合在线| 一个色导综合| 亚洲激情AV| 久久中出在线| 91精品国| 成人av在线播放| 欧美亚洲中文字幕| 色女综合| 亚洲天堂一二| 曰韩操B| 久久久爆乳翘臀一线天伦理视频| 国产天天看| 日本男人天堂| 熟妇的味道HD中文字幕| 屌色在线97视频| 亚洲日韩乱码中文无码蜜桃臀网站| 97亚洲中文| 超97在线精品视频| 日韩偷拍色图| 真实高潮91| 嗯嗯嗯啊啊啊操的我好爽| 黄色av播放免不| 日韩人妻免费精品| 男人的天堂日韩| 亚洲涩涩| 99热免费| 国产中文字幕在线| 成人无遮挡毛片免费看| 天天天天干| 欧美亚洲色的图| 日韩激情无码影院| 大鸡巴久久久| 亚洲成成熟女人综合一区二区| www亚洲免费| 成人老鸭窝人人在线视频| 日本色日夜干| 国产热RE99久久6国产精品首 | 韩三级a视频在线观看| 色99色| 免费男人的天堂| 欧美强奸乱能| A男人的天堂| 在线播放一级无码视频| 亚射在线| 天天夜夜久久| 影音先锋每日最新资源在线观看| 国产精品久久久视频| 日韩精品人妻一区二区| 午夜丁香| 色97干| 亚洲91少妇| 熟女熟妇一区二区三四区| 日本九九九九| 综合五月天| 91超级碰| 中欧人妻丝袜中文字幕| 久久9 9 9精品| 强奸抽插av| 精品免费1| 久9re热视频这里只有精品| 欧美黄色图片| 人人看人人插| 蘋果手機免費看成人Av| 国产女乱淫真高清免费视频| 久干网| 国产真实野战在线视频| 色九九九九九九| 天天干美少妇一区| 亚洲天堂2020| 综合网亚| 日韩一级成人毛片免费观看 | 夜夜夜久久| 久久久精品中文字幕爱豆| 欧美激情五月天| 亚洲美女av无码| 一区| 久久亚洲av成人无码国产| 国产精品一区二区麻豆| 天天日天天插| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 97久久久| 亚洲色图欧美一区二区不卡| 亚洲免费精品一区| 26uuu国产日韩综合在线观看| 久久久九九| 婷婷爱五月| 久久精品国产精品一区| yy少妇精品久久| 久操热| 在线视频免费观看午夜| 天天综合网国产| 欧美真人抽搐一进一出gif| 欧美91在线+|+欧美| 国产美女自拍AV| 人妻人妻天天碰| 综合欧美日本三级| 97超碰香蕉| 欧美97在线观看| 久久激情亚洲精品无码?V| 九九国产热| 亚洲伊人a线观看视频| 91久久国产综合精品| 色五月首页| 天天操天天射天天日| 国产精品夜夜| 亚洲综合图色在线| 亚洲婷婷五月天| 日韩久久.一级黄色片| 日韩超碰97| 日本东京热大香蕉a片| 天天日天天色| 26uuu国产成人综合| 精品传媒在线一区| 九九九热精品| 97人人中文网| www.久久| 一级特级aaaa毛片免费观看| 日本αv| 欧美日韩久久精品爱爱| 久久久久久久国产| 亚洲色图久久成人| 91久久婷婷| 无码WWW免费视频网站| 一级二级在线观看| 91亚洲最新在线| 久久99精品九九久久久婷婷| 蜜桃色色网站视频三区| 国产麻豆一级精品视频| 人人 操人人 操人人| 日本色色色网站免费看不卡| 亚洲男人天堂视频| 久久一本大香蕉 | 操逼视频色| 精品人妻一区二区三区四区不卡在| 91N综合网在线| 白丝少妇一区二区| 天天综合91在线| 五月天激情四射| 九九性爱网| 欧美一区二区观看在线| 免费看片黄| 欧美日韩大香蕉| 综合网亚洲| 人妻熟女一区二区在线视频| 加勒比综合a∨| 91欧美性| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 一线黄色免费性爱片| 97在线免费观看| 国产精品网址| 酒色综合网| 男人的天堂va在线| 蜜汁欧美| 久久老熟女| 大香蕉日韩| 欧美碰碰综合色| 中国和日本人色哪个不下载能放| 久久成人精品| 蜜臀网址在线| 99精品在线| 亚洲中文字幕av | 亚洲综合九| 1204金沙人妻懂旧版免费| 青青操在线亚洲视频观看欧美在线| 夜夜操av亚洲一区二区| 六月丁操逼| 爆乳免费黄网站| 亚洲狼狼干综合1| 操b网站亚洲无码| 欧天美中出| 亚洲熟久久| 夜夜嗨TV| 精品久久久久久久| 91精品人| 无遮挡男女激烈动态图| 亚洲图片激情综合另类| 久久五十路熟女人妻| 色哟哟511老熟女| 亚洲αv一区二区三区| 美國A片| av凤凰久久久| 9久久精品| 五月丁香社区婷婷日韩欧美精品影院| 韩国免费播放一级毛片| 婷婷色色五月天福利| 黄色AAAAAAAAAAA大片| 精品在线观看视频在线| 日韩人妻中文视频| 婷婷激情五月| 特级大荫道BBwBBwBBW| 好爽免费视频,| 日本亚欧爱爱| …亚洲黄色厕厕女女在线播…| 国产精品人妻无码久久久老鸭窝 | 大香蕉78| 老熟妇一区二区三区…| 国产自偷自拍一区| 女同在线视频一区| 欧美日韩婷婷中文| 九久久精| 国产精品亚洲色婷婷久久久| 伊人久久大香线蕉无码| 色综合色色| 亚欧中文字幕在线视频| 抽插一区二区视频| 91老女人| 少妇干B| 亚洲伊人久久精品狠狠在线| 久草精品一区 | 快灬快灬 一下爽蜜桃在线观看| 精品91日日夜夜超清资源| 超97在线精品视频| 久操B网| 国产精品乱码久久久、久久| 96麻豆精品一区二区三区| av在线观看不卡网站| 婷婷五月天成人网| 国产精品天干天干综合网麻豆| 欧美九九九| 中文字幕一区二区在线日韩精品| 嗯啊不要在线| 91 国产丝袜在线播放-百度| 揉揉日日日日| 丁香六月东京热| 97se综合网| 男女啊啊啊啊啊| 日韩欧美操逼xxx| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 色www精品视频在线观看| 中文字幕一二三| 日韩性爱播放| 亚洲男人的天堂网| 精品九九| 欧洲色| 99re在线视频这里只有精品| 国产午夜在线观看视频| 免费黄色片子| 97操综合| 五月婷网站| 操美女人妻| 久久超碰com| 综合网色| 天天搞欧美| 国产精品久久久久久久黄无码| 99热亚洲天堂| 天天拍夜夜| 91蜜桃婷婷狠狠久久综合9色| 毛片麻豆91糖心精品毛情片| 97久久国产精品女不卡| 99久久久久久久久| 欧美日韩亚洲电影| 日韩精品一区二区日韩| 久草色悠悠在线视频| 婷婷五月天激情四射| av大香蕉| 精品久久久久综合无码| 柠檬AV导航| 蜜桃狠狠色伊人亚洲综合 | 日日操免费视频| 欧美激情视频一区二区三区不卡| 91bbb| 日韩在线视频1234| 嗯嗯啊啊操我| 久操大香蕉手机视频在线看| 国内毛片四区| 97av在线视频| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 啊啊啊好想要| 亚洲最大黄网| 视频一区二区三区精品| 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 天天夜夜rb| 一起草av| 久久三区四区| 久久久九97| 秋霞 色色| 99re只有精品| 大香蕉乱级| 日韩人妻精品中文字幕| 国内毛片婷婷六月色| 无毛精品| 久久精品国产96精品亚洲拳交 | 亚洲精品国产AV天美传媒| 人人干黄色| 亚洲色图综合网| 亚洲一级特黄大片在线播放91| 加勒比综合a∨| 激情五月婷婷| 91在线视频国产网站| 粉嫩av在线一区二区| 清纯唯美亚洲另类| 欧美日韩国产中文超碰| 亚洲国产一级黄色视频| 少妇专区一二三四五| 黑人精品XXX一区一二区| 强奸熟女一区二区三区| 免费一级欧美片片线观看| 97精品免费视频网站| 性爱av网站| 伊人超碰97| 97人人爱人人做人人乐| 一本一道vs波多野结衣| 一区二区视频在看| 最新AVzaixian| 男女性感激情网站| 91国产丝袜白虎| 人妻精品综合中文字幕在线| av绯色| 亚洲中文字幕一区| 综合色图亚洲欧美| 国产熟女完整版中字 | 日韩精品一二三四| 无码免费在线观看黄色片| 老司机福利社视频在线观看| 久久99操天天日| 91人妻最真实刺激绿帽| 青青草大香蕉视频| 成人A片男人的天堂| 你懂得91| 久久精品国产亚洲5555| 亚州九九九精品视频| 色97| 性爱乱伦一区| av网站国产主播在线| 东京热不卡视频| 九色97| 国产成人精品日本视频| 中文乱码字字幕在线第5页| 人妻日日夜夜精品| 日韩乱伦影音先锋| 99婷婷一区二区| 亚洲成人AB| 欧美日韩国产电影| 久草视频分类在线| 国产在线强奸视频| 中日韓欧美高清| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 绯色AV粉色AV蜜臀AV| 69少妇一区二区| 日本综合色图| 欧美爱国产综合、| 日本大香蕉| 黄页大片在线观看| 18禁免费视频| 亚洲av噜噜噜噜噜噜| 南澳成人一级片在线播放| 国产精品电影推荐| yazhousetuoumei| 99热这里只有精品8| 国产强奸超碰AV| 三级激情网站| 在线人成亚洲视频免费观看| 94色色电影网| 中文字幕视频免费| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | xxx0国产在线播放| 精品国产一区二区三区在线播出| 麻豆一区二区三区在线看 | 97干色天堂| 久久久久成人蜜桃精品| 久久久九九网站| 人人干人人搞人人摸| 免费公开人人操| 亚洲精品久久久久久久蜜桃臀| 欧美极品色| 欧美天天综合站| 人人爽人人精品乱人伦AV| 天堂在线一区二区| 人妻一区久久二区三区色播| 丰满的三级少妇欧美久久久| 国产精品久久久久久久毛片1| 三级特黄60分钟播放| 五月婷婷丁香六月丁香| 小视频国产| 欧美人人操人人插| JIZZJIZZ亚洲女人被躁| 国产区日韩区在线观看| 久久精品国产精品一区| 天天看夜夜看日日干| 啪啪自拍九九综合| 超碰在线一区二区三区| 亚洲有码视频二区| 国产一国产一级毛片古装| 男人的午夜天堂| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 亚洲限制级在线| 97久久超碰国产网站| 国产伦精品免编号公布| 蜜色网色哟哟| 欧美一区二区传媒| 精品999日本| 色九九综合AV| 欧洲乱码视频| 二级久久网| 欧美玖玖爱免费玖玖| 国偷自 一区| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 欧美成人性爱视频免费观看| 殴美大黄片| 婷婷色导航| 欧插网站| 亚洲AV无码久久精品蜜桃小说| 欧美日韩人人早| 久久精品视| 亚洲天天自拍| 色综合久| 天天色天天干天天射| 国产午夜无码片在线观看影视| 国产精品免费视频不卡| www.天天干| 午夜天天碰综合视频| 久久精品老司| 欧美体内射精| 精品久9| 国产精品99精品视频网站| 天天搞在线综合网| 国产 丝袜 欧美中文 另类| 99国产人成精品| 超碰97最新人妻| 午夜九九| 亚洲本色精品一区二区久久| 国产精品第一区第一页| 国产亚洲精品农村妇女| 黄色av一区二区在线| 天天日天天舔天天喷天天射| 久都青青视频| 亚州精人品大香蕉| 综合日本女人伊人| 99爱爱| 人人爱人人乐人人操| 国模无码一区二区三区在线|