国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲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
返回資訊列表
囯产精品久久久久久久久久梁医生 | 国产最新小视频在线播放下载| 嗯嗯啊啊好疼| 五月婷婷深深爱| 啊啊啊免费视频| 欧美在线伊人色| 在线观看高清AV| 人妻激情在线视频| 久久一本大香蕉 | 欧美色视频在线| 欧美色图20p| 熟妇一区,二区,三区。| 美骚妇av高清在线| 少妇人妻精品| 青青草日逼视频| 精品国产久热在线观看| 久久这里是精品| 91 丝袜在线播放| 丝袜亚洲综合| 超碰97综合网| 加勒比av网| 超碰97最新人妻| 激情综合五| 亚洲国产精品9999在线观看| av天堂天堂av日韩| 天天插天天操| 午夜福利视频在线一区| 亚洲精品一二区| 亚洲精品一区二区精华| a亚洲欧美色欲| 男女啪啪网站免费视频| 亚洲综合电影| 93人人操人人| 一区操逼日比视频| 久久久久亚洲AV无码专区少妇| 舔足天天操天天射| 久久内射| 蜜臀久久99精品久久久久久酒店 | www久久精品| 岛国片国产成人亚洲播放| 91大胆欧美| 欧美组图日韩亚洲中文字幕| 欲色啪| 操91| 色九色久| 精品国产乱码久久久| 91N综合网在线| 亚洲偷91色| 欧美亚洲宗合色性图| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 精品无码久久久久久久久果冻糖心| 热久久国产精品视频大陆精品| 99久久com免费视频′| 五月天色综合| 啊好大好舒服| 日本东京热大香蕉a片| 97网址97| 国内一区二区三区| 精品国产乱码久久久| 91亚洲黄色网| 啊啊啊网站| 久久只有精品| 影音先锋每日最新资源在线观看 | 国产第25页在线观看| 老子午夜伦不卡影院| 欧美懂色综合网| 欧美爱爱97| 国产午夜在线观看视频| 国产一区二区三区免费视频在性观看| 天天视频综合在线观看视频| 日本丝袜人妻内射| 丁香五月影院| 国产中文福利| 久久久久婷婷精品av电影| 色色青青久久| 色香AV| 色综合一本| 日韩 欧美 视频 在线 一区| 色色五月婷| 久久熟妇五十路一区| 久热伊人99re| 蜜臀久久99精品久久久久久成人小说 | 伊人丁香五月婷婷| 人妻激情视频| 国产少妇与亚洲av| 欧美91精彩| 2003天天干夜夜操| 中文字幕一区二区三区四区在线视频| 亚洲最大的综合性av| 亚洲av总站| 999综合色| 91伊人久| 可以在线观看的黄色网址| 97se综合网| 玖玖爱免费观看视频| 69人妻精品一区二区绯色| 91人妻丝袜无码| 欧洲精品人妻| 99re热有精品视频国产| 日本超碰在线国产一区| 亚洲中文字幕熟女少妇一区二区| 欧美性爱第一页久久| 偷看洗澡一二三区美女| 亚洲诱惑| 精品免费视频国产一区| 国产无马av| 精品无码一二三四区| 亚洲精品蜜桃久久久久久久| AV中文在线| 欧美在线干| 嗯嗯啊啊好爽| 婷婷色在线| 麻豆福利视频导航| 99热在线观看| 富二代亚洲精品99| 超碰九7免费| 免费久久一级毛片大黄| 乱人伦 国语对白:视频直接看| 超碰人妻久久人妻中文97| 超碰色图| 99操视频| aV中文麻| 99色综合| 久久久久女教师免费一区 | 国产色呦呦| 伊人991| 亚洲一二三四区| 99热超碰| 伦理第一页| 97久久精品亚洲| 久久精品一区二区三区四区五区| 久久97| 亚州综合色| 丁香婷婷激情五月天无毒不卡| 亚洲另类天堂| 五月开心久久AV官网| 国产乱伦性爱区| 东京成人一区| 亚洲欧综合另类无码一区| 亚洲AV不卡在线观看尤物| 9丨亚洲一区二区在线| 懂色AV一区二区三区| 蜜臀99久久国产| www.天天干| 国产精品欧美在线观看| 欧美熟女激情| 欧美亚男人的天堂| 亚洲十八禁止| 操迟操逼在巾线Fre看| 国产熟女二区| 丁香六月啪啪| 尤物视频视频官网| 97视频一区| 91N五十路| 天美一区在线| 亚洲精品人妻吞精av| 97碰| 高清孕妇孕交 交孕妇| 能直接看AV的网站| 蜜桃av色偷偷av老熟女| 美女大乳久久久久久久女人18| 免费的黄片有限公司| 青青草色插素人| 女人与公拘交酡2020视频| 色妹子A V| 97 视频在线| 99久久久无码精品国产人| 综合激情一一91| 日本久久精品| 熟女这里只有精品6| 操淫穴亚洲五月丁香| 一级黄色性爱A级片| 骚妻少妇精品性色无码四色A V| 97色色视频| 国产视频一区二区三区在线免费观看 | 人妻熟妇一区二区三区| 国产精品一区二区三区在线密挑| 国产精品久久久久久久毛片1| 天美传媒精品久久视频| 九色 人妻 大香蕉| 最新国产亚洲精品精品国产亚洲综合| 97精品久久| 国产地址二三| 中文字幕乱在线伦视频中文字幕乱码在线| 久射吧| 西西美女视频网| 九九热精品在线| 吖在线不卡一区二区国产剧情| 欧美青青视频| 人妻激情偷乱视频一区二区三区| 午夜理论片在线观看免费| 午夜操一操| 蜜桃精品一区二区三区久在线| 欧美色棕合| 国产久久久久久久久一区二区| 日韩熟女无码| 97在线免费看视频| 乱日视频| 国产极品999| 国产麻豆一级精品视频| 99最新日韩偷拍视频| 精品中文一区二区| 麻花豆传媒剧国产MV出差| 999热这里只有精品| 91精品婷婷国产综合久久| 欧美 传媒 麻豆 日韩 偷拍| 婷婷国产精品九区| 久久色激情一区二区三区| 免费一级毛片在线视频观看| 国产一区二区免费福利片| 夜色91| 亚洲日本大香蕉1| 欧美97日韩精品| 欧美爆操91| 欧美色偷拍| 欧美综合骚| 亚洲欧洲偷拍一区| 亚洲免费精品一区| 欧美性战999| 欧洲无码一区二区| 九一屌逼| 久久伊人青青草| 97香蕉人人乳| 久久av色| 国外91| 欧美97日韩精品| 久九9精品| 日韩综合97P| 天美传媒AV国产在线| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 变态乱伦伪娘灌肠一区二区| 男人天堂黄片| 熟妇高潮二区三区| 夜夜嗨一区二区三区直播内容| 玖玖无码超碰| 日本精品五区| 亚洲国产精品无码AV久久久| 青青操综合网| 717影院理论午夜伦八戒| 色婷婷久久| 亚洲欧美一区二区三区在钱蜜桃| n1038 一二三区| 色老牛| 美女的肌被草喷水视频| 操久久久久久| 综合网~91综合网| 九热中文字幕| 人人操人人摸人 | 色av中文字幕| 超碰97导航| 啊啊啊慢点| 亚洲少妇综合| 国产精品福利资源在线尤物| 热久久国产| 丰满的三级少妇欧美久久久| 欧美97日韩| 超碰在线成人电影| 一本色道综合久久欧美| 久久少妇人妻| 校园春色亚洲| 国产女生在线| 免费97视频| 亚洲不卡一| 伊人国产成人av网站| 欧美αv.com| 日韩国语字幕| 久久大精品乱码视频人妻熟女| 欧美亚洲首页| 久久激情亚洲精品无码?V| 婷婷丁香六月| 亚洲少妇色图自慰直播| 99少妇| 国产黄色影片在线观看| 91老熟女逼| 欧美在线综合| 偷拍 精品 另类 四区| 亚洲熟女乱综合一区二区三区| 日韩无码服务区| 亚洲图片激情综合另类| 在线观看一卡二卡| 肉丝无码中文高清| 欧美一级黄片视频在线| 五月婷婷六月激情| 88在线一区二区三区| 韩国三级一线观看久| 99久久婷婷国产综合| 性色中出| 欧美日本成人一区二区| 国产成人网| 久久99深爱久久99精品| 欧美一区二区三区另类精品| 欧美色997| 熟女91网站| 亚洲中文字幕av| 中文字幕久久亚州无码| 国产女人与拘做受视频免费| 天天日美女的B| 在线观看无码三级少妇| а√天堂资源官网在线资源| 麻豆人妻精品一区二区| 亚洲毛片久久| 天天弄天天操| 欧美 亚洲精品首页| 免费观看网黄| 加勒比性爱成人在线| 精品久久久久久AV无码| 91国产美女丝袜足交精品视频 | 爱啪精品一区| 最近2018中文字幕在线高清第一页| 青青国产精品在线| 97超碰中文在线| 在线A日本| 亚洲欧洲日产国产综合网| 97在线视频网站| 人妻少妇视频在线播放| 超碰97人人乐| 亚洲欧美大香蕉| 蜜臀久久99精品久久久电影| 午夜性生活av免费在线看| 国产11页| 老鸭窝黄色视频网站| 国产三级中文字幕粉嫩| 国产精品福利视频| 三上制服丝AV| 国产女人和拘做爰视频| 任你干在线视频| 中文字幕亚洲永久精品| 97在线亚洲| 日韩啪啪网| 性欧美| 色综合久久888| 精品熟女呻吟久久91| 91扒丝袜综合在线| 久草视频在线视频在线视频在线观看| 天天搞欧美| 国产一国产一级毛片古装| 精品人妻一区二区视频| 韩日色费| 久久久久白虎| 亚洲精品人妻在线| 中文字幕黄色片| 96久久久| 色九色久| 一区二区三区 丝袜 高跟 美腿| A级片一区| 午夜天天碰综合视频| 亚洲欧洲综合av在线| 欧美成人亚洲精品| 亚洲第一在线视频| 亚洲综合影院| 嫩草 我啊~嗯~在线| 蜜桃成人1区2区3区| 免费精品人妻一区二区三| 91色射| 91国产大片| 国内毛片免费h片在线| 色香AV| 欲色啪| 色哟哟-国产专区| 色噜噜精品一区二区三| 久久精品一区二区一8| 亚洲AV人人澡人人爱| 日韩国语字幕| 国产精品亚洲免费| 日韩性爱毛片操骚逼| 密臀在线视频| 久久久96精品| 亚洲在高跟鞋自慰久久在色线| 伊人久久综合影院| 亚洲 综合 欧美| 狠狠97| 高清无码学生妹高潮| 欧美一区二区三区互相| 男女啊啊啊啊啊| 加勒比海成人视频网| 日韩无码三级影院| 韩日色费| 中欧人妻丝袜中文字幕| 校园春色中文字幕AV| 国产欧美一区二区| 97在线观看视频| 岛国大片国产| 中文字幕五区| 99只有精品| 亚洲无线码欧洲精品区别| 岛国黄| 女生看匆91网站| PMv在线观看| 婷婷中文网| 精品999日本| 久久精品99久久久久久| 91亚洲欧洲| 久久五月视频| 亚洲清纯唯美| 波多野42部无码喷潮在线观看 | 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 91熟女视频网| 91精品无码久久久久久久| 9九九国产| 亚洲精品日韩国产欧美| 三上制服丝AV| 91在线秘 男同| 婷婷综合在线观看| 亚洲无码 国产无码| 亚洲国产欧美中日韩成人综合视频| 青青草色插素人| 亚洲高清视频在线免费观看| 超碰狠狠操| 91成人18| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 国产视频第2页| 日韩免费在线观看不卡| 一区中文字幕二区日韩| 网站A V在线| 易易A毛视频| 人妻密肉在线观看| 超碰在线人妻中文字幕| 人人操人人色人人摸| 亚洲男人天堂网久久| 免费精品国偷自产在线在线| 中出789在线视频| 操日韩第| 91美女在线看| 日本福利社| 亚洲欧美第一页| 乱码熟妇人妻久久久| 美女操逼福利视频| 在线五区| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 96精品在线| 超碰在线91| 97干天天| 爽爽淫人网| 久久激情五月| 中文字幕乱碼在线| 久草午夜| 久久人妻一区二区三区高清| 婷婷五月天激情四射| 人妻嗯啊啊在线播放| 亚州伊人色综台| 色成人Www精品永久观看| 少妇高潮九九九九九九九| 欧美成97爱| 久久久久久久久久久人妻| 极品尤物女神在线观看| 精品人妻一二三| 美女91网址| 国产第二页| 夜夜操av亚洲一区二区| 男人天堂久久精品| 免费A V在线播放| 91女优在线观看| 亚洲影视综合网| 国产高清无码一区三区二区| 免费99精品国产自在在线| 97无码视频在线播放| 超碰国产精品久| 91啦人妻| 男人天堂网址| 精品高清av中文字幕| 久久久久久网址| w w w.久久精品| 中欧人妻丝袜中文字幕| 一起草在线视频| 日本女人久久久| 九九九色| 岛国视频一二三区| 亚洲一区二区精品福利| 五月天色色网站| 91操人| 亚洲在线A| 嗯嗯嗯好爽| 婷婷丁香五月激情啪啪| 97超碰人人操人人操| 日曰骚久久精品| 91视频国品一二三区| 色九月婷婷| 国产区性爱在线视频秋霞豆| 日韩AV无码中文一区二区| 爱做久久久久久| 日本曲间由美性生活片| 金典av| 欧美亚洲手机在线| 波多野42部无码喷潮在线观看| 日韩无码三级影院| 920日本午夜免费| 99RE在线视频精品,这里只有精品| 99久在线精品99re8a| 97综合激情| 久久国产热视频97电影| 日本久操视频| 久久久久久久| 久草大| 夜夜操中文字幕| 你懂得91| 国产女人极品高潮毛片| 在线观看视频91| 色婷婷综合久久中文字幕雪峰| 色网综合网| 強姦亂倫a| 少妇高潮99p| 传媒在线观看一区二区三区| 成人午夜小视频手机在线看| 加勒比综合九九99视频在线播放| 久久久久久999| 亚洲色图 91| 91欧美综合| 91丝袜美女国产| 欧色网址| 亚洲性爱高潮影院| 亚洲资源吧| 丁香五六月啪啪| 超碰97玖玖爱| 老司机深夜影院18未满| 欧美 熟女 日韩| 日本精品高清一二区一本到| 国产自啪精品视频网站黑丝| 欧美亚洲日本激情在线| 亚洲无码com| 丁香六月激情| 黄色片一区二区三区四区五区| 韩日性爱av| 久久久久斤小| 日本色色网| 日韩电影在线观看网址| 久久精品中文| 欧美性爱第一页久久| 精品亚州18| 国产女人成人精品视频| 91亚洲人| 五月天加勒比啪| 92午夜免费福利视频| 综合第一页| oumeizonghese,www| 国产一区二区在线电影| 天天综合97| 日本三级韩国三级美三级91| 9九九九九视频在线观看| 久操操AV电影| 国产精品一区二区麻豆| 久久97资源 网| 婷色五月| 亚洲乱熟女一区二区三区大香蕉| 六月激情网| 亚洲无码国产探花在线观看| 91新在线欧美| 日本男人插女人的逼黄色| 激情久久av一区av二区av| 黄色免费网| 久草新在线| 四虎免费视频| 日日做夜狠狠爱欧美黑人| 色性荡荡荡荡视频| 亚洲成av人片色午夜乱码| 欧美中文字幕日韩在线| 91夜色| 日韩15p| 国产熟女无套内射| 日本熟妇人妻一区二区三区| 精品中文一区二区| 精品无码一区二区人妻久久蜜桃| 日韩三级在线观看mp4| 色婷婷综合久久久久中文一区二区| 岛园激情| 日本有码影片下载| 精品一区二区3区| 久久五月天婷婷丁香中文字幕| 屁股久久久久久久| 久久在线观看免费视频| 欧美精品一区二区少妇免费A片| 大香蕉九九| 3PAV乱伦视频| 乱伦一二三区| 99热最新| 九九久久久久久爱| 青青伊人久久| 久久99精品九九久久久婷婷| 色情婷婷久久五月天| 四虎在线观看网站| 亚洲综合伊人无码久久| 97视频在线免费观看| 精品一区二区三区国产 | 欧美色图自拍| 亚洲资源一区| 亚洲精品国产专区在线观看| 国产福利第一视频| 男人下部插入女人下部| 日日干夜夜欢| 欧美色www亚洲国产阿娇要播| 豆花视频操逼网址| 欧美三级不卡| 国产乱码久久久| 在线观看成人性爱免费小视频| 色牛牛AV| 久久超碰免费的| 亚洲性少妇| 久久精品国产AV一区二区三区| 国产熟女乱论| 久9久9精品| 久综合国内精品自在自线| 伊人五月天| 欧美日韩精品青青| 亚洲天堂一区二区久久| 精品国产污一区二区三区| 97在线播放| 亚洲中文日韩欧美大香蕉视频| 艳美熟妇先锋一二三区| 国产精品白丝AV| 九九性爱网| 97资源超碰| 亚州男人天堂| 性感女人网页在线观看视频| 夜夜嗨视频| 91亚·色| 国产视频人人网| 嗯嗯啊在线视频| 蜜臀久久99精品久久久久久成人小说| 17c嫩草51久久91嫩草| 中文字幕一二三区| 亚洲va有码在线天堂| 国产97视频免费观看| 性色av网站| 操穴国产| 色屁屁影院www国产| 超碰在线974| 午夜操一操| 成人五月香网在线| 91精品人妻偷情| 91亚洲色人| 天堂涩涩| 97九色人妻| 国产成人亚洲精品无码古代早漏男| 神马福利久草| 强奸乱伦动态污图免费| 变态综合色| 综合五月天| 好湿好紧好爽 视频| 青草精品视频-日本久久久久网站| 蜜臀久久99精品久久久老,,| 国产一国产一级毛片古装| 秋霞一级视频在线观看免费| 91色亚洲| 色欲人妻一区二区在线| av天堂5| 激情另类激情| 99re热| 日韩欧美经典在线观看| 干超碰碰熟女| 婷婷丁香人妻 | 国产精品视频| 欧美激情综合| 美女一区二区国产精品| 蜜臀操逼黄色视频操的好爽| 香港澳门日本三级网站| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 欧美 亚洲 偷拍自拍| 免费少妇一区二区| 久久精品国产AV一区二区三区| www亚洲欧美| 亚洲熟女诱惑| 天堂性色| 久久一二三四| 久久精品导航| 欧美激情 一区| 亚洲色图 图片| 一本久久精品中文字| 另类图片五月| 伊人影院在线理论播放| 色女女女导航| 国产美女91视频| 撸撸成人在线视频| 日韩人妻精品| 亚洲国产97在线精品一区| 97超碰欧美精品| 欧美综合天天| 97精品久久| 91啦人妻| 婷婷激情五月天小说网| 久操热线| 欧美性区| 久草毛片| 国产精品久久久久久久无码AV| 操逼免费视频无码国产| 五月婷色| 大肥女高潮bbwbbwhd视频| 亚洲精品性爱片| 97爱综合| 国产精品网址| 亚欧Av| 日本在线不卡123| 大香蕉综合| 少妇第一页| 91天堂网| 8050无码八戒| 一个人在线看的黄色电影网站| 激情四射五月天| 青青在线视频免费| 日韩无码a片| 十八禁视频网站| 第一高清av中文字幕| 熟女日韩| 国产精品久久泡妞网站| 无码精品蜜桃一区二区三区ww| 亚洲色图超碰在线| 欧美性高潮| 欧美特大黄一级片片免费| 日韩精品人妻中文字幕久久久| 天天日熟妇| 性久久久| 97久久精品国产| 蜜臀99久久国产| 亚洲欧美视| 无码人妻精品酒店| 色综合中文字幕不卡| 久久久久久久| 五月天社区| 久操免费电影| 中文字幕一区二区三区人妻少妇在线| 777超碰| 黑丝少妇在线观看| 蜜臀99久| 97欧美色资源| 九九内射在线| 日韩兔费看黄片| 国产精品。| 天天做日日做| 98超碰欧美| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 成人三一级一片aaa| 色777999综合| 91五月天| 370p日韩欧美亚洲精品| 国产不卡的视频| 亚洲一本大道中文字幕无码在线| 中文字幕AV中出| 在线黄页看毛片| 日韩激情电影中文字幕| 欧美第二页午夜| 色婷婷99| 男人的天堂2018| 亚洲日本大香蕉1| 91狠狠综合久久久久久| 亚洲,日韩,欧美,成人播放| 91精品在线播放| 极品极品色影院| 国产午夜在线观看视频| 中文有码9| 欧美一区二区三区成人性生活| 92性色国产午夜福利在线661| 九九热超碰97亚洲最新香蕉| 日本性爱少妇| 亚洲成人贴图| 91M一社| 亚洲成人精品久久久| 亚洲免费成人精品电影| 久久精品人体| 91在线精品| 日韩有码 一区二区三区| 久艹免费| 97超碰总站| 91 丝袜在线| av中文在线| 精品一级毛片在线观看| 一本大道久| 男人天堂久久日韩| 在现视频女上位好爽| 日韩AV电影网站| 亚洲免费人妻在| 亚洲AV秘 精品久久老牛影视| 亚欧毛片基地国产毛片基地| 久久久久久久唑| 综合夜夜| 岛国网址国产| 亚洲黄网在哪免费看| 欧美综合区| 在线99热| 欧美综合第一| 伊人久久亚洲中文字幕不卡| 风月影院男女十八禁| 91亚洲黄色网| www.久久制服糖| 亚洲熟女av日韩熟女| 欧美熟妇亚洲版| www.久久制服糖| 国产农村妇女精品一| 免费观看啪视频| 天天看高清麻豆| 国产亚洲欧美每日在线| 超碰97人人cao| 久久色激情一区二区三区| 最新国产精品久久精品| 国产精品熟女九色九色蜜臀| 亚州免费啪啪视频| 日韩精品在线观看网站| 99热啪啪| 青青草自拍视频在线播放| 97综合在线观看| 国产性爱欧美性爱在线| 青草地一本线一区二区三区| 大香蕉日亚洲日本亚大| 试看60秒| 9丨久久九九九 | 青草一区二区| 思思热在线观看| 97在线资源| 国产精品视频91久久| 1024人妻| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 久久精品91| 易易A毛视频| 国产精品一区av在线| 91人妻视频在线| www国产无码| 黑人性暴力毛片| 日韩亚洲中文字幕在线| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 波多野结衣被操50分钟免费视频| 天天干天天日天天射黄色| 欧美亚洲综合高清在线| 九九热免费国产视频婷婷伊人| 综合 亚洲 欧美| 99re8超碰| 国产又黄又粗的视频| 老熟女中文字幕高清| 超碰人妻天天干| 成人情色综合网| 亚洲操操操| 少妇久久久久久| 在线97在线| 亚欧韩av| 日本熟女不卡视频| 熟女精品一区二区在线观看| 曰韩成人免费视频| 天天澡天天爽日日AV| 亚洲大胆人体av| 五月激情小说| 色婷婷激一区二区三区 | 天天躁日日躁AAAXX| 久久久久深夜无码| 精品免费1| 婷婷亚洲五月***久久| 97视频在线播放| 色妇91| 国产精品乱人伊人网| 国产精品呦一区二区三区| 97狠狠| aV中文麻| 五月天亚洲网| 蜜臀久久精品久久久久视频| 色哟哟-国产专区| av一区二区三区 中文| 国内毛片热久久思思热| 天天看片青娱乐| 天天日天天干天天摸天天操| 96爱综合| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 久久久久久精品免费看A级| 91操操操操| 欧美色图综合| 亚洲欧美色图片| 九九九精品美女| av橘色网站| 亚洲国产一级中文综合久久天堂在线免费观看 | 亚洲高清欧美总合| 天天影视综合色| 欧美同性恋 的搜索结果 - 91n| 日韩欧美大力操| 欧美日韩午夜精品一区二区三区| 午夜精品人妻二区三区| 日本99一区二区| 大香蕉欧美伊| 情色五月天网| 99在线精品观看视频中文 | 欧美少妇性爱网站| 韩国三级理论在线| 天天躁日日躁AAAXX| 亚洲人精品久久久喷水| 草b在线| 精品国产72| 久久久久久波多野吉衣高潮| 自拍欧美| 人妻人久久精品中文字幕| 91精品国| 成人a v在线播放免费| 日韩无码a片| 中国亚洲呦女专区| 亚洲天堂性爱| 一区二三区四区视频大全套| 久久精品国产亚洲av水密被窝| 综合夜夜| 操我无码| 久久嫩草国产成人一区| 性感美女啊啊啊在线| 91青青草| 国产强奸超碰AV| 久久欧美1卡2卡3| 国产中文字幕在线观看| 精品国产Av无码久久久亚洲| 动漫爆乳3D奶水一区在线观看 | 人妻熟女一区在| 91精品91久久久久77777| 国产精品成人AV片免费看网站| 青娱乐国产精品| n1038 一二三区| 天天综合青苹果| 日本 欧美 国产一区| 亚洲人妖网| 国产精品久久久久无码Av网曝门| 激情综合色| 97超色| 精品伊人久久久大香线蕉小说| 日韩激情视频| 最新av中文字幕高清| 91爱综合| 中文字幕三四区| 天美av在线观看| J?P?NESEHD熟女熟妇伦| 日韩丝袜二区| AV中文字幕三四五| 亚洲成?V人片在线观看福利| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| 亚洲学生妹高清av| 亚洲91亚洲| 男女猛烈无遮掩视频免费软件| 欧美亚男人的天堂| 成全动漫视频观看免费下载| 亚洲 欧美 另类 日韩 人妻一区| 欧美激情性爱视频网站| 精品久久九| 屁屁影院一区二区三区国产| 激情人妻另类| 91人人臊| 亚洲av青草久久一区二区| 少妇国产不卡| 操逼网站视频漫画国产| 婷婷精品久久av影视| 小少妇| 欧美日本天堂| 久久久激情| 欧美精品久久久久久久丰满| 久久偷偷色综合蜜桃| 久久女人视频| 激情干在线| 日韩性爱长视频免费| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 91亚洲网| 欧美日韩精品久久久久东北老熟妇| 99在线精品观看99| 国产天美欧美| 亚洲午夜免费狠狠干| 欧美一级三级| 亚洲成人久久美女| 中文字幕精品一区二区精| 国产精品一区av在线| 色牛牛AV| 久久久久久久久久va| ?亚洲伊人伊成久久人综合网| 久久深夜无码| 久草男人天堂| 蜜臀99久久精品久久久久久| 天堂综合网| 噜噜噜亚洲精品| 暖暖精品二区三区观看| 先锋激情∨在线视频播放| 男人的天堂2010| 九月丁香婷婷| 自拍欧美| 狠狠入| 青青免费在线视频一区| 午夜免费视频1000| 玖玖草久草99蜜月一区二区三区| 四虎影视国产精品| 高清国产无码av| 亚洲午夜AV| 曰韩少妇无码| 国产又黄又爽| 波多野42部无码喷潮在线观看| 制服乱伦| 亚洲图片欧美| 青娱乐国产精品| 国产精品欧美激在线| 青青草这里只有精品| 操逼不卡中文字幕| 美腿色图| 欧美性生活免费网| 超碰97色色| 人人模人人看| 一区二区 韩日AV| 色色色99| 啊啊啊啊啊好大好舒服想要| 亚洲男人的天堂亚洲| 国产女人成人精品视频| 婷婷五月丁香五月| 国产精品一二三免费网站| 久久97资源 网| 亚洲校园激情| 精品无码一区二区三区色欲| 午夜亚洲WWW湿好大| av天堂精品久久| 快点操死我| 欧美亚洲在线| 福利操逼| 欧美最大综合网| 国产风韵犹存熟妇三区| 欧美一区二区男人天堂| 91肉片| 伊人热综合| 影音先锋乱| 天天综合色| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 国内毛片四区| 亚洲免费成人在线高清无码视频| 色悠久久久av| 欧美久久人体| 一起草高清无码| 婷婷在线视频| 97欧美日韩综合| 婷婷中文网| 日本道人妻久久久在线不卡色视频| 91人妻最真实刺激绿帽| 偷拍超碰| 亚洲欧洲精品视频发布| 97少妇人妻中文字幕久久| 2020中文在线一区二区三区| 日韩欧美偷拍美女视频| 日韩一级成人毛片免费观看 | 中文字幕 一区二区 亚洲无码| 日本媚薬中文字幕在线| 任我爽视频在线观看| 边做饭边操逼逼| 精品中文日韩字幕视频| 有码免费观看| 超碰无码加勒比| 青青草在线视频美女| 日日干日日| 国产精品婬乱一级毛片彝族| 五月天精品| 国产精品久久久蜜臀| 精品少妇人妻av久久免费| 超碰在线综合97| 性爱av网站| 日本性爱视频一级| 97视频在线观看免费高清| 一区二区三区网站日日骚| 日本丝袜人妻内射| 人人操人人色网| 亚洲天堂一区二区| 久久熟妇五十路一区| 另类专区在线观看| 亚洲精品国产熟女久久久久久| 校园春色 亚洲| 亚洲AV无码久久精品蜜桃小说| 亚洲综合精品国产一区| 无码高清操逼网址| 大香蕉伊人75| 欧美色综合网| 久艹99| 老汉网| 玖玖爱一区在线| 99re69综合| 性色高清在线| 久久只有精品一区二区三区| 久9视频| 韩国黄色片精品久久久| 日韩精品碰碰| 婷婷深爱五月| 奇米狠999| 亚洲欧综合另类无码一区| 久久精品国产亚洲AV高清演员表| 99re98| 亚洲av国产av综合av卡| 91欧洲入口| 九九久久久| 偷拍精品一区二区三区| 26UUU欧美日本| 国产精品永久免费10000| 强奸抽插av| 操比国产| 射 色综合| 亚洲中文人妻色| 日日干夜夜欢| 第二页中文字幕| 亚洲AV色图一区| 久久91| 小视频玖玖| 成人五月香网在线| 91美女看B| 亚洲欧美综合图片| 91啦人妻| 日韩av影片在线观看| 亚洲影视综合网| 国产后入清纯| 国产一二三福利视频网| 大屁股人妻女教师撅着屁股| 欧美黄色大片在线观看| 人妻久久久久久| 高清不卡 中文 人妻| 亚洲男人天堂手机版| 国模私拍一区二区三区神乳| 日本123区操B视频| 欧美一区二区一级岛国大片| 日韩欧美综合激情| 9久久9综合| 综合色一区三区二区| 秋霞一级A片黄色视频| www.婷婷| 亚洲在线观看| 国产精品呦一区二区三区| 蜜伊人色综合97| 免费岛国一级片| 激情五月激情综合网| 色97欧美| 少妇滛荡视频| 亚洲综合贴图91| 亚洲精品国产熟女久久久久久| 超碰国产情侣自拍网| 黑人娇小av在线播放| 怡红院怡春院| 啊啊啊啊网站| 亚洲图片欧美91N| 日本一区二区三区四区五区六区七区八区九区| 国产精品成人久久一区二区三区 | 日韩av电影网站| 中文字幕精品资源在线| 九九九九日本 | 91久久午夜无码鲁丝片久久人妻| 91亚洲欧美| 天堂日本亚洲欧美| 性爱视频免费网址| 99热 按摩 日韩| 国产精品一级特黄aaa大片在线观看| 欧美日韩精品国产91| 91精品久久久久五月天精品 | 久久99久久99精品免视看婷婷| 亚洲少妇视频| 久久久久久久久久久久久久久乱码| 久久久久久久性爱| 日少妇亚洲版| 成人av性爱电影在线观看| 国产精品密臀网在线观看| 欧美一级黄色18片免费看| 超碰 欧美| 亚洲一本色码中文字幕| 亚洲国产日韩欧美熟妇在线| 久久久新亚洲AV| 欧美线天码中字| 91网亚洲| 中文字幕永久在线| 国产av又色又爽又黄| 欧美亚洲中文字幕| 色操逼网| 亚洲另类天堂| 亚洲少妇激情一区二区三区| 欧美亚洲丝袜美女电影| 噜噜噜无码AV一级一级久久影院 | 啊啊啊啊好疼| 美女大乳久久久久久久女人18| 996热| 色色色色电影网| 人人操人人操人人人操|