久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码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
返回資訊列表
成人影 天天操 亚洲| 3p国产色噜噜一区| 亚码人妻| 秋霞网无码| 久久婷婷五月天| 日韩啪啪啪视频| 中文字幕人妻资源在线| 欧美一区二区日韩传媒搭讪精品| 国产精品久久妻无码网站| 动漫片子网站3黄| 97亚洲自在精品在线观看| 又大又黄国产| 91逼逼女人91| 97香蕉网| 自拍亚洲综合| 操人无码| 18禁看网站一区| 欧美日韩超碰在线| 人妻少妇精品久久久久久| 日韩黄色成人性爱| 国产乱码久久久| 精品一二三区久久AAA片| 日本欧美m v精品网站加| 免费操逼91| 刺激性视频黄页| 国产家庭乱伦性爱视频| 91男人综合| 99色在线| 国产午夜精品理论片一二三区区| 久久久久78| 久久久婷| 久久久无码av精| 国产强奸无码乱伦| 日逼五月天| 色妇91| 国产熟女乱论| 超碰色中文| 午夜视频黄| 风骚少妇视频中文字幕| 日日夜夜狠狠| 91成人久久 | 九九自拍伦理| 青青草吊丝| 亚洲中文一区二区三区视频| 久久婷婷电影网| 超碰综合97在线| 九九英色视频| 青青草黑寡妇男人天堂| 色九九九九久| 大胆91| 日韩无码第3页| 97久久超碰国产网站| 激情综合五月| 九九色影院| 亚州AV无码国产精品| 色色网91| 黄色一区二区秘书性感| 影视综合无码少妇| 人人玩人人添人人澡免费| 欧美日韩另类激情图片| 99中文字幕| 97操B| 夜夜无码| 9丨久久九九九| 91麻豆天美国产欧美日| 麻豆亚洲Av成人无码一区精品| 五月色综合| 国产超碰人人爽人人做| 麻豆九九九| 日韩精品资源专区二区| 欧美se亚洲| 人妻少妇久久| 370p日韩欧美亚洲精品| 日韩性爱再线视频| 久久精品72| 啊啊啊好湿久久| 日本午夜久久电影| 青青国产精品在线| 96AV久久久| 久久超碰亚洲人| 不卡九肏| 色五月激情AV在线| 深夜激情无码| 26uuu国产| 亚洲五月丁香花狠狠干一区二区三区| 黄色二级片网站| 美女淫穴| 操一对老熟妇爽上天视频| 男人午夜天堂| 欧美 熟女 日韩| 啊啊啊久久久视频| 蜜臀少妇一区二区| 久久久久久久伊人精品| AVE乱伦| 久久东京伊人一本到鬼色| 天天日天天色| 免费超碰97在线观看| 亚洲高清无码AAA久久久精品| 久久女婷| 九九九精品一区二区无码| 久久久久成人网| 操逼逼中文字幕| 久久色人体| 中文久久96| 亚洲欧美日韩制服另类| 女优视频第10页| 黄色视频高清无码网站| 国产精品视频精品一二| 久久超碰98| 欧亚日韩中文在线| 五月丁香综合激情| 在线播放欧洲免费av| 色色香蕉| 日本新免费二区三区| 乱操乱伦AV| 成人电影一区| 黄色交缠性感爆操91国产精品免费一区二区三区 | 91九色在线| 国产性爱欧美性爱在线| 色哟哟av网址| 人人操,操人人| 亚州久久9| 国产强奸乱伦第1页| 99色色网| 欲香欲色| 加勒比日本在线| 91搞逼视频| 久久久久久久78| 91精品国产91久久福利| 亚洲男人天堂2012| 91在线超高颜值国产| 69精品人人人人| 日本欧美韩国国产在线| 久久熟女精品不卡一区| 五月婷在线| 久伊人网78| 91黑人无码激情在线| 久久久精品一区二区| 亚洲精品亚洲人成在线麻豆| 少妇色欲综合网2| 99热啪啪| 中文字幕日韩精品久久| 日韩三级性| 精品少妇一区二区三区在线视频| 草草草草视频| 久久熟妇五十路一区| 欧美精品一区二区少妇免费A片| 中国一级αV| 亚洲高清在线se| 久久久久久久少妇| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 日本三级小说中文字幕| 天天综合网1| 1769国内精品视频| 亚洲砖码砖专无区2023| 揉揉日日日日| 久久精品人妻一区二区| 爽爽淫人网| 久热影视| 色区97| 尤物av网站| 亚洲激情在线一区二区| 国产精品久久天天干| 999熟女精品| 久久男人精品| 97干天天| 国产人妖视频一区在线观看| 久9爱精品| a人欧美综合天堂麻豆| AV无码久久久精品| 天天狠操| 国产熟女一区二区| 插入粉嫩少妇视频| 天堂资源欧美| 夜夜爽33333| 7777奇米影视久久| 日韩熟女操逼| 老熟女91视频| 欧洲视频在线| 91少妇通奸网站| 9 7超碰在线免费观看| 狠狠色丁香| 女人喷水视频在线观看| 国产精品视频白浆免费| 噜噜噜在线视频| 老熟妇乱轮| 天美精品一区二区三区四区在线观看| 久都青青视频| 欧美人妻久久精品二区三区 | 97狠狠| 亚洲综合 欧美| 97无码视频在线播放| 东京热AV男人的天堂| 26uuu偷拍亚洲欧洲综合| 97天天搞在线| 久久精品国产精品亚洲艾通辽熟妇 | 91色人| 天天躁狠狠躁av| 超碰九九| 美女骚尻视频| 深夜激情| 国产精品九九九| 日本一二区不卡| 91制服丝袜| 一本久久久精品| 五月开心久久AV官网| 无码视频黄色网战| 99热免费| 中日韩免费看男女操逼大全| 麻豆一区二区三区在线看| 在线观看一卡二卡| 精品午夜福利国产一区二区在线观看| 草草草视频| 97极品无码| 日韩在线观看三级电影| 男人的天堂午夜av| 日韩AV熟女乱伦| 婷婷丁香五月激情啪啪| 少妇毛片久久| 免费成人在线熟妇网| 欧洲精品一区二区三区| 熟女露脸激情自拍视频| 凹凸精品熟女在线观看| 无码操逼网| 日本在线激情一区二区三区 | 国产 丝袜 欧美中文 另类| 国产成人啪一区二区| 久草久日| 91精品国产91久久福利| 国产女人操逼视频| 91视频国品一二三区| 久久AV色| 日韩成人无码| 国产亲戚伦亲在线| 欧美激情亚洲色图| 99久久久| 亚洲熟女性高潮久久久| 精…码一二三区| 欧美大香蕉久| 夜色五月天| 亚洲天天影视综合网| 啊啊啊啊啊好多水| 1024手机看片欧美日韩| 久久久免费懂色| 超碰成人国产| 久久99深爱久久99精品| 伊人成人中文字幕久久网| 2017天天插| 欧美色www亚洲国产阿娇要播| 亚洲制服欧美另类内射| 国产 大胆 对白| 精品久久久久久中文字幕视频免费| 强奸乱伦麻豆| 激情综合网一盗摄| 最新中文字幕精品在线| 九区国产| 91在线视频观看国产| 91精品电影18| 92久久| 日本中文字幕在线电影| 成人情色综合网| 日韩一级免费性爱| 欧美97se| 中文字幕丰满人妻日本| 婷婷九月色| 少妇高潮九九九九九九九| 欧美 日韩 亚洲 春色| 九九精品无码专区免费| 任你爽视频| 26uuu偷拍亚洲欧洲综合| 亚洲砖码砖专无区2023| 中文字幕 一区二区 亚洲无码| 啪一啪免费视频| 亚洲免费日韩在线一区二区| 久久精品国产99精品亚洲蜜...| 成人色女网| 亚洲无码成人精品| 97超碰站| 狠狠色婷婷7777久| 国产 v乱码一区二| 国产少妇肉丝在线观看| 日韩欧美女求操每天更新| 人人摸人人摸人人干| 99精品伊人| 国产精品蜜乳AV| 另类图片五月天| 天美传媒一二三区永久网站| 思思视频免费看网站| 久久成年精品| 日韩不卡av一二三| 女色综合| 蜜乳av一区二区| 欧美v亚洲v综合v国产v妖精| 嗯嗯,好大,好爽,好骚 | 欧美激情欧美精品| 超碰偷拍| 亚洲欧美日韩综合在线尤物| 百度百度日本操逼| ?亚洲伊人伊成久久人综合网| 亚洲在线91| 欧洲亚洲人妻无码中字久久三区四区 | 97久久国产精品女不卡| 欧美内射少妇| 亚欧日韩成人| 激情第四色| 国产精品久久久| 色天堂在线观看| 激情五月婷| 三级精品三级在线观看| 欧美男人的天堂| 久久久久久中文版| 99久热| 国产精品一级片在线看| 日韩高清黄片| 久 久无码人妻AV| 好一吊区二区| 欧美天天综合站| 免费看污网站| 高清不卡视频| 色性综合| 午夜免费视频1000| 美女黄频a美女大全免费皮| 国产日产精品久久快鸭的功能介绍| 久久九九97| 亚洲素人网| 久久鲁夜| 啊啊啊不要啊啊受不了了视频在线| 丝袜美腿诱惑亚洲欧美视频在线观看| 亚洲综合在线视频| 丁香五月激情婷婷| 欧美色五月| 91黑人无码激情在线| www.久久最新地址| 成人 日本A片无码8888| 夜间福利片1000无码| 亚洲色图尤物视频 | chaopen97久久| 成人夜夜| 欧美天天射| 啊啊啊网站| 翔田千里A片一区二区| 91人人操| 国产91精品在线免费| 色噜噜狠狠色综无码久久合欧美| 亚洲人妻五月丁香婷婷| 国产日本一区二区三区蜜臀在线观看| 神马久久久久久久| 操人妻视频| 97在线免费| 国产成人 综合亚洲 天堂| 欧美组图日韩亚洲中文字幕| 中文字幕乱码人妻二区三区| 另类小说综合网| 日韩久久.一级黄色片| 久久亚洲精品成人av| www网站黄| 国产原创剧情在线丝袜 | 操屄不卡视频| 中文字幕精品一区二区精品| 韩国女主播青草在线| 97精品视频在线播放| 78精品在线| 日韩免费中文字幕视频| 青娱乐久久艹| 国产性感骚丝袜在线| 九一性生活免费视频| 青娱乐 青青青操 日逼| 自拍偷拍第26| 五月丁香色色网| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 日本一级婬片试看三分钟| 伦理第一页| 九九精品无码专区免费| 久操视频资源站公开| 日韩中文字幕国产| 久久,精品一二三| 热久日综合| 天天干人妇| 狠肏骚人妻| 极品出轨视频网站| 操人人| 免费一级毛片在线视频观看| 亚欧中文字幕在线视频| 天天干夜夜鈤| 天天做日日做天天欢。| 欧美操逼视频二区| 精品一区二区三区丰满熟女-亚洲欧美一区| 日韩视频精品在线观看| 亚洲男人天堂Av| 亚洲丝袜少妇在线| 亚欧韩av| 99国产精品自在自在| 私人尤物在线精品不卡| 九九九九九九九精品视频| 老熟妇一区二区三区啪啪| 亚洲在线欧美| 97精品国产97久久久久久免费| 伦理日韩国产久久| 亚洲色图欧美色图日韩色图| 香蕉久久精品| 日韩在线视频1234| julia中文字幕在线观看| 久久9视频| 久久久国产av美女私房| 在线只有精品| 亚洲天堂男人| 精品欧美乱码久| 玖色av| 国产三级中文有码在线视频| 天天日美女的B| 久久久久久国产无码精品| 91国产伊人大香蕉| 亚洲精品一区二区三区在线播放| 免费国产| 免费观看的av| 欧美亚洲情色| 中文字幕久久精品一区| 午夜福利成人免费视频| 91国产丝袜白虎| 中文高清一区二区的| 亚洲熟伦熟妇AV无码春色| 夜夜操av亚洲一区二区| 97免费视频网| 日欧操屄视频| 日本在线观看网址| 欧美亚州综合图片| 婷婷亚洲中文字幕在线| 日日操免费视频| 国产精品天干天干综合网麻豆| 国产精品久久久无码AV网站| 综合色区偷拍| 亚洲AV不卡在线观看尤物| 女人高潮抽搐喷水视频网站| 国产91av在线播放| 人人摸人人舔一区二区| 伊人午夜福利视频| 在线岛| 精品人体无圣光凹凸| 国产成人自拍视频视频| 国产精品久久久视频| 秋霞蝌科网日本一区| 久色99999| A V少妇特黄三级| 日韩一区二区高清在线观看的| 天堂性色| 操91| 国产强奸超碰AV| 69视频入口| 欧美色图小说综合| 韩国女主播青草在线| 日本丝袜美腿人妻九九| 性色中出| 免費人妻夜夜爽天天爽爽一区| 国产超碰人人操| 夜嗨影院| 竹菊影视国产一区二区| 亚洲精品第一| 色综合尤物| 日欧亚洲二三区大片不卡| 人妻三级在线中文字幕| 丰满人妻-区二区三区| 黄页网站成人免费| 91欧洲国产成人久久精品网站| 一区二区娱乐网站| 中文一区在线视频| 欧美成人性爱视频免费观看| 国产久久av| 五十路熟女人妻一区二区在线观看| 久久久久久久9999| 插入综合网| 中文字幕av片| 欧美性战999| 久久极品伊人| 亚洲天堂区| 强奸乱亚洲| 欧美一级A片在线看视频性色| 国产精品久久久久亚洲av| 天天色天天干天天爱| 免费一级黄色录像影片| 欧美午夜一区二区三区| www.国产高潮精品| 人妻AV在线| 激情五月天婷婷| 欧美日韩超碰在线| 亚熟在线| 91在线免费精品视频| 日本二三四区| 国产综合色精品在线观看| 激情五月天中文字幕色| 五月天久久综合网| 一本一道波多野毛片中文在线| 国产精品点击进入在线影院| 天天躁日日躁成人字幕aⅴ| 丁香六月激情| 丁香色色网| 高清无码91| 天天操福利视频综合网站| 久久99九九九九6666免费观看软件| 久热最新在线杭州| 乱操乱伦AV| 人人妻人射| 另类图片五月天| 男人天堂久久日韩| 欧美另类丝袜熟女| 99re免费视频精品全部| 国产精品香蕉热久久新品| 激情五月综合网| 国产又大又粗又长视频在线| 熟女熟妇一区二区三区视频| av一区二区三区 中文| 亚洲日韩精品久久久久一区壹牛| 国产熟女免费观看久久| 久久免费老司机精品| 亚洲欧美日韩国产丝袜自拍中文| 免费在线视频97| 国产精品亚洲无码| 美女露胸露屁股| 91色综合色| 人人爱人人乐人人操| 99热在线观看| 啊啊嗯嗯好爽| 国产女人成人精品视频| 97在线观视频免费观看| 青娱乐休闲视频在线观看| 欧美性爱伊人| 亚洲诱惑| 亚洲无码精品AV久久久| 长长久久88视频| 国产人人干| 国产一级内射无挡观看| 亚洲综合另类欧美久久久| 夜夜爽夜夜| 久久的网站啊啊啊啊啊| 欧美性爱五月天| 亚洲精品人体| 岛国视频免费在线观看| 国产熟女一区二区丰满| 火箭成精品视频884必出精品| 国产自偷自拍一区| 精人妻无码一区二区三区伊人直播| 五月丁香黄色网| 亚洲精品男人的天堂| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 亚洲天堂中文字| 日韩美女高潮喷水视频| 亚洲国产尤物yw在线观看| 97内射偷拍| 激情综合网激情综合| 后入 亚洲 美女 射| 色香AV| 九九九九88| 狠狠中文字幕| 97在线精品观看视频| 精品乱子一区二区三区99| 在线A日本| 日本欧美韩国国产在线| 成人精品视频| 婷婷伊人| 日曰骚久久精品| 久久久人妻| 激情小说亚洲| 中文字幕综合人妻| 国语国产操逼伊人AV网| 人妻天天爽夜夜爽2| 色婷婷综合视频| 熟妇熟女一区二区三区| 中文字幕久久精视频久久大全| 男人的天堂在线| 欧美黄色片在线播放| 天天综合站| 青青草中文-久久青草精品一区二区三| 久9re热视频这里只有精品| 国产熟女| ′ !γ}丶。。久久精品欧美一区二区三区| 色吧5亚洲| 另类成人首页一区| 殴美性色a级欧美| 欧美大香蕉久| 超碰在线免费一区二区三区| 91国产大片| 国产67194| 边做饭边操逼逼| 日韩精品 视频一区二区| 九九九九免费高| 色哟哟av网址| 日美免费黄片| 岛国在线一区二区三区| 高清国产成人无码| 亚洲蜜桃V妇女| 91亚洲狠狠色| 欧美天堂超碰97| 国模不卡| 欧美少妇性爱网站| 双插性欧美一二三区| 精品一区二区人妖| 91N欧美| 97人人爱人人乐| 欧美久久伊人| 高潮的A片激情扒开一区| 国产熟女无套内射| 91超碰丝袜制服| 日韩精品大香蕉伊人在线| 天堂日本亚洲欧美| 日本天天人人狠狠在线日美女 | 在线午夜成人无码视频| 久久黄人人爽视频| 欧美大的香蕉有线电视视频| 日韩欧美中文字亚洲慕| 亚洲AV色图一区| 内射老妇BBWX0C0CK| 国产精品久久久久久久黄无码| 91 丝袜在线播放| 97超碰9| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 伊人久久国产免费观看视频| 伊人五月天青青草婷婷| 人人色97| 日韩AV色图| 日本免费不卡二区| 天天日日日射| 啊啊啊啊啊在线视频| 亚熟在线| 97超碰人操| 色69大色97香蕉| 熟妇人妻丰满久久久久久久无码| 午夜啊啊| 欧美性生活男人的天堂| 操人人| 青青操综合网| 久久免费精品视频免一| 色婷婷视频| av大香蕉网站| 操曰本熟女| 四季av一区二区凹凸精品小说| 99久久免费看精品国产一区| 国产精品一区二区久久精品| 九久精品| 午夜欧美女人操逼| 欧美专区第一页| 久久欧美激情| 加勒比色99999| 日韩在线电影| 少妇啪啪自拍| 五月丁香六月婷综合成人综合| 色婷婷狠狠| 九九久久久久久爱| 激情情色五月天| 欧美欧美啪啪视频| 日本精品一区二区中文字幕| 国产自产91区13区| 欧美在线第五页| 久久在线观看免费视频| 国产高清成人mv在线观看| 色播综合| 91精品91久久久久77777俄罗斯老妇姓x| 躁躁日曰躁2020| 欧美黑人日韩少妇色情| 99精品国产户外露出| 国产 热久久久久国产精品| 婷婷激情五月综合| 蜜臀无码一区二区| 不卡av在线中文字幕| 一起草av| 婷婷九月国产| 极品综合| 久久乐| 国产91专区| 97资源站日韩| 精品一区二区亚洲国产| 97色97好| 97欧美精品| nuu12国产麻豆精品| 欧美性xxxxx狂欢| 99∨VTV| 欧美96交| 日本高清有码网址视频| 麻豆精品三区视频| 超碰无码加勒比| 青青操在线视频| 囯戸精品高潮呻吟旡码| 宅男91视频在线播放| 日韩欧美传媒一区国产| 日韩性爱播放| 伊色久人大在线| 伦理片秋霞免费影院| 国产久久久久影院老熟女| 国产亚洲美日韩Aⅴ中文字幕无码成人| 啊啊啊在线观看免费视频| 久久加勒比| 成人精品水蜜桃久久久久久久| 欧美一级A片不卡视频。| 97se综合网| 久久这里只精品免费福利| 一区=区三区视频| 成人 日韩欧美一区| 五月激情啪啪| 欧美激情专区| 欧美se亚洲| 午夜毛片亚洲精品片国产久久久| 99热精品在线| 乱欲视频| 美女91在线观看| 高潮毛片无遮挡高清免费| 妇女性内射冈站HDWWWCOM| 超碰资源亚洲97| 草草电影院| 干B| 成人免费福利网站国产| 亚洲少妇视频| 成人精品视频一区二区| 亚洲黄色a级片| 亚洲丨在线| 精品国产乱码久久久久久久久1| 精品三级在线专区| 亚洲综合色在线| 翘臀vidoes| 精品一区二区成人| 大香蕉线| 久草网站免费在线观看| 超碰97资源网亚洲| 91n美女视频| 亚洲无码太久| 久久无码精品| 青青草啪啪网| 91啪啪| 亚洲第一精品在线视频| 久9无限国产| 亚洲吊色| 97在线免费看| 午夜天堂啪啪| 午夜120视频在线观看| 97超碰欧美精品| 欧美大色交| 日韩人妻大香蕉| 2019AV天堂| 97色色网| 欧美色综合影院| 艹精品| 国产精品盗摄 偷窥盗摄| 欧美亚洲素人制服精品| 色哟哟 日韩精品| 亚洲欧美精品国产一区二区| 综合操逼| 粘花网06av视频| 亚洲大色堂| 日韩综合色网| 啊啊啊好想要| 人妻欧美| 99久久久| 欧美性性性| www.99中文字幕| 日本一级真人黄色性爱视频| 伊人网在线点播| 性欧美第一页| 国产又大又粗又长视频| 91伊人久久在线| 国产精品久久久久久久久久久久久久久久 | 久久久免费的精品| 亚洲第一精品在线视频| 亚洲精品三区在线观看| 国产成人亚洲精品无码古代早漏男| 亚洲精品尤物yw在线影院| 少妇毛片久久| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 爱我干综合| 9久超碰| 97久久久久久久精| 亚洲蜜臀懂色| 婷婷五月天无码| 国产乱码久久久久久| 中文欧丝袜诱惑| 色与欲影视天天看综合网| 欧美91网| 欧美激情综合网| 日本成人A片网站| 国产精品三级视频网站 | 亭亭在线资源| 97视频播放| 亚洲中文字幕妇伦久久| 日本三级中国三级99人妇网站| 久久久久日本视| 福利一级版子| 国产乱不卡| 久久大| 中文字幕,人妻,日韩| 操屄不卡视频| 在线观看AV不卡| 欧美天天干| 偷拍视频青青草在线视频| 玖玖爱在线视频免费观看| 中文字幕交换人妻| 天天透伊人| 久久久免费视频18| 伦激情人妻另类人妻| 婷婷大香蕉| 亚拍在线| 男女日B国产| 99久热| 人妻熟女av国产网站| 久久鲁干| 最新精品久久蜜桃 | 欧美制服另类丝袜| 91蜜桃传媒精品久久久一区二区| 国产乱伦亚洲色图高清无码| 午夜精品久久久久久久男人的天堂 | av资源在线播放天堂| 日韩78m视频| 国产婷婷综合在线观看| 天天影视网综合少妇| 老鸭窝成人| 玖玖玖玖精品国产剧情| 区二区亚洲婷| 一级二级三级黑人无码| 射丝袜高跟鞋99| 污啪啪啪视频| 亚洲天天自拍| 丁香五月自拍| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 干我久操| 日韩综合97P| 中文子幕一二三| 欧美aa一级片| 骚逼高潮久久精品| 嗯嗯啊啊啊好爽| 大香网伊人久久综合| 国产精品视频播放| 在线岛| 91AV天美在线视频| 日韩一区二区三区四区五区| 伊人四虎综合| 亚欧高清v| 日日夜夜骑| 亚洲色图超碰在线| 亚洲国产精品乱码在线观看| 精品人妻一区二区三区不卡断 | 亚洲AV永久无码一区仙野| 精品无人区麻豆乱码1区2区图片| av在线资源| 欧美成人性活片| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 亚洲毛片基地专区| 热天堂一区二区| 日韩天天本| 天天干天天操天天操夜夜操天天操| 蜜桃久久综合视频| 久久久亚洲熟妇熟女| 日本幼女18+| 国产男女无套视频免费观看| 91老司机精品| 国产老熟女| 亚洲精品三区在线观看| 久久天堂网| 99热综合| 在线a亚洲视频播放在线| 亚洲一二三精品久久网 | 国产精品操| 亚洲色图欧美另类在线| 8050午夜少妇无码| 成人小电影网站tex| 91人妻视频| 欧美日韩一区二区三区四区蜜桃| 高潮9999外国| 91偷拍欧美亚洲| 国产综合网站在线播放 | 中文字幕天堂在线| 青草视频人妻在线观看| 国产AV高清AV无码| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 久久黄色视频一区二区三区 | 日本精品网站在线中文| 亚洲区小说| 1区2区3区中文字幕日韩| 一级久久性爱视频| 一区二区乱码福利| 欧美美逼| 小明看看网址| 天天看少妇| 日韩黄色成人性爱| 情趣丝袜无码操逼视频| 一本久久久精品| 亚洲丝袜色图| 五月天激情国产综合婷婷婷| 欧美日本国产日韩激情视频| 日欧操屄| 九九碰九九爱97超碰| 九九九不卡| q2午夜理论片夜色av| 亚洲 欧美 另类 日韩 人妻一区 | 国产精品69久久久久久久| 91色图片| 久久熟女人| 99亚洲天堂| 国产极品美女高潮无套在线观看| 国产91av在线播放| 伊人天天久久动态图| www欧美91| 国产精品另类一区大香蕉| 精品妇操一区二区三区| 欧美亚洲厕所精品偷拍91| 99精品伊人| A啊啊在线观看| 91欧美高清| 91久久久久免| a网站免费观看| 久久女人一区二区三区| 日韩人体偷拍| julia高潮后不停追击中出| 色99视频| 97精品国产97久久久| 99re久久| 久久粉色| 久久区| 91春色| 天天夜躁日日躁狠狠2002| 97视频网站| 伊人91| 青青草成人视频在线观看二区 | 色天堂综合| 97频视在线| 男人的天堂在线| 久草成人影片| 日本一区不卡| 成人一道本免费视频| 国产女乱淫真高清免费视频| 天堂中文资源在线bt| 日韩欧美午夜视频在线| 留下AⅤ黄色片| 91丝袜美女国产| 大香蕉在线免| 精品少妇一区二区三区| 欧美不卡五十路| www.大香| 一二三四日本视频高清| 日韩无码AB| 丝袜AV一区二区三区| 丁香九月 婷婷| 久热9| 久久久111| 久久久蜜桃臀无码视频| 日韩av免费一级电影| 丰满的三级少妇欧美久久久| 成人熟女视频一区二区三区| 亚洲欧美日韩国产丝袜自拍中文| 伊人91| 思思热在线cao| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 欧美日韩亚洲一区二区在线观看| 日本123区操B视频| 99色骚| 欧美Ⅴ性爱| 欧美色偷拍 | 麻豆色约约| 91激情| 九九综合| 嗯~啊~轻一点 视频| 日本欧美一区二区三区视频麻豆| 激情综合网激情五月天| 久久国产精品熟女人妻| 麻豆国产97在线| 一区二区偷拍拍视频| 丁香7月婷婷| 91精品女厕偷拍视频| 欧美激情高清性猛交| 国产小黄片在线免费观看| 欧美性生活内射| 中文字幕天堂在线| 好淫网一二三视区| 欧美+日产+中文| 精品久久人妻成人网| 成人精品水蜜桃久久久久久久| 26uuu国产日韩综合在线观看| 爱啪精品一区| 99在线免费公开视频| 久草资源在线视频官方总站日韩丝袜美腿| 久久久一区二区三区四区五区| 五月丁香综合| 国产一级特黄大片处女| 天美av在线观看| 在线a亚洲视频播放在线| 91一区二区| 国产精品午夜福利| 亚洲欧洲国产综合av| www.人人摸在线视频| 欧美日韩第一页| 天天天干977| 禁止观看美女黄| 岛国黄片网站| 久久久久久久六六 | 舔足天天操天天射| 91n美女视频| 国产精品久久久啊| 好屌色综合| 婷婷视频网| 中文字幕日韩电影人妻| 亚洲日本天堂| 九九热精品| 国产不良强奸视频免费看| julia ann久久| 久久久工口| 精品亚洲国产成人精品| 九九九九九九精品| av在线人气| 性猛交| 欧美色图中文字幕| 333kkkk·亚洲com久久| 久久啊啊| 久久精品老司| 国产精品久久久鸭无码的功能| 91日产欧美| 亚洲精品视频在线| 亚洲AV无码乱码| 亚洲伊人青青草| 韩国女主播青草在线| 久久久97| 国产精品永久免费10000| www欧美91| 国产第二页| 91在线视频免费中出| 激情综合五月| h4610国产人妻| 亚洲精品人体| 夜夜嗨一区二区三区三州加勒比| 亚洲乱色视频一区、二区在线| 无卡一区=区| 丁香六月啪啪| 超碰人妻天天干| 成全动漫视频观看免费下载| 91 丝袜在线播放| 97网色| 揉揉揉夜夜| 亚洲人妻日日日| 妇女乱色二区| 九九九久| 夜夜操夜夜爽夜夜高潮| 粉嫩在线一区二区懂色| 黑人精品成人一区二区三区 | 不卡啪啪视频| 午夜亚洲国产理论秋霞| 男女猛烈无遮掩视频免费软件| 97资源亚洲| 校园春色第一页| 97干在线视频| 校园春色 欧美| 亚洲天堂2020| 屁股久久久久久久| 久久婷婷电影网| 好吊色综合| 91色综合| 91成人高清在线观看| 操逼视频国产无套| 亚洲成aⅴ人片不卡无码| 亚洲精品国产熟女| 亚洲成人无码影院| AV无码久久久精品| 2018色综合天天操| 欧美精品另类人妖xxxx| 91色噜噜狠狠| 9 9无尺码天堂网| 亚洲天堂久久| 九九九网站| 国产精品白领在线观看| 色五月综合| 青青操少妇| 欧美熟妇亚洲版| 热热色青青草| 女性喷水高潮在线观看| 超碰在线日韩一区| 男人久久天堂| 高清无码一区二区三区| 亚洲国产欧美中日韩成人综合视频| 亚洲五月天激情| 爱干爱射网啊啊啊| 60秒免费视频| 97操| 国产家庭乱伦网址| 国语国产操逼伊人AV网| 99热精品在线播放| 有码免费观看| 97中文字幕一区| 欧美日日人人天天| 东北女人无套内谢视频| AV不卡在线| 美女诱惑爱爱| 久久精品一区二区三区蜜桃臀| 91久久青青草原精品| 91在线视频免费播放| 亚洲黑丝在线| 超碰偷拍| 日本免费中文字幕在线| 激情五月综合网| 中文字幕欧美日本乱码一线二线| 国产在线视频午夜精华在| 日韩人妻 中文字幕| 亚洲美女精品| 东京热男人天堂| 激情五月天色色网| 综合性视频99| 一区不卡在线观看av| 欧美亚男人的天堂| 国产精品熟女一区二区三区| 成人AV在线电影| 情色五月天就去干| 8050午夜少妇无码| 使劲用力艹少妇视频一区二区| 日本影视久久免费| 天美国产精品| 91视频综合| 亚洲综合另类| 久久超碰com| 亚洲无码99| 亚洲骚逼少妇| 最新日产中文在线麻豆| 亚洲精品1区| 人人爱人人操人人性| 欧美在线综合| 欧美丰满熟妇XXXX性ppX人交| 久久久96精品| 在线日韩视频| 屁股久久久久久| 99999久久久久9国产精品| 美国日韩黄片| 国产精品色哟哟| av绯色| 97超碰总站| 久操精品网| 干超碰碰熟女| 久草婷婷| 青娱乐国产精品| 91模特在线观看| 精品国产乱码久久久久久影片| 蜜臀久久99精品久久久电影| 天天日日本| 国产精品久久久久中文字幕| 国产精品一区在线播放| 盗摄 精品 另类 一区| 精品欧美不卡在线播放| 一本一首道人妻少妇免费久久| 日本欧美亚洲高清在线看| 啪啪啪综合| 欧美 日韩 国产传媒| 人人妻人人狠人人| 在线视频97| 日本黄色XXX| 欧美精品四区| 日韩9999| 97超碰超碰| 999综合色| 大香蕉五月天| 看日韩黄片| 伊人嫩草| 二区熟妇韩日| 国产欧美精选激情视频| 久久啊啊| 欧亚日韩综合精品国产| 人人爽天天爽| 国产亚洲精品美女久久久m| 日本精品999| 欧洲色综合| 欧美体内射精| 一区二区三区四区五区高清无码永久视频 |