亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

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色欧州| 日韩情色一区二区| 国产精品青青草| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 天天综合色| 久久久久9999妇女| 加勒比伊人| 欧美成人一区二区三区在线播放| 日韩人妻无码精品系列| 亚洲av噜噜噜噜噜噜| av天堂5| 性色国产东北露脸精品视频| 亚洲无码视频免费在线观看网址!| 首页中文字幕中文字幕免费| 西西美女视频网| 又粗又长又大国产不卡| 99视频只有精品| 精品一区二区2| 中文字幕一区二区日韩网| 爱射综合| 一二三区操逼国产91| 91久久婷婷| 骚熟女AV网| 人妻 丝袜美腿 中文字幕| 91黑丝美女| 狠狠色伊人亚洲综合网站色| 久草资源欧美在线视频| 亚洲色欲天天天堂色欲网女| 性色国产东北露脸精品视频| 一本大道不卡一二三区| 综合网~91综合网| 一区二区三区美女超清| 精品人妻夜夜草| 久久精品国产精品一区| 国产av白丝| 久久青青草在线视频| 日本 欧美 亚中文字幕| 搡老女人老91二区| 91久久午夜无码鲁丝片久久人妻| 日韩黄片影院| 亚洲九九爱| 日韩激情中文字幕有码| 欧洲亚洲人妻无码久久三区四区| 五月色网| 青娱乐啪啪视频| 嗯啊不要在线观看嗯啊| 黄色无码高清黄色无码网站| 99国产在线绯色一区| a片在线播放| 最新亚洲风情电影| 天天操天天干一区二区| 激情婷婷丁香网| 亚洲国产欧美中文永久| 色九九久九九| 超碰99热中文字幕| 爱做久久久久久| 超碰97国产欧美| 国内91熟女人妻丝袜天天精品视频在线 | 少妇人妻无码| 91成人在线免费视频| 无卡一区=区| 国产粉嫩出水在线播放| 色香天天| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 大香蕉综合在线| 情色日播放AV| 国产精品经典一卡久久久| 一区二区三区免费视频入口 | 一级婬片120分钟试看| 黄色视频特级毛片| 天天草AV| 欧美人妻一区| 天天综合网合集91| 欧美午夜一区二区三区| 久日91在线| 欧美18 在线观看| 成人影 天天操 亚洲| 久久粉色| 第二页中文字幕| 999精品久久久久久久| 美女被艹尤物视频| 久久华人网| 91深夜夜| 日韩电影天堂视频二区三区| 精品国产一区二区三区四区在线看| 丁香五月天婷婷姐| 91精品无码久久久久久久| 亚洲最大91网| 亚洲 暴爽 AV人人爽日日碰| 色香阁在线| 亚洲色交| yazhousetuoumei| 农村女一级毛卡片| 亚洲欧美中日韩| 欧美日韩国产成人高清| 色婷婷蜜臀av| 国产成人 综合亚洲 天堂| 精品人人| a片久久久久久久久久久久| 在线只有精品| 国产精品美女| 天天综合香 ld视频| 欧洲亚洲国产综合在线| 日本黄色XXX| 国产女性无套 免费观看| 精品久久久一本一道| 精品超碰国产| 91人妻熟女| 婷婷伊人一区| www黄片免费看com| 性色A∨91| 91久久精品国产| 激情婷婷综合久久| 国产AV天美| 日日噜噜夜夜狠狠视频无| 亚洲欧美综合网站| 激情一区二区三区在线观看| 欧美色人| 夜夜 中文视频rt| 日韩高清黄片| 成人草草视频| 日韩人妻操B| 国产多人在线观看视频| 日本精品一区二区三| 久热99| 三男一女不戴套的A片| 亚洲自拍欧美国产首页网曝| 人妻精品一区二区在线| 男人的天堂2019| 欧亚久久偷拍视频| 婷婷色网| 亚洲无码超碰免费| 九九九只有精品| 91在线页| 在线观看AV片| 精品日韩| 国产99999久久精品| 欧美日韩丝袜| 久久综合亚洲色1080p| 欧美精品不卡一二三四在线91| 成人福利视频网| 色区97| 久久亚洲天天做| 在线视频日韩欧美国产| 天天日天天干天天摸天天操| 日本天天人人狠狠在线日美女| 九色精品视频导航1| 亚洲AV色图| 亚洲国产精品久久久久婷婷青年| 国产树林里野战在线看| 亚洲 欧美 精品专区 极品| 热热色色综合| 无码91| 亚洲国产成人精品无码专区| 狠狠操,使劲操| 亚洲综合色在线| 极品白嫩福利在线| 久久久国产成人一区二区三区在线| 超碰成人人人爽人人爽| 狠狠入| 91女人的网站| 日韩成人免费电影| 91高清无码下载| 欧亚日韩中文在线| 熟妇激情| 97色视频在线| 欧美黑人性猛交91| 囯产操逼片| av毛片aaaaa免费看| 久草毛片| 白丝在线一区| 亚洲色性情三级| 国产精品久久久亚洲一区| 国产成人一级av88| 日韩性爱小视频| 精品少妇一区二区三区| 天天综合网入口~91| 亚洲欧美大| 亚洲色图欧美视频| 天天操天天射天天日| 97精品免费| 91精品91久久久久77777| 青青青艹在线视频| 日韩二三区| 蜜臀av在线播放一区二区三区| www黄片免费看com| 亚州免费啪啪视频| 深夜福利黄片| 九九综合九九综合| 久久精品国产亚洲AV先锋| 亚洲97资源| 职场同事知名国产国产精品久久欧美日韩| 嗯嗯啊啊啊好舒服| 久久熟女人| 色综合久久久久| 国产92麻豆天美精品色欲5| 亚洲色人阁| 国产乱码久久久| 超碰碰小说97| 97精品在线| 国产精品欧美激在线| 9/A片 | 亚洲欧洲激情| 超碰天天操你比| 看黑丝美女操逼青青网站| 久久草草欧美精品| 淫妻综合网| 99在线精品观看99| 任你草| 99自拍视频在线| 手机看片1024你懂的国产| 久久av一级av少妇av高潮| www亚洲免费| 婷婷爽人人婷婷爽视频| 日本乱人伦片中文三区| 妇女性内射冈站HDWWWCOM| 黄色无码高清黄色无码网站| 91中文字幕| 福利视频合集| 久久午夜色播影院免费高清| 国产精品九九九| 中文字幕三四区| 精品福利| 人人操人人舒服| 国产日韩区| 亚洲国产婷婷在线播放| 91操人| 久操不卡视频| 夜夜肏2021| 激情自拍 校园春色| 免费观看有码高清视频| 观看视频图片一区二区三区| 欧美少妇大量自拍视频在线观看| 中文字幕在线观看AV| 青青操97| 欧洲亚洲综合| 97精品视频在线播放| 日本久久久久久久久久| 天天综合网91| 日韩免费三级黄片电影| 久久久无码av精| 色五月婷婷中文字幕| 操久久久久久| 日日橹狠狠爱欧美超碰| av草草在线电影| 鸥美极品| 91中出视频| 欧美色欧美| 日本欧美韩国国产在线| 五月丁香拍拍激情综合三级| 久久99亚洲精品久久99果| www.色五月| 久久av色| 91天堂丝袜美腿| 天天综合网日韩| 日韩99精品视频综合区| 五月丁香六月婷| 国产女生在线| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 夜夜爽夜夜爽| 在线看片国产精品每日更新| 色五月av| 99精品伊人| 人妻激情视频| 十八禁av无码免费网站APP| 亚洲免费人妻在| 韩国一区二区精品亚洲| 性性久久| 超碰社区97| 日本阿v天堂在线观看| 黄色AAAAAAAAAAA大片| 丁香色色网| 午夜精品久久久99| 天天干嫩逼网| 日本熟女中文| 亚洲情色图片区| 天天久久久久久| 另类亚洲一区二区三区| 91 亚洲 欧美 日韩 国产 综合| 青青操青娱乐| 成人开心网在线视频| 在线免费观看高清无码视频| 亚洲一卡二卡在线免费| 99热在线播放| 国产中文字幕在线| 一级@啪啪视频| 亚洲男人bt天堂| 99久热精品99re6热| 人妻人久久精品中文字幕| 爱妃国产亚洲视频中文字幕| 综合熟女| 男人天堂免费| 岛国片在线播放| 嗯嗯啊中文字幕| 国精综合一二三区影视| 国产精品久久久吖| 人人操AV| 热久久无毒不卡| 日韩视频中文字幕| av大香蕉| 日本精品一区二区三| 亚州熟女乱伦| 日本三级黄页| 4虎在线视频| 日韩一卡二卡三卡| 思思热er精品视频| 大香蕉伊人网WWWn0n| 99re黄| 欧美性爱视频免费一区一A| 欧美色66| a级免费在线观看| 香蕉婷婷| rivers-china.com| 精品成人av一区二区三区在线| 日韩懂色网| 欧美日韩制服| 香蕉久久国产AV一区二区| 精品视频久久区| 国产精品白丝在线播放| 蜜臀亚洲中文| 一级AV性爱| 五月天综合网| 99精品九九九九九九| 欧美亚洲日本视频久久久 | 一二三区精品视频| 亚洲 欧美 天天| 九九五月天| 91快色色色色色| 中文字幕视频2区| 国内外内射高清视频| 可以免费观看的av| 男人的天堂视频精品乱在线| 久久亚洲AV成人精品无码| 老女人碰碰在线碰碰视频| 亚洲九九九| 中文字幕二区日韩天堂| 97久久国产| 极品尤物在线观看| 一本色道综合久久欧美日韩精品| 五月婷婷六月激情| 国产日韩美女小穴视频网站不卡| 在线99热| 一区二区三区看视频| 大香蕉久| 91春色| 亚洲精品色| 20cm女自慰在线日韩欧美| 伊人国产av| 人人操人人舒服| 中文字幕人妻色偷偷久久皮 | 六六久久日韩不卡| 欧美成人一级麻豆| 老熟女区| 亚洲精品无码成人久久久99| 偷拍亚洲情色| 屌逼麻豆| 日韩免费看在线黄色片| 国产精品一区二区后入| 国产高潮AA片免费看| 中文欧丝袜诱惑| aⅴ日韩成人电影av在线免费看av大全| 久久是精品| 国产无马av| 日本不卡中文| 日韩中文字幕熟妇人妻 | 97一区二区蜜臀| 日本性交操一区二区不卡系列| 精品人妻一区二区乱码一区二区| 91操人| 亚洲性刺激| 欧插网站| 国产精品久久99日日| 五月开心久久AV官网| 操逼视频免费日韩无码| 91美女小视频| 日韩精品操少妇| 国产福利影视| 久久久久久网址| 久极品在线观看| 97欧美| 国产天天骚| 欧美激情性爱视频网站| 欧美日韩中国x| 五月激情天| 中文字幕美女91| 夜夜嗨免费视频| 六月婷婷综合| 亲子敌伦对白在线播放| 岛国不卡超碰护士AV在线播放| 激情五月婷婷综合| Av手机版天堂网| 蜜臀AV一区二区三区激情综合| 久久内射| 综合激情一一91| 99热精品在线观看| 老熟女乱子伦中文字幕一区二区| 欧美综合色图网| 综合网欧| 婷婷五月天在线观看| 一级一性爱免费视频| 91国产丝袜美女| 野狼激情网| 国产AV久久野战精品| 91国模| 熟女精品一区二区在线观看| 丝袜制服字幕在线| 99热只有这里有精品| 亚洲色欧美| 色臀aV| 日韩伦理久 久久 清纯| 少妇滛荡视频| 久草视频观看视频在线| 97视频在线看| 亚洲色图A| 欧美在线视频播放| 久久久不能久久久久| 视频分类 国内精品| 日本黄大片在线观看视频| 久久大香蕉97| 色天欧美| 久久綜合很很很| 亚洲夜色在线| 亚洲五月天激情| 亚洲国产精品无码AV在线| 日韩免费a级毛片无码a∨| 日韩中文字幕宗合在线| 一区| 91扒丝袜综合在线| 啊啊啊好爽快点啊啊啊嗯嗯| 92午夜免费福利视频| 国产91av在线播放| 国产精品久久久啊| 亚洲在线a| 91男人综合| 内射中国少妇高清视频免费视频 | 999综合色| 日韩人妻少妇 一区二区三区| 国产午夜激片Av毛片不卡| 伊人操你| 妇女性内射冈站HDWWWCOM| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 国产精品另类| 精品国产乱码久久久影院| 日韩一级二级三级免费看完整版国语版 | 久久香蕉国产线看观看亚洲女人 | 精品九九九九| 色婷婷一区二区三区久久| 男生通女生屁股| 9ⅰ久久久天天| 中国熟女91| 都市激情人妻一区二区青青操视频| 欧美一区二区情色| 日本裸体久久色噜噜| 91xingse| 人妻嗯啊啊在线播放| 99在线精品观看99| 色色五月婷| 丁香五月电影| 亚洲操操| 爽爽歪在线视频| 台湾佬激情综合| 亚洲成人碰碰| 欧美老熟另类| 91 国产丝袜在线放观看| 人妻碰碰碰碰碰碰| 国产夜夜艹| 日本丝袜美腿人妻九九| 青青草白白色| 97超碰总站| 国产乱子伦一区二区三区免看| 亚洲色悠悠久久88| 高清不卡 中文 人妻| 欧美青青草视频| 春色综合免费| 99re久久| 中文字幕丰满人妻日本| 亚洲一区中文精品| 男女性感激情网站| 国产精品色片一区二区| www.色婷婷色综合| 欧美色图天堂在线| 中文字幕国产精品1区| 国产精品经典一卡久久久| 大香蕉欧美伊| 我爱搞逼综合网| 男人成人黄色视频在线观看免费下载| 欧美久久人体| 国产精品熟女一区二区三区| 少妇厨房愉情理伦片bd在线观看| 丰满人妻无码一区二区三区| 欧美十八禁网站| 十八禁啪啦拍视频无遮挡| 丁香六月婷婷久久综合| 中文字幕丝袜人妻| 色臀aV| 亚洲少妇视频| 国产 日韩 欧美一区| 青娱乐欧美激情一区二区| 国产AV激情无码久久无码| 亚洲国产无码精品首页久久久| AV九九| 欧美久久毛片基地| 欧美性视频二区三区| 亚洲少妇综合| 欧美性爱精品七区| 牛牛aV| 99综合免费视频| 91麻豆天美国产| 少妇高潮喷水无套久久久久久| 人妻91少妇| 亚洲高清无毛一区二区| 日韩一级欧美一级在线观看| 91碰碰| 日本一区99| 精品视频一区二区| 成人av性爱电影在线观看| 日美免费黄片| 丰满人妻一区二区三区在线| 日韩精品操少妇| 国产免费小视频| 日韩激情无码影院| 动漫爆乳3D奶水一区在线观看| 国产精品久久9| 中文字幕午夜精品久久久| 精国久久一区二区三区98| 欧美成人一级免费电影| 蜜臀久久99精品久久久久| 亚洲中文电影| 成人精品一区二区91毛片不卡| 亚洲双插| 色官网在线| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 67194无码不卡| 国产丝袜高跟美女av免费观看| 热99这里有精品综合久久| 蜜桃视频成a人v在线| 亚洲 欧美 天天| 国产成人精品一区| 黄片免费日韩| 99久久99九九99九九九| 国产精品久久久久久久久久久久久久久久 | 欧美 日韩 婷婷 五月| 91丝袜美女视频| 91爆操视频| 操美女人妻| 天天干18禁| 成人午夜小视频手机在线看| 91成人在线| 老熟女综合| 国产无套粉嫩白浆在| 99RE在线视频精品,这里只有精品| 淫淫综合网| 蜜乳AV网址| 丰满精品人妻少妇久久字幕| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 最新无码国产| 精品视频久久久久九九九九9999| 日日干夜夜欢| 中文日本免费高清| 中文字幕亚洲欧美在线不卡| 久久久久久九| 婷色五月| 日韩大香蕉| 色综合1991| 一区二区三区日韩欧美 | 国产suv精品一区二区四| 一区二区娱乐网站| 国产欧美一级在线观看| a一区二区三区乱码在线| 国产精品视频内谢女人| 国产九区| 国产av美女被艹的乱叫| chaopen97久久| 99热99re6国产在线播放| 蜜乳av首页| 青青爽| 亚洲毛片基地专区| www.婷婷五月天| 久久r精品| 韩国黄片aaaa| 狠狠躁日日躁夜夜躁A| 黄色片一区二区三区四区五区| 密臀在线免费观看| 久久永久无码人妻视频| 九九毛片这里只有精品| 97干97色| 97视频观看| 色噜噜国产精品视频一区二区| 欧美日韩999| 国产一线二线三线av| 91啪啪视频| 欧美美女视频| 日本 成 人 小说 电影 一区二区| 久久东京热久久| 中亚精品极乱| 2024年最新色情网站在线观看 | 欧美在线视频99| 东京太热男人的天堂久久久| 欧美午夜精品久久久久久3D| 国产精品另类一区大香蕉| 极品极品色影院| 少妇的嫩逼图片| 五月婷婷六月天| 九九九九久久久久| 精品网站9999| 中文字幕乱在线伦视频中文字幕乱码在线 | 狠狠色噜噜狠狠狠狠狠色综合久久 | 白丝一区| 九九成人精品| 国产精品999zyz| 欧美特黄视频网站| 污啪啪啪视频| a片在线播放| 香蕉免费一区二区三区不读| 色牛牛AV| 日本999精品视频| 免费黄色片。| 热热色青青草| 中文字幕 人妻不满 在线视频| 欧洲特黄毛片免费看欧洲毛片| 精品十三区| 国产伦乱91| 又大又大又大又粗爽高潮观看| 欧美曰韩国产精品| 亚洲色图殴美色图激情乱伦| 中文字幕在线免费观看 | 国产成人主播| 日韩精品中文字幕二区| 丰满人妻区一区二区三| 美欧老女人97| 免费精品福利在线观看| 国产传媒日韩欧美| 熟妇高潮精品一区二区三区下载| 欧美亚洲日本激情在线| 亚洲精品一区二区日本| www国产天美久久久| 日韩一区二区精品视频| 日日干男人的天堂| 天天伊人| 再深点灬舒服灬太大了好硬好爽| 艳尻美人妻| 亚洲精品97久久中文字幕| 黄色操人| 伊人久久艹| Av手机版天堂网| PMv在线观看| 国产精品麻豆成人AV艾秋| 破处bbq| 亚洲人妻在线一区| 97神马久久| 天天天天做夜夜夜夜做| 99色在线视频| 操逼www.| 国产一区二区二区按摩精品啪视频| 婷婷精品国产一区二区三区日韩| 91丨九色丨国产打屁股| 精品无码不卡视频| 亚洲毛片基地专区| 夜夜免费视频| 青青草视频久久久久| 日韩中文字幕二区| 亚洲成人性爱网站在线播放| 人妻少妇精品视频一区二区三区| 日韩av色图| 午夜天天碰综合视频| 免费看欧美美女黄色大片 | 色第一页| 婷婷中文字幕| 风流老熟女一区二区三区l| 精品一区二区三区国产| 欧美在线大香999| 欧美激情色婷婷花野真衣一区二区| 天综合网| 国产一区二区三区导航| 五十路六十路素人熟女| 久久久久久9| 久久偷偷色综合蜜桃| 97干色天堂| 男人的天堂2010| 韩国一级AAA| 成人午夜高潮av猛片| juliaann丝袜| 日本一卡二区在线| 97精品一二区| 精品国产精品一区二区| 97免费在线视频| 九九玖玖精品| 人人操人人操人人操人人操人人操人人人11.CM| 91国产在线精品| 91在线视频免费播放| 人妻喷水| 成人夜夜爽| 97精品久久| 亚洲人在线成线成人| 人人摸人人舔一区二区| 日韩性爱一级片| 97爱碰| 国模91| 久久99午夜精品一区人妻| 国产亚洲精品A在线观看下载| 大香蕉手机在线| 成人天天爽| 日日日啊啊啊| av婷婷色网| 神马视频久久久久久| 大香蕉亚洲中文| 香蕉综合网| 久久精品国产亚洲AV无码电影| 国产精品视频麻豆入口| 免费啪啪av| 天天激情综合站| 青娱乐福利99| 中文字幕美女91| 日韩免费高清大片在线| 牛牛操视频逼| 成人性爱av| 日本黄大片在线观看视频| 欧州91高潮| 亚洲色人| 超碰95| 精品三级在线专区| 国产午夜在线观看视频| 伊人黄色片| 日韩操逼HD| 岛国视频免费在线观看| 人人操,操人人| 久久久精品视频免费观看| 日韩不卡a级视频专区| www.色操逼| 91九色网| 欧美在线官网| 欧美亚洲丝袜美女电影| 日日夜夜国产综合| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 大香蕉AV丝袜| 无码人妻丰满熟妇奶水区毛片| 久久国产精品,久久国产| 国产精品色哟哟| 国产AV天美| 2019午夜福利视频| 国产精品97超碰| 91n处女在线观看| 国产精品熟女一区二区三区| 亚洲中字幕日本一区二区三区| 日日操免费视频| 操逼不卡中文字幕| 色色五月丁香| 亚洲91av| 欧美视频激情久久久久久| 2019亚洲男人天堂| 亚洲se91| 无码直播久久久| 久久无码电影| 一本一道人妻久久一区二区三区| 久久天天躁日日躁狠狠躁 | 99精品九九九九九九| 久久久人妻| 69少妇一区二区| 综合欧美日本三级| 96AV精品| 欧美熟女丝袜| 亚洲三级。日韩三级| 亚洲人成网站7777| 全免费a敌肛交毛片免费| 五月激情在线| 99xav| 91N综合网| 操逼无码操逼| 熟女视频久久| 久久超碰亚洲人| 久久久久幕乱码| 天天澡天天狠天天天做| 岛国黄色短视频| 亚欧精品久久久久久久久久久| 亚洲天堂自拍| 大逼色网站| 黄色片一区二区三区四区五区| 国产高潮AA片免费看| 日少妇亚洲版| 性感美女91影视| 久久人妻| 无码 有码 国产18p| 99热在线播放| 青青草字幕AV| 久艹日日日| 一区二区三区 日韩欧美| 97色插| 亚洲欧美激情小说| 91伊人久| 农村妇女一级二级三级视频| 成人黄页| 懂色Av| av资源在线播放天堂| 欧美精品91| 丰满人妻一区二区三区四区| 欧美性爱中文字幕无线码| 伊人综合色网| 国产美女91| 亚洲囯产精品女人久久久| 色婷婷电影| 欧美精品三区| 国产精品黑人一区二区三区| 任你草| 国产丝袜高跟美女av免费观看| 精品无码一区二区三区色欲| 五月丁香婷婷啪啪| 欧美综合 站| 欧美不卡在线一区二区| 亚洲国产第一页综合视频| 久久妇| 97这里只有精品| 日韩成人网址| 久久精品日韩专区免费观看| 久久中文字幕一区不卡| 97中文天堂| 国产白丝网站| 国产九九九九九九九九| 97精品综合久久网| 国产美女口爆吞精视频| 97天天爽| 国产精品久久泡妞网站| 日本国产欧美高清在线| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 国产一区二区三区白丝| 高清不卡视频| 大逼色网站| 色五月激情网| 96国产精品| 俄罗斯一区二区视频在线观看| 麻豆2区1区天美| 日本欧美不卡| 大香蕉人妻| 97伦综合| 99视频精品| 天天碰久久入| 日韩在线观看中文字幕视频| 欧美手机在线综合| 操逼视频免费日韩无码| 日韩一级二级三级免费看完整版国语版 | 97视频观看| 九热中文字幕| 性色一线| 天堂性色| 天天操狠狠日夜夜干超碰撸com视频在线观看 | 日本精品五区| 日本久操视频| 日韩成人无码| 91色噜噜狠狠| 久久久97| 欧美亚洲综合色| 亚洲国产精品无石码久久| 国产这里只有精品| 久久久久久久91| 另类在线| 日日骚中文字幕| 色婷婷小说| 亚欧美色| 九九热男人天堂| 午夜精品久久一区二区| 色第一页| 51一区二区三区| 亚洲精品蜜桃久久久| 无码9区| 日本成人免费一区二区三区| 欧美色图成人网一区二区 | 色综合色色| 色综合一区二区三区| 欧美综合色站| 操B在线观看| 久久久青青草| 国产av青草| 国产精品呦一区二区三区| 亚洲在线综合| 欧美男女午夜啪啪| 天天色黄色影院天天操| 激情四射婷婷六月天| 五月丁香婷婷综合| 91色人妻| 久草毛片| 东北黄色电影| 综合 欧美 亚洲 日本| 97在线公开视频| 中文字幕视频在线观看一区二区| 欧美日韩日产免费网站看| 97 国产精品| 97精品国产97久久久久久户外免费| 久热影视| 清纯唯美综合亚洲| 97硬碰| 一起草精品人妻| 亚洲国产精品成人久久蜜臀| 亚洲 另类 丝袜 自拍 动漫| 久久综合九九| 天天日天天干天天色| 成人开心网在线视频| 九久久九精品视频| 国产树林里野战在线看| 久久久久少妇| 精品无码产区一区二| 91色综| 久久亚洲AV无码专区国产精品| 精品久9| 一区二区三区成人| 鲁鲁色综合网| 国产精品色片一区二区| 九九九九热| 欧美丝袜美女电影一二三四区| 蜜臀久久99精品久久久老,,| 日韩欧美国产一区二区三区四区| 国产精品诱惑| 亚洲天堂美臀在线| 天天色悠悠激情| 亚洲成人性爱在线观看| 欧差乱伦二三| 久久久免费高清中文视频| 天天香香欲综合| 亚洲国产无码精品首页久久久| 欧美在线永久天堂| 色九久| 麻豆黄站| 大香蕉欧美伊| 在线 制服丝袜中出 人妻| 无码黑人精品一区二区三区三| 97天天综合| 欧美综合自拍亚洲综合图| 狠狠热这里都是精品| 大香蕉九九| 26uuu国产日韩综合在线观看| 超碰免费97| 天天干人妻视频| 亚洲天堂情色| 97视频在线免费看| 婷婷综合激情| 天天干夜夜一操| 影视综合无码少妇| 91老熟妇| 亚洲AV色图| 性感美女啊啊啊在线| 美女大乳久久久久久久女人18| 色五月婷婷网| 影音先锋中文字幕日本好一区二区| 一区二区三区美女超清| 蜜臀久久99精品久久久久久-DVD| 青青草华人在线欧美在线| 欧美少妇性乱| 天天日日本| 久久久久久性爱片| 无码9区| 五月婷婷基地| 抽插无码高清一区| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 亚洲欧洲综合av在线| 日本成熟少妇A∨网站| 久久久久久久九九九九| 99少妇内射| 偷拍亚洲视频一区二区三区四区| 国外91| #NAME?| 加勒比海成人视频网| 国精综合一二三区影视| 免费人人搞97| 亚洲综合有玛| 中文字幕精品人妻丝袜| 天天影视网综合少妇| 一区二区激情国产熟女| 久久久久久人妻| 亚洲超碰在线| 九九性视频| 91九九| 婷婷中文字幕| 国产精品色色| 91大学精品激情戏| 99这里只有精品| 色爱综合网| 亚洲综合五月天| 狠狠操狠狠| 久久,精品一二三| 一区二区三区精品黑丝白丝酒店对鸡| av九九| 日韩高潮一区| 日韩av女优在线免费一区| 欧美精品四区| 97九色人妻| 天堂日本亚洲欧美| 日本丝袜美腿人妻九九| 美女91在线观看| 久干网| 少妇丝袜在线观看AV| 97久久国产精品| 91操熟女视频 | 97国产精品久久久久| 九热超碰| 97ai亚洲| 91综合站| 无遮挡男女激烈动态图| 日韩三A大片在线观看| 制度丝袜99| 白嫩国模丰满一二三区| 岛国片在线观看视频亚洲| 亚洲午夜AV| 日本特黄f c2| 久久国产精品,久久国产| 白丝少妇一区二区| 日韩人妻精品| 久久午夜神马| av激情亚洲五月天| 成人一级性爱| 亚洲精品乱码久久久久久蜜桃麻豆| av资源在线播放天堂| 亚洲欧美精品一区天堂久久 | 亚洲国产第一页综合视频| 欧美日韩222| 久草精品一区 | 84YTCOM性无码| 波多野结衣被操50分钟免费视频 | 丝袜 中出 制服 人妻 美腿 中文字幕| 天天噜| 成人免费看吃奶视频网站| 欧美日韩 强奸乱伦| 亚洲天堂久久| 国产夜夜操| 亚州高清av| 一区二区影视| 日小BB小视频| 国产大学生高潮在线播放| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 国产女人极品高潮毛片| 97人人超| 中文久久一区| 天操天操夜操夜月月年年操操| 精品对白久久不卡| 成人a级高清视频在线观看| 婷婷中文网| 九九九九九九九九九九九免费国产| 色 亚洲 91| 91精品国产91熟女| 成人av福利在线观看| 伊人色综合网电影 | 亚洲清纯综合| 在线人成亚洲视频免费观看| JIZZJIZZ国产精品喷水| 91人妻超碰| 偷拍片久久| 中文字幕97| 人妻精品一区二区在线| 久久精品视频久久久| 久久精品高清无码一区| 性天堂| 亚洲一本色道中文无码aV天美| 久久免费老司机精品| 尤物视频偷拍免费| 精品国产Av无码久久久亚洲| 性爱1区| 国产美女精品| 久久黄人人爽视频| 色色色欧美| 毛片视频白嫩| 欧美图片校园春色| 成人av在线播放| 五月综合久久| 91亚洲丝袜| 欧美福利视频啊啊啊啊| 久久久网站| 欧美 亚洲 综合 制服 另类| 91在线欧美| 日本免费亚洲欧美| 欧美午夜视频| 久久精品国产亚洲5555| 亚洲色欲天天人妻无码系列专区| 青青草五月天| 亚洲欧美电影| 欧美精品日韩一区二区| 日本精品性生活久久久| 91美女网站| 久久久久国产无av| 欧美少妇高潮久久91| av激情亚洲五月天| 丁香色色网| 丰满人妻一区二区中文| 天天爽夜夜爽夜夜爽精| 97资源制服丝袜| 久久精品操| 91足交| 亚爽爽爽爽爽爽爽爽| 91在线免费精品视频| 亚洲激情综合| 亚州精品人妻一二三区| 久久国产乱子伦精品免费女人| 色婷婷aV一区二区三区麻豆综合| 欧美热图99| wwwcaobibi| 亚洲电影91| 日本欧美韩国国产在线| 婷婷伊人一区| 人妻丝袜美腿中文字幕| 婷婷亚洲综合| 91丝袜人妻| 国产精品自产拍在线观看社区| 日韩图区| 另类小说综合网| 精品九九九九九九九九九| 黑人粗大V S日韩女优视频| 大学生口爆吞精| 天天日天天射天天干| 91欧洲国产成人久久精品网站| 天天摸,夜夜摸| 外国免费性情大片| 色情综合| 天天色综合影视网| 少妇滛荡视频| 欧美线天码中字| 天天躁日日躁AAA片李宗瑞| 中文字幕一区二区三四五区日日骚| 人人做天天爱| 美女97超碰| 亚洲欧美日韩制服另类| 香蕉一区二区三区在线视频| 亚洲色婷婷久久久综合日本| 日韩欧美视频青青| 美女网站91| 日韩乱码Av| 久久亚洲AV无码白度| 久热69九色熟妇97| 少妇久久| 乱理日韩中文| 三级精品三级在线观看| 日韩精品熟妇| 午夜激情成人在线观看| 伊人一区二区三区| 影音先锋视频在线| 五月天加勒比啪| 人妻中文字幕日韩电影| 日本高清一本二本免费不卡| 国产女性无套 免费观看| 久9久9久9久9久9久9| 五月丁香综合啪啪| 免费在线视频97| 殴美牲| 视频国产成人精品日本亚洲18| 亚洲男人天堂网久久| 人人看人人插| 日韩欧美偷拍美女视频| 亚洲一卡2卡3卡4卡乱码网站| 天堂精品| 国产99热| 在线综合网| 亚洲男人的天堂AV| 欧美经典一区二区三区| 久久久久久久综合,国产| 亚洲图片欧美在线视频| 久9精品| 日韩av三四区| 国产成人亚洲精品无码古代早漏男| 人妻素股| 九九热在线精品视频| 久久永久无码人妻视频| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 亚洲蜜臀懂色|