色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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
返回資訊列表
91人妻人人澡人人爽人人精品| 人人操天天爽| 性爱综合一区二区| 后入日本1234| 99自拍B亚洲| 国产精品自产拍在线观看社区| 亚洲熟女人妻中文字幕一区二区| 九九九九精品一区| 色女99一级片在线观看| 超碰成人国产| 亚洲中文字幕久久人妻| 国产美女销魂在线观看不卡| 我爱操| 怡红院视频在线| 思思热免费在线视频| 色图综合| 9999九九九久久久| 75大香蕉| 国产精品2020| AV天堂丝袜| 国产成人无码高清| 日本精品网站在线中文| 日韩黄色片子| www.亚洲成人一区| 中文字幕AV乱伦| 天天澡天天爽日日AV| 久久久久无码一妻区| 啊好大好舒服| 懂色AV蜜臀无码精品APP| 91天天综合网| 五月天婷婷成人网| 国内毛片无遮挡国产| 91超碰在线播放| 中文字幕版| 亚洲色图激情小说| 最新欧洲欧美日本激情网站| 亚洲中文字幕噜噜噜久久久| AV中文在线可看| 五月丁香婷婷综合网| 顶级丝袜熟女一区二区三区| 色网在线视频观看免费| 东京热视频网| 亚洲春色欧美激情自拍| 人妻干天天| 91狠狠| 天天天干977| 99av| 神马久久久久久| 久久女人| 尤物网站91| 立川理惠被中出无码| 蜜臀一区二区三区在线 | 操操操操操操| 亚洲免费日韩在线一区二区| 免费网站观看www在线观| 大香蕉国产中文自拍| 99国产在线绯色一区| 黄色二级片网站| 国产精品经典一卡久久久| 少妇同性| 日韩淫色网| 日本男人插女人的逼黄色| 91国产美女丝袜足交精品视频| 综合网亚| 日韩精品人妻系列无码天堂| 亚洲交性| 国产精品嫩草影院午夜两性 | 超碰在线一区二区三区| 100啪啪视频大全| 家庭乱伦麻豆| 尤物视频视频官网| 变态乱伦伪娘灌肠一区二区| 亚洲色图日韩精品| 久久亚洲骚逼综合| AV男人天堂网| 91丝袜| 男生通女生屁股| 亚洲a色| 俄罗斯一区二区视频在线观看| 精品人妻av在线播放| 999岛国大片| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 亚洲一区二区久久久久| 99免费在线视频| 欧美日韩大陆黑人少妇99| 我爱搞逼综合网| 高清无码91| 热99这里有精品综合久久| 91人妻少妇| 少妇人妻好深太紧了vr91| 色情综合| 色香91| 风间由美日韩欧美久久| 无码一区二区精品视频久久久春药| 约操熟妇| 一级黄碟在线观看| 亚洲一区日韩精品| 激情综合婷婷| 使劲用力艹少妇视频一区二区| 日韩精品人妻中文字有码在线 | 一起草三级AV电影在线观看 | 婷婷激情丁香| 亚洲中文日韩欧美大香蕉视频| 九九RE视频在线精品| 美女久久久久久久| 亚洲视频精选| 中文久久爆乳| 欧美国产有色电影| 不卡av在线中文字幕| 日韩AV无码中文一区二区| 青青草中文-久久青草精品一区二区三 | 岛国视频一二三区| 女人天堂AV五区在线| 抽插爽| 久久久久久九| 精品久久久久久亚洲| 天天操天天看| 欧美丝袜制服久久| 大香蕉综合在线| 国产亚洲精品美女久久久| 丁香六月激情综合| 久久久天美| 国产女人与拘做受视频免费| 久久水蜜臀亚洲AV无码精品| 东京热一区二区中文字幕| 天天日夜夜爽| 久久久久女教师免费一区| 日韩中文字幕人妻视频| 物业黑人 AV一区| 99久久精品欧美国产| 久都青青视频| 丁香色狠狠色综合久久小说| 极品粉嫩少妇视频| 奇米四色影视777久久久| www鬼畜国产男人的天堂| 超碰色97| 天天综合欧美综合| 亚洲三区视频| 九九九九九九免费视频| 女同性恋久久| 玖玖久久久| 最新加勒比丝袜在线| 欧美精品69性爱| 久久天天摸| 午夜舔阴达高潮视频免费看| 亚洲成人妻日韩在线| 欧美另类综合久久| 国产综合久| 日韩成人综合网| 久久视频,这里只有精品| 熟女色综合久久| 综合网欧| 日韩中文字幕二区| 日韩97P| 性色高清在线| 午夜视频黄| 亚洲十八禁止| 亚洲男人的天堂亚洲| 国产激情在线| 亚洲天堂美臀在线| 激情五月天丁香| 中文字幕在线免费观看 | A级片日韩欧美国产欧美视频精选观看 | 精品欧美日韩在线观看| 大香蕉操久久| 先锋色眉乱伦资源| 网友自拍第1页 | 五月天婷婷在线看| 日本ZZ高免费A级视频| 日韩精品区二区三区不卡| 精品无码欧美三级| 精品人妻一二三四区视频| 国产99 中文字幕日韩小视频| 亚州91| 亚洲涩涩| 少妇蜜汁| 另类小说五月天| 五码视频在线观看| 在线天堂资源亚洲| 经典丝袜一区| 超碰公开久久网| 日本乱人伦片中文三区| 狠狠操狠狠操操| 色哟哟av| 欧美91丝袜| 天堂av2019| 日本国产欧美高清在线| 日韩欧美福利视频看看| 凹凸视频在线一区二区| 另类老少妇| 精品人妻夜夜草| 亚洲图片偷拍视频区| 欧美激情一区| 天天综合青苹果| 激情欧美日韩女同久久| 精品无码一区二区| 人人操人人狠狠操| 日本黄 R色 成 人网站| 国产日韩区| 99无码狠狠久久| 免费看黄片现成| 久久久久女教师免费一区 | 青娱乐福利99| 久久久少妇| 人人妻人人爽| 情色五月天就去干| 亚洲AV色图一区| 97超碰逼| 精品亚州18| 97干在线看| 国产超碰人人爽人人做| www.91逼逼.com| 日本操逼视频免费| 偷拍精品一区二区三区| 亚洲97在线观看| 久久 久久国内精品亚洲| 丝袜综合色图| 久久久99999久网站| 加勒比综合九九99视频在线播放| 日日干夜夜操视频h| 欧美黄页在线| 青青草在线成人视频| 亚洲成人碰碰| 久久午夜伦| 91美女中出| 久热无码| 久久国产三区| 男人的天堂激情| 欧美天天插| 色综合一区二区三巨| 色玖玖| 色综合色| 蜜臀AV成人精品蜜臀| 97色97好| 色悠久久久av| 秋霞Av理论一级在线| 中文字幕蜜乳av| 国产精品精品系列在线观看| 狠狠操官网| 天天躁日日躁xxxxx| 日本性爱不卡视频| 国语对白在线播放视频| 情侣开房子拍 日韩无码 女的很漂亮| 亚洲色图欧美色图制服丝袜| 人妻黑丝袜电影| 四虎免费视频| 久久精品熟妇丰满人妻99| 欧美综合网| 被男人添B超爽视频| 可能人人看人人摸| 91热爆在线| 怡红院一区二区熟女人妻| 六月丁香久久| 另类老少妇| 人妻铁牛TV| 国产9 9在线 | 亚洲| xxxx网站亚洲精品| 丁香六月婷婷| 99色婷婷中文字幕乱色| 丝袜AV一区二区三区| 国产区日韩区在线观看| 乱伦熟女区| 在线观看十八禁| 麻豆 亚洲 97| 欧美亚洲今日在线| 人人摸人人添人人操| 五月婷婷丁香| 强奸熟女一区二区三区| 久久超碰网| 亚洲色色探花| 香蕉一区二区三区在线视频| 国产熟女一区二区| 人妻精品一区二区在线| 久久精品免费| 日韩97超碰| 岛国免费黄色网址| 蜜桃传媒一区二区亚洲| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 男人女人18禁片免费看网站| 国产99热| 久久久96精品| 琪琪精品免费一区二区三区| 打av高清| 啊啊啊啊啊在线| 久久久精品视频免费观看| 久久久工口| 白嫩91在线亚洲| 一区二区免费电影久久| 亚洲精品 大香蕉| 亚州久久9| 欧美色欧美| 欧美一级做a爰片免费视频| 亚洲图片欧美制度| 国产精品美女| 99热婷婷一区二区三| 亚洲国产精品有声| 99热导航| 伊人激情五月天一区二区| 亚州精品丝袜-不卡成人免费| 亚洲毛片久久| 少妇滛荡视频| 大香蕉人妻久久| 人人透人人操| 熟女熟妇一区二区三区视频| 日本网色| 精品人妻久久久| 一区二区三区视频| 青草精品视频-日本久久久久网站| 亚洲av无线观看| 96国产污污污丝袜| 亚洲国产一级精品毛一级精品看免费视频| 日韩三级在线观看mp4| 国产一区二区二区按摩精品啪视频| www.五月天| 在线天堂资源亚洲| 久久久久久久久久久六六| 少妇精品久久| 一区二区三区四区久久视1| 香港澳门日本三级网站| 免费网色网站| 思思热影视| 淫乱图区| 人人看人人爰人人操| 欧美日韩国产人人| 尤物网址| 综合亚洲网| 久jiu久神马影院| 国产真实子伦对白| 91色噜噜狠狠| av无码av无码专区| 中文字幕一二三av| 啊啊啊好爽快点啊啊啊嗯嗯| 东北少妇高潮zzzz| 色www精品视频在线观看| 国产无马视频| 999精品久久久久久久| 久久久蜜桃臀无码视频| 无码视频一区二区| 国产精品自在自拍视频| 日韩精品人妻| 亚洲熟女一区| 97超级久久强资源| 激情视屏国产乱伦强奸| 干少妇视频| 国产青视频| 十八禁啪啦拍视频无遮挡| 天天网综合| 99亚洲人人| 在线国产探花| 成人性爱av| 欧美自拍网| 欧美久久毛片基地| 伊人黄色视频免费观看| 成人毛片免费| 精品美女少妇一区二区| 日欧毛片久久| 久久久艹艹艹| 人人妻人人狠人人| 天天看夜夜看日日干| 2003天天干夜夜操| 亚州色站 日韩电影| 一级性爱aaaa| 日本成人电影资源网| 欧美亚洲情色| 精品国产乱码久久久久久网站入口| 色大香蕉97N| 久久婷婷国产一区二区色| 99久久精品无码一区二区| 日韩少妇无码| 中文字幕丝袜| 亚洲视频二区| 久久综合女优| 啊好爽受不了无码| 91九久| 久久99视频| 特级毛片特黄久久免费看| 国产品精品自在在线午夜免费 | 探花熟女,姿勢到位,體驗感也到位| 97干97色| …亚洲黄色厕厕女女在线播…| 中文字幕第23区| 中文有码第五页| 亚洲AV无码天美传媒一区| 97碰在线视频| 日本免费中文字幕在线| 国产欧美日本亚洲精品| 国产日韩色综合| 日韩欧美女求操每天更新| 狠狠操天天干| 亚洲综合97中文网| 欧美伦乱爱| 中文字幕一二三av| av无码精品久久久久| 欧色综合| 欧美日韩啪啪电影| 99热这里| AV天堂因数| 亚洲天堂99| 啊啊啊好疼| 美女午夜福利免费视频| 婷婷色香| 久久亚洲AV无码专区国产精品| 欧美亚洲玖玖玖| 美女91网| 国产乱码久久| 一个色导综合| 国产视频大全| 91久久久久久久久18| 操淫穴亚洲五月丁香 | 91 丝袜在线播放| 老司机香蕉久久久久| 白 大 人妻 区 在线| 亚洲色图91| 乱老熟女一区二区三区| 国内毛片婷婷六月色| 欧美激情久久久久| 韩国黄色片精品久久久| 超碰在线免费一区二区三区| 亚洲男人天堂网久久| 人人操 欧美| 免费97视频| 五月天激情综合网| 亚洲国产精品99久久久| 天天看人人操屄犊摸阴| 少妇高潮对白在线观看| 亚洲色人阁| 日本大香蕉| 色五月综合| 三级精品三级在线观看| 新91视频.cmp| 熟妇国产免费一区| 久久熟女人| 精品久久人妻成人网| 亚洲精品第一| 先锋女优在线观看视频| 天天爱综合网| 国产污视频麻豆传媒一区二区 | 超碰 另类 欧美| 国内毛片国产专区二| 最新日本中文字幕| 久久精品一区二区三区四区五区| 亚洲精品1区| 精品国产乱码久久久久久影片| 国产人妖视频一区在线观看| 99久久精品国产系列| 91高清欧美| 欧美精品系列| 青青草原香蕉日本Ap| 97热视频在线观看| 欧美极品色| 97香焦色区| 色色色色色色色色色色色色色色综合| 人人操人人摸人| 泰国AV在线观看| www.91理论| 国产9熟妇视频网站| 五月丁香六月激情综合| 中文字幕后石码三区四区| 极品粉嫩少妇视频| 少妇内射www在线观看视频| 一区 欧美 日韩 麻豆| 久久天天躁日日躁狠狠躁| 国产视频一区二区三区久久亚洲天堂| 婷婷四五区| 啊啊好多水| 欧美色图下一页| 日日碰视频网| 亚洲精品九九九| 蜜乳视频网站| 蜜乳AV一区二区三区四| 五月天激情网站| 亚洲操逼无码| 亚洲国产欧美日韩人妻日中文| 97爱免费插| 粉嫩国产精品久久粉嫩| 色综合久久夜色精品国产天堂| 91男同| 青青草玖玖爱| а√天堂资源官网在线资源| 日韩欧美tv一区二区在线观看| 久热大香蕉| 中文字幕超碰CAO| 亚洲无码超碰免费| 色性荡荡荡荡视频| 激情小说亚洲| 亚洲综合五月天| 色综合99999| 2017av无码免费无线播| 96AV精品| 狠狠爱夜夜干| 人人操人人摸人人看人人插| 国产女人高潮视频| 99re黄| 国产精品久久久久无码A√| 激情99| 99热在线只有精品| 入口操逼网站| 中出后入| 色五天伊人| 超碰人妻中文在线| 日韩在线一区高清在线| 色呦呦国产精品免费看| 亚洲小电影免费涩涩成人在线高清| 国产蜜臀精品一区二区尤物| 人妻激情偷乱视频一区二区三区 | 欧美日韩黄片精品在线| 狠狠图片青青草| 每日更新AV| 99热在线只有精品| 日韩av熟女一区二区三区成人| 精品国产Av无码久久久亚洲| 国产欧美后入| 人人手机欧洲亚洲国产人妻| 免费AV中文网在线观看| av线电影| 宅男午夜在线视频| 一区二区影院| 试看日韩黄片| 国产青青综合伊人| AV天堂电影网| 天天干天天做| 成人三一级一片aaa| 婷婷涩嫩草鲁丝久久午夜精品| 好湿好紧好爽 视频| 亚洲综合精品国产一区| 老司机午夜精品视频| 伊人在线大香蕉视频久久| 青娱乐导航AV| 婷婷五月天补不补| 91干熟女| 91在线精品| 美女午夜福利免费视频| 蜜乳成人AV| 少妇久久| 又大又大又大又粗爽高潮观看| 高清孕妇孕交 交孕妇| 亚洲精品色| 亚洲欧美大香蕉| 色婷婷影院| 日韩性爱播放| 成人片在线播放| 精品v日韩欧美国产| 国产白嫩漂亮KTV在线| 18禁免费视频| 国产亚洲中文不卡二区| 性爱免费视频成人| 国产无马视频| 久久五月婷| 亚洲超碰在线| 亚洲日本成人动漫| 日韩久草| 嗯嗯不要视频| 国产亚洲99久久精品| 国产人妻天天干精品| 麻豆啪啪啪视频| 亚洲av无码成人精品国产| 韩国一级做A片免费的| 99久久久无码国产精品性男| 天天做天天爱天天高潮| 97高清啪啪| 狠操91,com| 大逼色网站| 亚洲国产成人精品久久久国产成人一区二区| 五十路熟女人妻一区二区三区四区五| 久久久久9999| 亚洲成人福利电影免费| 男人兔费天堂| 91路www| 人人妻人人爽一区二区三区| 巨爆乳一区二区爆乳区| 日本人妻A片成人免费看片| 一区=区三区视频| 亚州精品人妻一二三区| 中文字幕日韩专区精品系列 | 午夜久久无码1000合集| 成人贴图日韩欧美| 91色综合色| 伦激情人妻另类人妻| 亚洲天堂热| 欧美在线视频观看一二三四区高清| 男女啊啊啊| 日韩不卡a级视频专区| 欧美AB在线观看| 91色夜| 久久精品国产亚洲AV无码电影| 高清不卡视频| 日韩欧视频| 99无码视频| 亚洲熟妇综合久久久久久| 九九精品99| 久久精品亚洲东京热色播| 蜜桃久久一区二区| 啪啪一区| 偷拍精品一区二区三区| 亚洲午夜免费狠狠干| 日韩久射综合| 韩国一级婬片A片AAAAA| 嗯嗯不要 视频| 亚洲激情在线一区二区| 中文字幕欧美精品亚洲日韩蜜臀| AV免费在线播放一区| 欧美91久久久久| av2014 日韩在线中文字幕| 欧美97在线欧| 26uuu国产成人综合| 9Ⅰ老熟女| 黄网在线播放| 成人免费视瓶| 加勒比海成人视频网| 亚洲精品xxx| 疯操AV| 天美av在线观看| 天天操夜夜操狠很操| 久超碰这里只有精品| www.超碰| 搞中出久久| 国产精品大屁股999| 亚洲丝袜色| 韩日性爱av| 嗯嗯啊啊操我| 亚州男人的天堂| 开心五月天激情网| 在线免费观看日韩一区| 亚洲中文sv| 91熟女综合| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 四虎av在线| 久久深夜无码| 91国产丝袜美女| 长长久久88视频| 亚洲av无线观看| 超碰免费人妻人人| 国产精品剧情| 日本 情色 1区2区3区| 精品人妻一区二区三区-国产精品 一个人在线看的黄色电影网站 | 中文字幕熟女人妻丝袜丝| 亚洲影院小综合| 色婷婷亚洲婷婷| 国产九九九九九九九九| 国产亚洲精品av一区| 天天看天天干| 中文字幕av亚洲精品| 欧美激情内射| 男人的天堂99| 日韩啪啪视频| 天堂综合网| 91 综合网| 国内亚洲高清无码| 激情第四色| 操逼网免费无码视频| 九九九九AV| 78久久| 男啪女色黄无遮挡免费观看| 九九草| 亚欧高清| 亚洲中文日韩欧美大香蕉视频| 国产三区免费在线观看| 国产精品亚洲天堂网址| 国产精品一区二区校花| 久热色情精品| 色色99| 理论久久婷婷网 8| 亚洲欧洲国产综合av| 强被迫伦姧在线观看无码网站| 欧美后入式| 欧美一级在线观看成人| 欧美激情在线观看视频| 久久熟女嫩草成人片免费| 欧美日韩人妻婷婷一区| 久久国模av| 国产精品网站www| 日日干夜夜操视频h| 久久久久久久久久久久久久久性生活视频| 狠狠综合网| 久久九九99| 在线日韩视频| 丁香九月婷婷| 欧苏综合色综合| 色九九九九久| 色性欧美| 无码一区二区三区四区五区六区七区八区九区十区视频 | 亚州熟女乱伦| 国产中文字幕在线点播| 操逼日批| 强奸乱伦中文字幕AV| 国产久久av| 伊人黄色视频免费观看| 柠檬AV导航| 狠狠操狠狠插| 国产四虎在线| 美骚妇av高清在线| 亚洲有码第一页| 亚洲精品黑丝| 九九九偷拍| 91精品丝袜久久久久久| 婷婷五月天激情四射| 97在线免费视频| 视频一区二区三区精品| 精品国产一区二区三区在线播出| 18禁网站在线播放| 五月婷婷六月丁香| 天堂九九九九九九九九九| 国产精品情侣啪啪| 久久亚洲人妻| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 亚洲精品 欧美97色色| 美女91在线| 午夜福利1区2区3区| 国产一级操B视频| 国内外色色色色色成人视频| 91女网站| 国产高清精品一区二区三区毛片 | 91无遮挡| 免费作爱一级视频| 五月天婷婷久久| 75大香蕉| 一级AAA片一区二区三区| 国产精品爆乳懂色蜜乳| 精品一区二区综合熟妇| 婷婷日韩一区二区三区中文字幕在线| 欧美久久婷婷| 大香蕉伊人75| 国产精品女生av| 五月天激情国产综合婷婷婷| 爱爱动态试试看6 0秒| 性色高清..……| 日本在线观看网址| 亚洲AV无码成人精品久久| 中文字幕精品丝袜| 97国产精选| A一区片| 六月丁香啪啪| 欧美少妇色综合| 97视频在线播放| 亚洲成人一区二区精品| 久久啊哟| 超碰在线日韩一区| 精品视频免费在线一区| 97在线免费看| 亚洲色综网| 日韩精品在线视频在线观看| 日韩精品区二区三区不卡| 亚洲清纯唯美| 91在线秘 男同| 日本高清电影欧美色图| 午夜九九| 性久久| 日本九九久久99播| 久久伊人影院| 中文久久爆乳| 中文字幕在线2| 亚洲一区中文精品| 黑丝少妇| 玖玖综合视频| 国产尤物AV尤物在线观看不卡| 夜夜夜久久| 无套后入双马尾| 懂色AV蜜臀无码精品APP| 1二区9| 五月天婷婷在线看| 美女诱惑1区2区| 国产激情在线| 91麻豆va国产精品| 另类专区加勒比| av强奸乱轮| 欧美暴力猛交| 最新av中文字幕高清| 久久久久久久少妇| 东京热大香蕉| 婷婷五月天补不补| 中国91AV| 亚洲色吧网| 天天网综合| 大香蕉碰碰| 中文啪啪视频| 91丝袜美女视频| 涩五月婷婷| 性欧美999| 五月婷色| 好爽视频在线观看视频| 精品精品精品| 无码人妻1727| 91男女啊啊啊| 免费精品无码一级毛片牛牛影视 | 天美一二三在线观看Av| 免费看片黄| 色五月天AV| 密乳AV免费观看| 亚洲色悠悠久久88| 国产乱人伦AVA麻豆软件.| 亚洲国产蜜臀系列在线观看| 色综合网1| 欧美色干| 十八禁网站在线| 日韩一级久久毛片| 日韩精品第3页| 国产av又色又爽又黄| 男人的天堂久久狠| 色色色99| 亚欧色图在线激情| 一区二区三区 丝袜高跟| 午夜男人av| 中文字幕免费在线观看| 91大学精品激情戏| 丁香五六月啪啪| 加勒比五月天| 日韩在线观看中文字幕视频| 天天噜| 九九十八精品| 日va操| 熟妇一区二区| 欧美在线色图| 中国一区二区亚洲人妻| 久久αⅴ| 97 九色| 国产日比| 国产又色又粗又黄又爽| 大香蕉在线SuP| 又黄又爽在线观看视频| 偷拍亚洲熟女视频播放| 成人草草视频| 人人操天天爽| 人人色人人操在线| 久久久久久久免费A片国产成a人亚洲精∨品无码 | 一区二区三区精品黑丝白丝酒店对鸡| 国产美女在线精品免费看| 亚洲精品久久一区二区三区蜜桃臀| 欧美后进式| 无套内射人妻在线播放| 无码78| 丰满人妻一区二区中文| 最新加勒比丝袜在线| 亚洲无码一二三区| 亚洲欧美国产va在线播放频| 一区二区三区在线日韩影院观看| 神马视频久久久久久| 日本一级二级三级网站| 日日操免费视频| 久久久555| 亚洲宗合网| 999久久久九| 国产精品免费视频不卡| 成人无码电影在线观看网| 99在线精品视频| 亚洲综合伊人| 久久久久9999妇女| 欧美毛片在线网| 亚洲一区二区三区四区视频| 一区二区首页| 国产精品老师| 亚一综合久久久久久久久久| 亚洲影院成人| 蜜臀Av一区二区三区| 91处女视频在线观看| 热久久91婷婷| 狠狠爱综合网| 中文字幕精品区先锋资源| 日韩性爱视频在线免费观看| 东北毛片| 久热最新在线杭州| 国产美女91| 国产AB视频| 天天插天天操天天摸天天射天天看| 91色黑人少妇| 蜜色网色哟哟| 天天操av懂色| 激激五月| 日韩pv中文| 国产女人高潮视频| 97天堂| 久久婷婷视频| 天美麻花大全视频| 女人双腿搬开让男人桶| 操逼1区| 91在线视频免费播放| 老外又粗又长一晚做五次| 国产精品ww久久| 91丝袜在线观看| 色香欲综合| 国产路线专区| 综合欧美亚洲| 91黑丝在线| 91美女在线观看| av影片在线观看不卡| 日日超碰亚洲| 日韩性爱小视频| 国产黄色剧情影片麻豆免费播放| 亚洲爽图| 少妇熟女1区2区3区| 女欧美一区二三区| 色操逼网| 久干9操| 黄片www.| 五月丁香网站| oumeisetu综合| 国产精品肉丝自拍| 九九九九日本| 偷拍2020| 黑人性暴力毛片| 99中文字幕| 日韩精品资源专区二区| 亚洲春色欧美激情自拍| 国产精品爽爽v| 欧美国产伊人久久久久| 亚洲成?V人片在线观看福利| 久久久久人妻| 91亚州日韩高清| 久草色悠悠在线视频| 亚洲限制级| 好爽要喷了| 伊人网高清| 国产精品日韩在线一区| 欧美日韩操操操| 九九AV| 操我啊啊啊啊啊| 欧美 亚洲 91| 亚洲欧美清纯| 欧美性生活男人的天堂| 草莓精品视频| 花野真衣| 91在线/欧洲| 亚洲男人在线观看天堂| 午夜性生活av免费在线看| 午夜超爽| 成人av免费观看| 精品乱子一区二区三区99| 激情综合网一盗摄| 亚洲激情综合另类| 国产女人高潮嗷嗷嗷叫小说| 欧美在线干| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 日本东京热久久久电影| 欧美日韩操操操| 国产一区二区三区中文字幕| 爱爱久久| 婷婷色香伊人| 成人性爱视频在线看| 久久久婷婷| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 91人精品妻入口| 亚洲AV无码国产成人| 91啪9色| 久久精品人妻一区二区三区| 91P0RNY大屁股人妻| 一区二区三区激情在线观看| 免费看污网站| 97se亚洲| www.久久最新地址| 99丝袜福利在线播放| 欧美在线视频观看一二三四区高清| 亚洲欧美日韩激情不卡| 333kkkk·亚洲com久久| 欧美色九九九| 国际精品久久久| 一牛影视成人片免费| 国产视频三区四区| 九九九九一区| 国产精品麻豆视频网站| 18一区二区三区| 麻豆av一区二区| 中文自拍欧美影视| 欧亚成人在线视频| 亚洲无码 国产无码| www99热| 久久精品女同亚洲女同13| 黄色操人| 熟女在线视频| 久9九综合在线| 免费精品福利在线观看| 亚洲老司机123专区| 男啪女色黄无遮挡免费观看| 99在线免费观看| 日本网色| 尤物视频网 刘玥| 交换娇妻呻吟声不停中文字幕| 激情图片伦理国产一区二区日韩| 丝袜足交视频| 丁香五月综合| 99re28在线观看| 丁香五月婷婷基地| 怡红院亚洲怡春院av| 国产日逼视频| laoshunv91| 黄色片A级一区二区三区| 婷婷三区| 香蕉欧美| 色哟哟-国产专区| 成人五月天丁香激情综合| 青青草日本无码| 亚洲加勒比| 麻豆 欧美 日韩| 中文字幕欧美日韩三级| 久久啊哟| 午夜男女爽爽大片免费观看| 日韩三级网址| 日B操| 色欲色香天天天综合网www-亚洲综合国| 日本一区二区三区免费观看| 欧美老妇女内射网址| 自拍偷拍亚洲熟女妇人精品| 中文字幕78| 青娱乐国产精品| 国产自偷| 这里只有精品视频| 亚洲激情片| 熟妇一区二区三区| 黄色电影在线播放综合网站| 免费成人在线熟妇网| 无码聚合| 蜜臀99久久国产| 欧美少妇大量自拍视频在线观看| 91福利网在线观看| 操操操操网黑人| 天堂中文日本在线观看| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 欧美性爱第1 页| 99re69综合| 色嗨嗨在线| 亚洲骚逼少妇| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 亚洲欧美91√| 95人妻爽爽人人做人人澡| 97精品视频| 亚洲少妇激情视频| 亚洲AV无码国产精品久久久久 | 欧洲综合色| 人妻日日夜夜精品| 久久精品日韩| 欧美成人贴图| www四虎| 午夜偷拍久久熟女| 国产成人五月天丁香花| 淫色网综合| 欧美日韩性爱无码| 600国产精品视频| 一区 欧美 日韩 麻豆| 在线视频免费播放一区| 久久春色| 欧美在线 亚洲| 三级三级三级日本99| 国产视频一区二区三区在线免费观看| 色偷偷综合91久久噜噜| 伊人久久亚洲中文字幕| 国产不卡免费在线视频| 国产美女自拍视频| 亚熟hd视频在线| 一区二区三区精品黑丝白丝酒店对鸡 | 人看人人摸人人操| 亚洲爽图| 果冻传媒一区二区三区| 人人喜人人妻| 手机看片1024你懂的国产| 亚洲熟妇一,二,三期| 欧美激情一| 亚洲视频,小说| 日本在线一二| 国产女人操逼视频| 热思思免费视频| 深喉吞精| 精品久久9| 亚洲熟女综合| 久热99| 午夜福利免费福利视频| 中文AV制服乱伦| 91精品人妻一品二品三品| 99热这里只有是精品10| 中文字幕一区 二 区 三 四 五 区日 日 骚| 91足交| 精品久久久久久中文字幕三区| 综合 亚洲 欧美| 热热色综合网| 国产久久日| 亚洲天堂精品日韩电影| 欧美视频一区二区三区| 中文字幕精品久久久久人妻红杏ⅰ| 九九热九九热| 色婷婷影院| av凤凰久久久| 亚洲天堂人妻熟妇视频| 白丝被操91| 中文字幕蜜乳av| 超碰99在线| 天天干夜夜操一区二区| 超碰天天操| 青青草色情网站视频| 久久久亚洲精品电影免费看| 日本污ww视频网站| 日本欧美一区二区三区免费| 国产隔壁老王影院在线| 日本人妻丰满熟妇久久久久久| 天堂成人网| 奶水 人妻 哺乳 在线| 色婷婷A V一二三四区麻豆综合| 97超碰总站| 91色色综合| 成人精品欧洲亚洲| 中文字幕精品乱码| 密臀AV在线| 神马久久久久久久久久| 久久国产视频专区一二三| 九九九午夜| 熟妇亚洲一区二区三区| 有码免费观看| 亚洲欧美中日韩| 9热9热综合网| 国产亚卅97| 亚洲 欧美 另类 日韩 人妻一区| 国产乱弄免费在线视频。| 91久久18禁| 蜜屁Av| 四虎影视永久在线观看精品免费网站| 午夜福利在线合集| 大香蕉92| 超碰色大香蕉| 久久粉色| 久久六六| 综合av社区| 久久亚洲AV无码专区首页| 亚洲一级特黄大片在线播放91| 无码免费精品高清| aaa一级黄片| 密桃99999| 91在线限制级| 91高跟美女在线播放| 久久同城AV| 91精品国| 不卡在线观看视频| 日韩欧美大片免费高清啪啪| 性色av大全| 91成人在线免费视频| 色婷婷色99国产综合精品| 夜夜一区二区| 色眯眯射| 美女爽爽爽刺痛洞洞| 欧美操逼录像国产黄色国产| 欧美乱欲| 中文人妻av高清一区| 久久一级无码精品毛片6| 色五月综合网| 日日日啊啊啊| 国产精品久久久久999| 中文字幕乱妇免费视频| 欧美性爱精品七区| av网页一区二区三区| 久久人人看| 青青草在线成人视频| 九九热精彩视频| 九九九国产| 黄片qw| 9999免费精彩视频| 日本人妻一区二区| 嗯嗯啊啊的视频| 久久久久久久| 无码人妻精品一区二区中文| 欧美国产日韩高清在线| 91丨国产丨白浆| 色香综合天天影视综合| 萌白酱自拍视频| 中文字幕二区| 国产一级高清免费观看|