久久亚洲成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
返回資訊列表
天天热精品| 97人人超| 中文字幕黑人大片| 日本不卡中文| 天天操天天射青青草| 成人26uuu| 91久热| 99九九精品| 黑人粗大V S日韩女优视频| 国产无码久久高清| 婷婷综合网| 新亚洲无码| 亚洲区限制级 99| 亚洲一区深夜| 首页中文字幕中文字幕免费| 看一级特黄a大一片| 女人精品内射国产99| 精品无码产区一区二| Av色五月| 九久9精品| 天天上日日上日韩精品| 91n免费处女| 五月丁香网站| 国内毛片国产专区二| 日韩综合无码一区久久92| 99色婷婷中文字幕乱色| 人人扣人人操| 在线观看国产黄色| 国产99久久99热这里只有精品15 | 91美女小视频| 欧美小说区视频区| 啊啊啊轻点在线观看| 亚州成人A√| 99久久婷婷国产综合精品草原| 特级特黄一级毛片免费| 狠狠色狠狠色狠狠五月| 美国aaaaa一级黄片| 欧美亚洲天堂| 97欧美| 久久久久久久久久久久色网| 色欧美色交综合| 久干网| 高树玛利亚无码流出| 狠狠色综合网| 国产日韩欧美三级片| 无码精品人妻一区二区三区妖精| 久久91视频| 一区二区免费电影久久| 国产精品ⅴ无码大片在线看.| 人人操人人干xxx| 久久禁| av72网| 狠狠夜色午夜久久综合在线| 亚洲精品丝袜| 麻豆AV一区二区| 日韩国语字幕| 91丝袜在线视频| 蜜臀久久99精品| 精品国产72| 99热免费| 久艹伊人精品综合在线| 99热这里只有是精品10| 99久在线精品99re8热视频在线| 大香蕉综合在线| 98精品国产乱码久久久久久| 精品久9| 91女日逼| 操b在线观看| 亚洲国产成人7777| 8050无码八戒| 五月丁香久久| 熟妇一区二区三区| 日本久久999| 91伊人大香蕉| 久久久久久久| 國產尤物AV尤物在線觀看| 中国国国产一级特黄毛片| 3p国产欧美99热| 3D污黄视频在线观看| 国产18精品亚洲精品| 久久婷婷视频| 懂色AV中文| 热G综合热G中文| 99热在线播放| 欧美操逼熟女| 日逼五月天| com 首页 18岁 禁区 女优 免费 精选 同城 | 丁香婷婷大香蕉| 99免费视频| 午夜欧美J进J出白浆流出久久久| 欧洲精品区| 97视频免费播放| 亚洲色欲天天天堂色欲网女| 亚洲熟女中文字幕在线| 日韩懂色网| 久热99999| 少妇被c 黄 免费观看| 久久riav中文精品| 色哟哟国产精品免费网址| 欧美日韩国产电影| 91综合熟女| 黄色在线网站| 日欧美色| 日韩在线电影| 日本欧美一区二区三区免费| 最新av在线| 日本男人天堂| 爱av免费| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 99热99re6国产在线播放| 天天干电影| av日韩国产一区二区| 国产白领连续中出在线观看| 亚洲图片91| 欧美一区二区三区不卡高清视频| 婷婷综合五月| 九草九九九| 久综合国内精品自在自线| 人妻激情偷乱视频一区二区三区 | 日本欧美一区二区三区免费| 后X久久| 亚洲天堂电影网| 男女啊啊啊啊啊| 久久东京伊人一本到鬼色| 日韩素人无码一区二区三区三州| 久久99久久99精品天美传媒棢·纸:.| 一本色道无码DVD中文字幕| 九色视频91| 欧美第一页性| 欧美日产国产在线成人第一区| 天天操av懂色| 久久大黄片| 五月婷婷啪啪| 欧美碰碰综合色| 欧美性爱系列| 欧美,亚洲,日韩,v,天堂,手机在线观看 | 日本免费人成视频播放120秒| 嗯啊啊啊轻点视频 | 午夜a成v人电影| 天天影视综合网欧美精品| 欧美激情 一区| 天天干天天操天天干天天操| 久久后入制服| 亚洲av无码成人精品国产| 男人天堂久久精品不卡| 成人国产精品三级A片| 99在线啪| 亚洲福利中文字幕在线| 欧美人妻少妇| 91新在线欧美| 性爱乱伦一区| 大鸡巴久久| 色噜噜综合在线| 清纯唯美亚洲综合| 91欧美偷拍| 免费看国产曰批40分钟怎么下载| 狠插 制服 自拍| 色色色色日本| 日韩久射综合| 91美乳| 亚洲精品第一| 精品人妻一区二区三区鲁大师| 欧美日韩午夜精品一区二区三区 | 97人亚洲综合字幕| 国产成人无码啪| 亚洲图片在线| 国产人伦精品一区二区三区| 日韩在线一区高清在线| 99爱爱| 国产精品91一样| 一区二区精品日韩欧美在线观看| 宅男午夜在线视频| 91精品久久久久五月天精品| 国产久9| 色妹子A V| 香蕉免费一区二区三区不读| 精品偷拍13p欧美dodk视频| 四虎精品亚洲| 丝袜AV一二三区| 亚洲91在线播放影院| 中文字幕精品三级久久久| 91粉芽高清在线一区二区| 免费国产电影一区二区| 欧美色色人| 黄页大片在线观看| AAAAAAAAA黄片| 国产精品视频内谢女人| 日本黄色天堂| 亚洲91色在线| www.黄色在线| 一起草三级AV电影在线观看| 肉丝中文无码高清| 欧美夜色| 五月婷视频| 国产一区在线观看无码AV| 96麻豆精品一区二区三区| 天天综合网AV91| 久久色一区二区| yirendaxiangjiashipin| 丁香五月激情综合| 偷窥自拍亚洲| 亚洲蜜桃V妇女| 中文字幕伊人| 黄片不用下载在线观看| 99精品久久久久久| 无遮挡一级毛片视频免费的| 色五月婷婷五月天| 欧美综合在线第一页| 亚洲性爱电影| 欧美色图亚洲特色| 亚洲天堂精品日韩电影| 91色久| nuu12国产麻豆精品| 免费一级性爱久久| 欧美色图自拍| 香蕉一区二区三区在线视频| 美国日韩黄色片| 一区操逼| 成年女人黄网站| 亚洲图片日本AⅤ欧美在线| 天久久久噜噜噜久久国产精品爽爽 | 亚洲激情综合| 3p国产色噜噜一区| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 欧美一二级| 九月AV| 亚洲影视综合网| 熟女精品一区二区三区| 夂久色| 丝袜AV一二三区| 日韩三级一区 | 色天堂综合| 亚州综合在线| 大香蕉综合在线| 久神马| 亚洲中文字幕一区| 蜜臀久久99精品久久久久久成人小说 | 成人乱码一区二区三少妇| 色噜噜精品一区二区三| 一级久久性爱视频| 国产强奸乱伦第1页| 欧美激情专区| 粉嫩av平台| 男人天堂网站| 偷拍 欧美 日韩| av毛片aaaaa免费看| 久久精品黄色| 三级激情网站| 人妻少妇一区二区| 欧亚免费视频| 欧亚 另类 久| 噜噜瑟| 精品人妻一区二区三区不卡断| 97自拍视频在线| 密臀国产在线| 天天天乱色综合全| 婷婷导航| 亚洲熟女乱熟乱熟妇综合网二区| 一区二区三区精品视频| 色大师网站www永久网站视频| 九九亚洲| 东北夫妻性偷拍| 女人综合网| 丝袜内射| 中国一级特黄大片护士| 日本性爱网址| 国产精品干干干| 91在线无码精品秘 软件| 啊v视频在线观看| av一区二区三区 中文| 久久动漫精品视频这里只有精品| 国产午夜激片Av毛片不卡| 97视频在线视频| 天天操夜夜操狠很操| 人妻一区久久二区三区色播| 偷看洗澡一二三区美女| 中出20p| 亚洲成人一区二区精品| 青娱乐国产剧情av一区| 精品欧美А∨无码黑人大荫蒂| 五月丁香六月| 青青操狠狠撩| 欧美亚洲涩涩| 九九热视频这里只有精品| 九九99久久| 睡产熟女乱伦| 中文字幕亚洲永久精品| 天天操人人操狠狠插| 97色97干| 人人澡人人干| 天堂亚洲精品| 人妖欧美一区二区| 中文字幕乱妇免费视频| 色69大色97香蕉| 91激情综合| 亚州综合色图| 色悠久久久av| 日韩一级二级三级免费看完整版国语版| 91在线免费观看处女| 国产av高清版| 国产四虎在线| 天天综和| 亚洲日韩乱码中文无码蜜桃臀网站| 久久久久久久久久久久黄色 | 欧美高清色| 国产精品乱码久久久久久久久| 伊人亚洲综合| 福利五区| 久久在肏| 亚洲欧美人妻| 欧洲人妻视频| 欧差乱伦二三| 亚洲蜜乳av| 久久精品72| 后入人妻一区| 白丝少妇一区二区| 97免费视频在线观看视频| 99精品人人爽| 黄久久| 蜜臀久久99精品久久久久久成人小说| 欧美啪啪色吧在线| A级片一区| se01国产在线视频| av婷婷色婷婷色六月| 中文字幕在线日亚州9| 久久丁香| 亚洲日韩青青草色月| 99自拍B亚洲 | 欧美九9 9 9| 久久9精品视频| 麻豆 亚洲 97| 亚州欧美在线| 久久无码一区二区二三区性色| 中文字幕在线观看永久| 欧美性生活综合| 国产精品久久久亚洲一区| 久久综合日韩亚洲欧美| 亚洲AV不卡在线观看| 91岛国动作片| 中日亚韩免费视频| 色玖玖| 色偷偷色偷偷欧美日韩| 精品国产乱子伦一区二区三区,精品一| 亚洲91网| 操逼片中文| 天天日少妇逼AV| 蜜桃色院一区久久 | 欧美亚洲丝袜美女电影| 青草伊人久久| 日本三级一区二区 在线| 日本色婷婷| 天天碰操中国年青熟妇| 久久九九97| 精品久久久久久无码| 婷婷91| 亚洲有码第一页| 色噜噜国产精品视频一区二区| 国产精品亚洲一级av第二区| 大稥蕉免费视频这里只有精品| 久久久精品久久| 精品欧美老熟女一二区| 天天日日夜夜| 亚洲交换| 性在久久久久久| 国产夜夜艹| 日韩久射综合| 99久久久久| 偷拍色图| 一类无码操逼视频| 10000部十八禁看电影| 日日骚网站| 思思热影视| 884t在线| 日产欧美电影一区二区三区| 试看60秒 爽| 国产精品久久久鸭无码的功能| 精品一久久久| 我要去看2个日本美女.com曹逼 | 视频国产成人精品日本亚洲18| 国产成人自拍视频在线| 9 9无尺码天堂网| 欧州一区二区三区四区| 中文字幕高清20页视频| 91综合站| 久久黄黄| 老熟女91| 欧洲无码一区二区| 亚洲图片欧美色| 男人天堂久久精品| 午夜九九九九九九| 亚洲天堂,男人| 久久岛国| 吻戏激情性巴克| 九久久九九久视频| 精品精品精品| 午夜精品久久久| 久久亚洲骚逼综合| 呦呦影院| 超碰久久草| 色九久| 久久极品一区二区| 91露脸熟女专区| 亚洲欧美setu| 中国女人内射6XXXXX| 日韩精品9区| 日韩丰满熟妇| 久久久久久加勒比| 久操B网| 国产一区二区免费福利片| 亚洲永久永久永久永久一级一级一级精品 | 中文字幕文字幕无码一区二区三区电影99| 东北丰满熟女国产一区| 精品制服美女中文一区二区三区| 婷婷亚洲天堂| 精品人妻一二三| 抽查国产福利主播| 全免费a敌肛交毛片免费| 欧美淫乱视频| 亚洲欧美爆| 国产精品美女久久久久AⅤ国产馆| 久久久久久久久久久久久久久久9| av无码精品久久久久| 91国产丝袜白虎| 久久天天摸| 精品国产91av一区二区三区| 综合少妇网| 九九九九九九亚洲| 夜夜影视四色| 久久久久久久精| 天天舔九色婷婷| 日本在线视频导航| 精品美女在线视频| 人人摸人人干人人拍97| 超碰99re| 亚洲熟妇AV日韩熟妇在线| 99热综合在线| 91成人久久| 一本久道久久综合狠狠爱一密臀精| 后入内射蜜桃臀| 欧美另类精品xxxx| 欧美日韩亚洲天堂| 五月婷丁香| 人人贴人人摸| 日本韩国五十路六十路七十路老熟女作爱视频网站 | 日韩欧美偷拍美女视频| 亚洲男人天堂Av| 亚洲欧洲中文日韩女优乱码| 97精品全部| 九热大香蕉| 精品人妻美妇91job| 蜜臀久久99精品久久久久久婷婷| 日本高清加勒比| 综合婷婷| 亚洲精品毛片在线观看| 久久六六| 亚洲欧美天| 内射中出日韩在线观看视频| 免费精品福利在线观看| 日韩Va亚洲va欧美Ⅴa久久| 一本色道熟妇| 色五月激情AV在线| 青青草色情网站视频| 性爱综合网| 成人性爱视频在线看| 中文乱码字字幕在线第5页| AV男人天堂网| 热久久99999| 久久99国产综合精品女同| 色呦呦呦在线观看视频| 国产又黄又粗又猛大片| 男人天堂2017| 一本久久久精品| 亚洲熟女一区| 日韩AV一区二区三区三州三州| 免费看一级a性色生活片久久无| 久久久久亚洲熟妇熟女| 欧美激情一| 99re在线观看| 欧美 亚洲 制服 精品| 欧美性爱在线无码| 亚洲天堂7777| 欧美人人操人人插| 一中国女人毛片水真多| 日韩无码一区二区三区| 嗯嗯啊啊啊好爽| 日曰骚久久精品| 天天天堂影视日韩亚洲91| 天色综合网| 欧美亚州手机在线| 99操| AV中文在线| 在线观看日韩av不卡| 劲爆欧美人妖三区91| 色性荡荡荡荡视频| 超碰日本97美女人妻人人玩人人爱| 国产精品久久久鸭无码的功能| 欧美成人四级在线播放| 国产宅男宅女在线观看| 一二三四视频中文字幕在线看| 欧美日韩另类激情图片| 人妻少妇精品| 2024黄色视频| 日本不卡二区| 中文字幕天堂在线| 欧美一级久久久丰满| 亚洲日韩人妻中文字幕一区| 日韩精品国产一区二区| 国产对白刺激视频| 高清无码一区二区三区| 欧美成人AⅤ大片在线观看| 国产高清成人mv在线观看| 免费毛片在线播放| 五月丁香综合网| 一二三四免费视频| 少妇极品熟妇人妻无码| 久久久久久久久久久久欧美日| 啊啊啊啊啊好舒服视频| 久草这里只有精品| 99久久国产精品免费高潮| 日韩在线地址一| 欧洲特黄毛片免费看欧洲毛片| AV乱伦国产| 午夜激情成人在线观看| 国产亚洲色婷婷久久99精品91葵花宝典| 在线可观看的黄色网址| 丝袜美腿诱惑亚洲欧美视频在线观看| 97久精品| 97se综合| 亚洲精品97久久| 日韩特级毛片免费观看全集| 97久久超碰亚洲| 亚洲激情在线一区二区| 亚洲精品不卡一二三区| 色香伊人| 欧美色图片| 亚洲图片日本AⅤ欧美在线| 精品性爱无码在线播放| 亚洲综合网电影91| 福利一级版子| 国产精品一区二区密臀| 色哟哟AⅤ| 欧美国产伊人久久久久| 天美av在线观看| 欧美高潮在线| 久伊人网78| 国产精品熟女九色九色蜜臀| 柠檬AV导航| 色鬼在线综合| 天天影视亚洲| 国产操偷| 丁香激情五月天| 成人在线午夜视频一区| 欧美天天综合网| 国产做?爰片久久毛片?片美国| 殴美牲| 中出后入| 最新三级网址| 久久99国产综合精品女同| 啊啊啊啊啊好舒服视频| ji熟女.com| 亚洲欧美精品福利在线| 午夜精品久久久久久久99热影院| 欧美性爱一区二区三区| 国产AV精久久| 超碰97资源中文字幕| 欧美97在线欧| 2018色综合天天操| 91精品免费| 欧美一级久久久丰满| 人人喜人人妻| 国产搭汕a级片| 亚洲天堂7777| 欧美亚洲美少妇一区二区| 亚洲国产综合久久天堂| 久久婷婷苹果| 久久国内| 国产精品suv一区| 亚洲欧美首页| 99热| 久久久久久人体| 欧美性爱精品一区二区| 后入福利视频| 性爱免费视频成人| 久久人妻无码毛片A片麻豆| 三男一女不戴套的A片| 精品久久久久,69国产成人精| 疯操AV| 思思热影视| 91精品婷婷国产综合久久| 男人的天堂午夜av| 欧美一区二区传媒| 一区二区三区黄色片a| 青青草精品| 中文字幕美女91| 操b网站亚洲无码| 影音先锋新男人| 啊啊啊在线观看免费视频| 日韩性爱一级片| 亚洲情色五月天 | 新婚人妻扶着粗大强行坐下| 激情五月天校园春色网| 98人妻精品一区二区色欲| 91丝袜在线观看视频在线观看| 亚洲精品久久久久久久蜜桃臀| 志村玲子视频一区二区| 精品久| 亚洲、日韩、综合、另类| 欧亚日韩一区在线| 亚洲成人一二三区| 日本Xx性爱| 伊人在线大香蕉视频久久| 五月天丁香婷婷综合网站| 日日躁狠狠躁天天躁精品| 亚洲天堂 视频你懂的| 日韩二区三四区五区六区在线看| 五月色综合| 男人的天堂2019| 欧美 亚洲 另类 综合| av无码精品久久久久| 欧美人妻一区二区| 不卡码视频| 无码天天操| 九九久精品| 91久热| 国产亚洲99久久精品熟| 高清肉丝中文无码| 狠狠狠狠狠干| 青娱乐老司机视频| 91N综合网在线| 婷婷丁香五月综合| 97在线观看播放视频| 超碰在线综合97| 25国产精品免费观看| 亚洲精品成人动漫在线| 天天热精品| 日韩熟女精品无码专区一区二区| 嗯啊抽插大香蕉网页| 插插综合网天天影视网| 99啪啪| 成人网址在线观看| 九久久九九久视频| 久久伊人青青草| 99热亚洲| 久久五月天婷婷丁香中文字幕| 欧美综合1性辶| 99热精品国产| www.91色| 国产A v无码专区| 国产v亚洲v日韩v欧美v片另类| 97视频900| 丰满欧美少妇| 五月丁香| 天天做日日做天天欢。| 欧美18 在线观看| 精品人妻一区二区免费看| 丝袜美腿校园春色| 伊人大香蕉在线| 丁香五月综合| 日韩亚洲中文字幕在线| 国产精品懂色tv影视免费观看| 97露脸精品丝袜| 99热精品在线在线| 日韩国产欧美伦理在线| 亚洲男人天堂av| 综合少妇网| 亚洲十八禁止| 人人超碰在线观看黄| 综合网欧美在线| 五月丁香在线| 在线观看综合精品亚洲| 曰韩精品视频一区二区| WWW操逼| 久久男人的天堂| 性感美女91影视| 久久视频,这里只有精品 | 久久久无码av精| 人人玩人人添人人澡免费| 亚洲无码视频免费在线观看网址!| 欧美激情亚洲| 思思热在线视频精品| 国产亚洲中文不卡二区| 中文字幕高清精品一区| 91丨九色丨国产丨人妻在线| 秋霞色色影院| 色汉综合| 欧美亚洲综合高清在线| 一区二区影视| 噜噜噜噜久久久精品免费| 97综合久第一页| 婷婷久久久精品| 丁香7月婷婷| 国产极品久久久| 在线亚洲精品久久久| 少妇人妻无码| 97网址97| 91日日夜夜| 亚洲国产精品久久久久婷婷老年| 久久久久久久久国产| 日本护士高潮| 99热思思| 日夜啪电影| 国产精品久久久三级无码| 国产精品国产拍高清AV| 9久久精品| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 东北少妇高潮zzzz| 国产福利电影| 人人操人人摸人人看人人插| 玖玖爱在线视频免费观看| 国产无码精品久久久久久| 欧美黄色手机在线观看| 综合操逼| 九九热AV| 丝袜制服字幕在线| 嫩草影院永久在线制服丝袜| 久久激情视频| 亚洲不雅视频1区二区| 色五月AV| 岛国大片在线观看网站入口| 国产麻豆一级精品视频| 久久精品一区二区三区不卡| av操操不卡| av大香蕉| 亚洲欧美综合色| 一区二区不卡| 男人的天堂va在线| 五月丁香六月综合缴清无码| 久操网线| 国内91熟女人妻丝袜天天精品视频在线 | 色嘟嘟人妻天堂网| 欧美日韩亚洲五月天婷婷| 夜夜国自区| 91美女小视频| 超碰国产精品久| 五月丁香婷婷啪啪| 国产夫妻一区二区| 欧美天天在线| 最新无码国产| 亚洲色图欧美视频| 久久精品72| 青青草字幕AV| 亚洲精品人体| 国产精品无码久久久久2028| 亚洲欧美国产日本一区二区三区| 婷婷国产精品九区| 国产不卡中文字幕免费avi| 超碰在线成人电影| 国产精品免费1区2区视频| 激情小说五月天| 中文字幕十五区| 超碰2017| 香蕉人人操tv| sss视频华人在线| 欧美 亚洲 另类 综合| 亚洲欧美视| 亚洲AV麻豆Aⅴ无码电影一| 五月丁香婷婷综合| 动漫av中文| 97亚洲自在精品在线观看| 国模私拍一区二区三区神乳| 激情四射婷婷四五月天| 91天堂色男人的天堂| 国产欧美美女免费观看视频| 亚洲人妻久久久| 国产v片在线免费观看| 久久ww| 日本中文字幕熟妇| 色婷婷视频| 亚洲男人的天堂V| 国产精品熟女一区二区三区| 亚洲图片偷拍视频区| 日日夜夜噜| av网站国产主播在线| 中文啪啪视频| 天天久久久久久| 91人妻素女| 熟妇人妻一区二区三在线| 日韩欧美~中文字| 深夜国产一区二区三区在线看| 国产精品色哟哟| 超碰97人妻| 中文久久爆乳| 亚洲精品九九九九九九| 3d成人精品一区二区| 婷婷色香| 国产又粗又大硬免费色网视频| 神马精品视频| 久久9精品网站| 色色香蕉| 偷拍片久久| 美国一区二区免费视频| 蜜屁Av| 91丨熟女丨丰满熟女| 超碰在线第一页| 东京热男人天堂| 精品一区二区三区蜜桃臀赵总| 欧美亚洲特P| 亚洲成人碰碰| 91亚洲欧洲| av大香蕉网站| gogogo免费高清看中国国语| 午夜综合在线| 嫩草影院在线观看精品| 伊人欧美大香蕉视频| 亚洲一区中文字幕一区| 中国熟女91| 粉嫩绯色AV一区二区在线| 偷偷人人精品女女久久| 99精品在线| 高潮9999外国| AV天堂丝袜| 人人操 欧美| 国产精品久久9| 香蕉国产精品麻豆亚洲欧美日韩| 神马久久69| 亚洲毛片一级带毛片基地| 久污| 深爱五月天| 亚洲国产成人精品999| 亚洲国产精品久久久男人的天堂| 欧美性爱日韩性爱| 99热这里只有精品1| 97视频网站在线观看| 日韩激情无码影院| 中文字幕在线观看第二页| 日韩无码精品综合久久| 久久仑合| 日本一区二区不卡精品| 久久久久久久| 久噜噜| 爱我干综合| 久久老女人| 久久爽爽精品| 欧日韩不卡视.频| 国产亚洲日韩欧| 91欧美情色| 69综合网| 噜噜吧,噜噜色,噜噜| 久久精品国产Aⅴ| 日本欧美成人片AAAA| 亚洲日韩av专区无码| 欧美线天码中字| 97色冈| 乱伦图一区| 好吊色综合| 无码精品啪啪啪一区二区三区三州| 亚洲色五月| 另类小说综合网| 欧美色综合网| 天天操天天日天天干| 熟女精品一区二区三区| 欧美人妻精品一区二区| 伊人骚琪琪亚洲天堂网站| 久久偷偷色综合蜜桃| 天天透伊人| 欧美在线播放aaaa| 操操吧亚洲乱伦视频| 超碰97亚洲| 熟妇激情| 日本久久综合| 色噜噜人妻av 中文字幕| 一级久久久久久久久久久| 久久六六| julia国产在线 | 超碰在线99| 国产精品自在自拍视频| 黄色免费网| 人妻久久一区二区三区| 影音资源男人日韩| 亚洲一二三| 亚洲AV乱码专区国产噜噜亚洲| 狠狠狠狠狠狠| 久久亚洲精品成人av| 乱操乱伦AV| 国产精品视屏| 本道综合精品| 日本精品一区二区三| 男生女生啊啊啊啊| 偷拍 精品 另类 四区| 熟妇在线视频一区二区| 96久久精品一二三区色欲| 五月婷婷丁香六月丁香| 天天综合91| 91这里只有精品| 欧美日韩亚洲天堂| 色欧美在线| 99精品在线| 天天在线91| 国产精品 午夜福利| 99啪| 天堂av2019| 高清不卡一二三区视频......| 九九久久综合| 婷婷丁香九月| 青娱乐欧美激情一区二区| 老司机午夜精品视频| 极品销魂美女一区二区| 999久久芭蕾| 91青青在线视频| 无毛精品| 日韩在线97| 亚洲性少妇| 91亚洲狠狠色| 久久一二三四五六七八九区| 亚洲在钱| 国产精品国产拍高清AV| 成年女人18级毛片毛片免费观看| 亚洲精品第一| 激情干在线| 熟女人妻一区二区三区| 99热成人| 亚洲色图大香| 精品妇女一区二区三区| 精品久久99| 亚洲天堂情色| 青青草在线视频欧美| 97自拍一区| 精品久久九| 国产精品禁久久久精品| 日本理论在线| 国产原创自拍| 亚洲另类久操网| 久草综合视频| 屁股久久久久久久久| 78操B| AV有码在线| 亚洲熟伦熟妇AV无码春色| 操人人| 风流老熟女一区二区三区l| 97在线精品| 六月婷激情福利天堂69| 日韩天堂av电影在线观看| 级品肉射| 人妻精品一区二区| 12一15性XXXX粉嫩国产| 欧美一区二区三区另类精品| 精品性爱一二三区| 高潮内射在线| 97操在线| 亚洲有码视频二区| 久久精品中文字幕观看| 极品尤物在线观看| 中文字幕免费观看| 天天影视之亚洲综合网| 欧美精品97| 国产一级高跟丝袜| 农村妇女一级二级三级视频| 色盈盈影院| 啊啊啊用力在线观看| 超碰综合色| 特色a在线上| 永久免费发布性爱网| 涩五月婷婷| 伊人久久大香线综合无码| 婷婷精品国产欧美精品亚洲人人爽| 97综合在线| 国产精品女久久久久av爽| 尹人大香蕉视频在线| 精品十三区| 97网色| 黄片免费看的| 精品国产精品一区二区| 黑人天8A∨高清网站| 欧美三四五区| 亚洲精品xxx| 国产av高清版| 97久久天天综合色天天综合色电影| 成人性交免费视频| JULIA一区二区三区在线播放| 91国产丝袜足交精品视频| 亚洲在钱| 视频在线观看免费一区二区三区| 香蕉在线一区二区三区| 97超碰色中文字幕| 91亚洲人| 欧美视频在线视频免费va| 成人综合网 欧美| 亚洲天天操| 亚洲偷拍自拍在线视频| 国产60区。| 操国产逼| 大香蕉123| 欧美色图另类图片| 3d成人精品一区二区| 美欧老女人97| 一起草高清无码| 先锋精品av色鲁| 偷偷人人精品女女久久| 26UUU欧美激情一区二区| 玖玖综合色| 亚洲精品久久久久久久蜜桃臀| 色墦五月丁香| 亚洲在钱| 亚洲 欧美 手机在线观看| 超碰久在线天天做| 日韩成人在线性爱视频| 婷婷综合视频| 超碰九九| 99在线精品观看99| 加勒比综合九九99视频在线播放| 91亚洲网| 国产亚洲色婷婷久久99精品91| 精吧天堂| 国产真乱mangent| 日本九九久久99播| 欧美中日韩XXXX| 性色av婷婷久久一区二区点复制| 91色s| 玖玖资源综合在线视频| 九九人妻| 色欲日韩欧美在线一区| 亚洲精品蜜桃久久久| 91人妻做a观看视频| 激情综合网一盗摄| www.av在线视频| 综合亚洲情色| 激情天天视频| 久久欧美1卡2卡3| 精品综合久久久久久五月天| 97久精品| 91啦人妻| 天天看特黄的免费网站| 欧美成人四级在线播放| 天综合中文| 超碰97久久| 美日韩在线不卡人妻| 中文字幕一二区二三区人妻专区| 男人天堂网手机版婷婷| 欧美一级特黄淫片在线观看| 青青伊人久久| 午夜色婷婷| 色欲久久99国产精品久久久久久| 91亚州日韩高清| 欧美日韩资源| 久久久性爱视频| 看日韩操逼| 男人天堂毛片| 好淫网一二三视区| 日韩av电影成人在线| 人妻熟女一区二区| 亚洲色吧网| 青娱乐999| 97久久超碰国产网站| 欧美亚洲色图另类国产| 超碰97综合在线| 亚洲三级网址久久最新| 欧美,日韩综合久久| 超碰99在线| 人人操人人操人妻人| 宗合情欲网| 91精品久久综合熟女| 97天天综合| 狠狠色一区二区中文字幕| 亚洲黄色影视| 超碰在线人妻中文字幕| 亚洲另类色综合网站| 97久精品| 日韩欧美中文日韩欧美色| 啊啊啊啊啊在线| 色 亚洲 91| 天无日色综合| 欧美中文字幕精品人妻| 夜精品久无码| 久久欧美按摩999| 久久成人午夜精品影院| 农村女一级毛卡片| 啊啊啊要高潮了| 色欧美天天| 亚洲精品人妻吞精av| 男人的天堂 在线一区| 激情文学亚洲| 色婷婷婷五月天激情四射| 欧美色综合影院| 男人天堂黄片| 日韩日本欧美在线观看| 久久精品日韩专区免费观看| 蜜伊人色综合97| 亚洲精品久久久久久久蜜桃臀| 久久亚洲欧美中文字幕国语| 国产精品操| 日产成人久久| 成人熟女区| 97色冈| 97精品综合久久| 91爆操视频| www久久国产精品| 欧美激情精品| 超碰97首页| 成年男人的天堂| 韩国久久97| 99精彩视频| 欧美强奸乱能| 欧美黄色大片在线观看| 久操电影网| 91久久久老司机| 九月丁香婷婷| 玖玖色综合| 999亚洲国产视频| 成·人免费午夜在线观看| 欧美熟妇亚洲版| 欧美不卡在线美女| 太久视频| 国产一级高跟丝袜| 另类图片欧美激情综合| 免费精品AB| 新精精品久久精品| 精品国产72| 青青操在线亚洲视频观看欧美在线 | 啊啊啊久久久视频| 日韩资源网| www.高清无码诱惑一区.com| 国产suv精品一区二区四区999| 91啪9色| 亚洲精品97在线| 自拍盗摄一区| 99re9这里只有精品| 日本青青草在线| 国产精品 午夜福利| 亚洲大色堂| 91人妻视频| 日韩精品99久久久久久中文字幕| 9热9热综合网| 91丝袜美女| 国产肏屁眼视频| 丰满翘臀美女影院视频| 第45页一区二区| 男人网站婷婷| 久9久精品视频| 亚洲欧美在线综合| 久啪视频| 欧美情色亚洲| 久久亚洲AV无码白度| 91色人妻| 亚洲a色| 91成人无码| 久草精品国产99| 欧美偷拍区| 成人午夜小视频手机在线看| 亚洲精品国产精品乱码不99| 曰韩操B| 色爱综合网| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 2001天天操| 96AV精品| www.AV有限公司一区| 九草九九九| 久久影视二区三区行押| 欧美成人精品一区| 亚洲欧美日韩制服另类| 狠狠婷婷亚洲中文综合久久| av绯色| 小少妇| 天天操天天射青青草| 国产欧美日韩臀| 黑人性暴力毛片| 亚洲码在线中文在线观看| 中文字幕一区二区在线日韩精品| 日韩操逼HD| 久久国产免费激情视频| 操逼网免费无码视频|