色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合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
返回資訊列表
无色无码| 人人色人人操在线| 96精品在线| 国产亚洲精品美女久久久久久2021| 香蕉99秘 一区精品蜜桃臀| 99热超碰| 黄页av| 亚洲日韩美国人妻| 黄色乱论网站| 小说区 图片区色 综合区| 伦理片秋霞免费影院| 夜夜狼人妻| 床戏久久久av一区二区麻豆| 精品精品精品| 啊啊嗯嗯好爽| 日韩精品一区二区三区四虎影视| 208天天久久九九九| 99这里只有精品国产| 日本三级小说中文字幕| 日本国产欧美一区三区二区| 久久99国产综合精品女同| 清纯唯美亚洲综合| 97久久国产精品| 99久在线精品99re8| 9国产超碰| 91 国产丝袜在线放观看| 97视频在线免费播放| PMv在线观看| 欧亚 另类 久| 五月天婷婷久久| 97欧美综合网| 亚洲成人一二三区| 欧美激情性久久久久久| 中文字幕第23区| 久久美女国产| 色婷网| 国产热av| 人妻aa| 成人精品视频| 国产亚洲色婷婷99精品91| 青草综合| 超碰在线第一页| 91伊人久| 男人的天堂久久狠| 五月丁香综合网| 五月丁香激情四射| 伊蕉97蜜桃97狠狠综合干| 中文人妻av高清一区| 啊好爽快点-国产一区二区三区撒尿在线-成人AV | 亚洲国产丝袜在线观看| 91精品国产高清久久久久久,亚洲成人| 综合网,亚洲,欧美| 夜草欧美| 日韩欧美一级特黄大片| 国产超碰| 色色九区| 免费操逼91| 天天干嫩逼网| 国产中文福利| 精品人妻中文字幕4399| 就去色综合| 久操九九九九| 激情五月丁香五月| 无码久久亚洲高清,| 欧美日韩*字幕一区| 亚洲国产美女久久久久| 国产亚洲精品美女久久久| 看免费一级在线播放毛片| 日韩性爱1级片视频| 免费观看网黄| 人妻久久| 久久久熟妇熟女国产| 国产精品色色| 大香蕉九九| 中文字幕无码不卡啪啪| 欧美白嫩在线放| 91精品人妻一品二品三品| 国产AV天美| 天天搞在线综合网| 国产隔壁老王影院在线| 欧美日韩国产另类综合| 亚洲精品乱码线路中文字幕| 国产亚洲欧美每日在线| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 夜夜综合| 99国产精品自在自在| 亚洲无码com| 操操吧亚洲乱伦视频| 超碰久久性爱| 欧美Ⅴ性爱| 97超碰色屌| 97精品国产手机| 综合干干干av久久久综合网 | 性吧在线视频| 亚洲国产尤物yw在线观看| 97国产超湿| 在线小视频| 午夜精品一区二区三区三上悠亚| 日日日日做夜夜夜夜无码| 亚洲人成网站7777| 爱射综合| 亚洲成人一区二区精品| 啪啪视频mP4| 亚洲资源站| 亚洲一区二区三区春色| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 日韩无限资源| 热思思免费视频| 一本色道久久综合熟妇| 秋霞无码av鲁丝片一区| 99热 按摩 日韩| 日本东京热加勒比久久| 啊好爽受不了无码| 蜜乳成人AV| 一区中文字幕二区日韩| 美女写真| 国产传媒午夜理伦精品| hd成人一区二区在线| 夜夜操夜夜爽夜夜高潮| 一个人免费HD91视频| 国产精品毛片| 久久一二区四| AV 少妇 人妻 偷拍| 伊人操你| 中文字幕国产在线天堂| 99精品九九九九九九| 啊a一区在线| 在线观看中文av字幕| 抽插亚洲无码| 亚洲自拍另类丝袜综合| 欧美日韩夜夜| 日韩情色视频| 色噜噜人妻丝袜a∨先锋影| 午夜美女福利视频| 亚洲精品欧洲色| 亚洲人精品午夜不卡| 国产夜夜艹| 五月天社区| 亚洲啪AⅤ永久无码| 天天cao在线| 嗯~啊~轻一点 视频| 9997se| 97精品国产97久久久| www.久久| 97在线国产精品| 国产久久一区二区午夜| 新婚人妻扶着粗大强行坐下| 伊人女女资源在线观看| 精品区国产区一区二区三区| 特级毛片特黄久久免费看| 在线免费观看日韩一区| 啪啪AV导航| 日韩免费在线视频观看| 最新日日夜夜天天干干| 99在线免费公开视频| 一牛影视成人片免费| 不卡av在线中文字幕| 日韩精品在线放| 国产精品爽爽v| 国产亚洲精品av一区| 欧美午夜一区二区三区| 色五月av| 亚洲啪啪啪啪视香蕉| 亚洲精品欧美专业| 日韩免费福利在线观看| 久草尤物| 五月丁香色情| 伊人大香蕉在线| 久久综合女优| 天天干人妻视频| 97欧美超碰| 日韩操啪| 国内偷自视频区视频综合| 色在线亚洲视频www| 日韩av在线免费网站| 久久一二三四五六七八九区区区 | 麻豆精品三区视频| 外国91| 欧洲欧美视频一区二区| 欧日韩不卡视.频| 超碰98综合网| 五月天婷婷在线看 | 97 国产一区| 超碰在线综合97| 在线观看午夜婷婷久久久久清性观看| 亚洲 欧美 另类 日韩 人妻一区| 亚洲高清综合网| 中文字幕一区二区韩| 五月天黄色激情视频| 诱惑人妻欧美一区在线播放| 91伊人久| 久久久久久久久久久久九| 人人澡人人干| 欧美九九九九九| 亚洲AV无码秘 蜜桃臀国精产品| 国产日韩精品suv| 91精品成人| 国产精品自在线发布| 亚洲男人久久综合天堂| 亚洲一区二区久久久久| 无码乱人伦中文视频| 亚洲中文字幕网| 色综合色色| 欧美亚洲日韩人妻在线观看| 91精品伊人久久久大香线蕉91| 欧美一级在线观看成人| 啪啪AV导航| 五月天社区| 日本熟女中文| 天天综合香 ld视频| 亚洲欧美精品一区天堂久久 | 日韩精品中文字幕二区| 韩国一区二区精品亚洲| 9997se| 国产精品熟女一区二区三区| 国产精品无码久久久久2025| 无遮挡一级毛片视频免费的| 再深点灬舒服灬太大了好硬好爽| 日本一天色道久久久精品视频| 激情久久日韩精品中文字幕麻豆| 亚洲欧美第一页| 美国aaaaa一级黄片| 老汉网| 日韩黄片影院| 亚洲欧美精品福利在线| 国产地址二三| 国产一在线观看| 黄色小说亚洲| 中文字幕三四区| 色婷婷电影| 精品人妻伦一区二区三区久久| 狠狠色五月亚洲91| av天堂5| 后入式999| 黄片qw| 婷婷色导航| 亚洲丝袜色图| 性综合网| 精品亚洲黄色片 国产精品导航一区二区 | 激情小说亚洲| 大香蕉十区| 啊啊啊啊操死我| 亚洲欧洲小说图片视频 | 欧美日韩91| 超碰地址97| 在线不欧美| 亚洲男人天堂Av| 免费视频观看60秒| 精品国产少妇高潮视频| 五月丁香黄色网| 婷婷色香| 亚洲高清无码免费观看视频| 日本三级精品| 91成人在线| 国产精品日韩在线一区| 男人的天堂三级| 图片区小说区| 日本在线999| 天美麻豆精品视频99| 免费无码国产精品v片在线观看| 夜夜免费视频| 91扒丝袜综合在线| 色综合五月天| 性videos欧美熟妇hdx| 极品粉嫩少妇视频| 偷窥自拍亚洲色图| 99热9| 色网在线视频观看免费| 亚洲全色网| 大香蕉99热| 欧美另类综合久久| 男女激情黄色网址| 美女黄页网站| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 五月婷婷hd| 琪琪精品免费一区二区三区| 中文字幕后石码三区四区| 91超碰在线观看| 久久精品一区| 日本不卡高清免v欧美日韩在线观看| 18禁的网站在线| 97超碰人人操人人操| 老熟乱一区二区三区四区| 东京热熟女亚洲视频网站| 亚洲av总站| 欧美精品另类人妖xxxx| 操狠狠| 亚洲午夜免费狠狠干| 99操逼| 中文字幕在线24| 玖玖视频在线资源一区二区三区| 91在线页| 超碰538| 人妻酒店出差被中出免费在线播放| 免费人成?大片在线播放| 97在线免费| 极品销魂美女一区二区| 影音先锋中文字幕日本好一区二区| 人人妻人人玩人人澡人人爽| 乱伦一二三| 亚洲伊人a线观看视频| 在线综合 亚洲 欧美中文字幕| 手机看片91人妻| 无马一区二区| 中国AAAAAA黄色片| 婷婷丁香九月| 亚洲欧美日韩综合在线尤物 | 国产一区二区三区视频在线看| 天天综合网日韩| 乱伦熟女论坛| 中文字幕精品一区二区精品| 91丝袜美腿网站| 欧亚成人在线视频| 天天综合网在线观看| 色婷婷国产精品一区在线观看| 久干网| 欧美97在线欧| 人人透人人操| 蜜桃丰满熟妇av无码区不卡| 欧美一区二区三区互相| 人人做人人妻人人夜视频| 久久久夜夜嗨免费视频| 精品久久九| 亚洲男人天堂av| 黄色激情电影在线观看| AA丁香综合激情| 99热在线不卡| 激情文学88| 日韩精品中文字幕二区| 欧美91久久久久| 美国日韩黄片| 天天日天天舔| 91天堂网| 日本不卡高清免v欧美日韩在线观看| 亚州高清色综合| 欧美精品三区| 人人操人人大香蕉| 日本欧美一区二区三区免费| 热久日综合| 亚洲凸凹超碰成人| 精品中文字幕一区二区| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 欧美精品久久| 尤物国产一区在线观看| 久久大香蕉97| 啊a一区在线| 久久男人精品| 91亚洲欧洲| 国产精品一区二区在钱播放| 国产精品不卡av免费在线观看| 嗯嗯嗯,草死我| 国产 热久久久久国产精品| 欧美成人四级在线播放| 国产精品女久久久久av爽| 亚洲精品美女久久久久久久久| 国产精品极品美女视频| 嗯嗯啊啊啊好爽| 色999亚洲人成色| 97色97干| 亚洲情色 无码专区| 午夜精品一区二区三区三上悠亚| 亚洲va有码在线天堂| 久久久偷拍| 99国产精品免费| 五月丁香综合| 亚洲国产一区二区入口| 超碰午夜| 色女综合| 啊啊啊操一区| 亚洲色诱惑| 操操逼视频| 日韩情色一区二区| 看看小穴| 性色中出| 国产欧美日韩臀 | 一区二区三区四区色图| 欧美国产日韩高清在线| 囯产乱伦一区二区三女| 思思热er精品视频| 粉嫩av在线| 日日干夜夜操视频h| 91无码中出人妻视频| 偷拍自拍在线视频观看| 97综合在线| 夜嗨影院| 亚洲中文字幕三级在线| 校园春色亚洲欧洲| 丰满美女一级毛片在线播放| 毛片久久| 人人摸人人添人人操| 午夜福利免费精品视频| 九月色婷婷| 99热婷婷| 欧亚成人在线视频| 亚洲网自拍| 久久久久96| 久久精品熟妇丰满人妻99| 少妇久久久久久| 精品欧美老熟女一二区| 日韩国产在线观看av| 久久久久久久亚洲Av无码| 丁香五月婷婷基地| 性色av一区二区| 久久岛国| 婷婷亚洲五月***久久| 日韩二级| 超碰97 线线 在现| 亚洲AV性爱电影| 97精品国产97久久久久久户外免费| 久久av网| 日本黄色精品专区网站| 在线国产福利网址导航| 97视频在线免费看| 精品久9| 91爆操视频| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 人人 操人人 操人人| 天天干天天插| 中文字幕视频二区| 在线国产探花| 最新制服中文第一页| 91青青草| 久久大香蕉手机高清| 99超碰碰| 天堂av最新电影网| 亚洲男人的天堂亚洲| 国产成人www免费人成看片| 操99| 啊啊啊好湿国产一二| 99操| 日韩熟女三十乱伦| 精品一区二区人妖| 久久AV无码1区2区3区| 成人影 天天操 亚洲| 国产精品69久久久久孕妇欧美| 久久超碰98| 亚洲好色人妻| 亚洲一卡2卡3卡4卡乱码网站| julia高潮后不停追击中出| AV和黑人在线播放| 亚洲国产麻豆一区二区三区| 欧美性后入| 粉嫩少妇自慰在线| 91人妻人人澡人人爽人人精品| 日韩亚洲中文字幕在线| 97爱免费插| 极品肉射| 99久热| 久久中文字幕人妻熟av女蜜柚| 亚洲精品乱码线路中文字幕| 婷婷色色五月天| 麻豆黄色五月天| 色综合91好| 老司机射| 91男女| 久久久九九网站| 91欧美性| 99热只有这里有精品| 天天躁狠狠躁av| 日韩小电影| 337p大胆噜噜噜噜噜91Av| 91撸色网 玖玖网 欧美| 日本一级特级毛片视频| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 午夜毛片亚洲精品片国产久久久| 尤物一级在线免费观看| 日本三级精品| 曰韩av中文字幕专区| 亚洲日韩狠狠撸视频| 激情开心五月天| 操国产逼| 欧美性爱一内片一区二区三区| 精品人成视频在线观看| 天天在线91| 亚洲熟妇自偷自拍另欧美| 懂色av色欲av蜜臀av| 超碰久超碰久| 亚洲天堂,男人| 日韩大香蕉| 97视频在线观看播放与子乱对白在线……| 成人性爱AV在线免费观看| 久久偷偷色综合蜜桃| 一二三啪啪专区| 激情五月综合| 成人无码在线超碰网| 色天堂在线观看| 高清不卡视频| 婷婷色香伊人| 亚洲午夜精品久久久中文影院| 美日韩一二三区| 亚洲国产高清福利视频| 中文字幕中文字幕一区二区| 熟女这里只有精品6| 欧美性夜| 亚洲少妇色| 日逼国产| 亚91亚洲网| 啊啊啊慢点| 亚洲中文字幕97久久精品少妇| 淫纸中9区| AV高清一区| 九九热精品| 人人操人人色网| 日本黄色精品| 久草精品在线| 色偷偷综合91久久噜噜| 超碰日韩美妻| 男人的天堂久久| 91bbbbbb| 久久久久久99AV无码免费网站| 欧美一级二级三级| 日韩三级在线观看网站| 岛国1区2区3区在线观看| 91人人| 成人性交免费视频| 最新国内自拍av免费| 色吧91| 综合av社区| 国产男人又猛又粗又爽| 熟妇熟女视频一区二区三区| 亚洲男人天堂网久久| 亚洲男人bt天堂| 久久久成人精品| 超碰久久网| 午夜一区| 久精品无码av一区二免费国产在线观看 | 99热这里只有精品1| 久久久九九| 97在线公开视频| 97在线免费公开视频| 99色网| 国产传媒午夜理伦精品| 人妻无一区二区三区| 搡老女人老91二区| 中日韩免费看男女操逼大全| 日日操丁香五月天| 国产黄色动态精品| 欧美第二页| 老司机午夜精品视频| 99久久久无码精品国产人| 偷窥自拍亚洲天堂网爆| 91性高| 久久久四区| 欧美色视频在线| 久久手机好看网站| 九九九九九精品| 天天精品| 1956日韩精品| 好爽视频在线观看视频| 日韩不卡毛片Av免费高清| 久久精品72| 久久在肏| 长长久久88视频| 亚洲丝袜少妇在线| 久久久九97| 97在线观| 婷婷综合在线观看| 东北操逼| 日本精品第一视频在'| 四虎免费视频| 欧美亚洲日本激情在线| 97资源亚洲| 欧插网站| 天天弄天天操| 欧美韩日精品99综合| 国模精品一区二区三区苹果色戒| 超碰在线在公开超碰在线在公开| 成人三级片无码| 97在线亚洲| 日韩成人网址| 啪啪视频免费在线观看| 嗯嗯啊啊操死我| 久久av无码| 97视频网站在线观看| 欧美人人操人人插| 日韩精品国模| 亚洲一卡2卡3卡4卡乱码网站 | 国产AV超爽| 啊啊啊爽爽| 99热导航| 成人无码专区精品视频| 久久久免费的精品| 夜夜嗨一区二区三区三州加勒比| 国产亚洲精品av一区| 五月天人妻综合| 九月丁香婷婷色| 清纯唯美第一页| 久久精彩视频9| 色播综合| 偷拍超碰| 日韩有码一区三区| 欧美性生活免费网| 正宗无毛一线天嫩逼| 麻豆精品久久久久久久| 翔田千里A片一区二区| 日日夜夜天天| 国产www色在线观看| 亚洲 欧美 日韩 国产一区二区| 超碰97首页| 五月婷丁香| 伊人影院综合是一个与深夜成人在线 | 一二三四视频在线社区中文字幕| 91精品无码人妻系列| 亚洲少妇激情一区二区三区| 超碰在线97国产| 日韩AV电影网站| 亚洲超碰在线| 色五月婷婷网| 国产无马av| 中文字幕高清20页视频| 日韩在线观看中文字幕视频| 久热精品色情| 自拍二页| 女人一区| 日韩欧美久久婷婷网站| 日韩不卡一二三四| 亚洲欧美综合网| 青娱乐 青青青操 日逼| 亚洲操操操无码| 理论久久婷婷网8| 97干在线视频| 色综合一本| 国产高清在线自在拍69| 欧美图片校园春色| 夜夜欧美 | 日本一区二区亚洲综合| A片A5445444| 十八禁成人网站在线观看| 熟女乱伦二区| 亚洲黑丝在线| 粘花网06av视频| 久久午夜伦| 91欧美偷拍| 亚拍在线| 国产精品白丝在线播放| 99久久婷婷| 国产十八禁视频| 97天堂| 神马久久久久久伦理片| 天天躁日日躁成人字幕aⅴ| 天美精品原创av片国产| 在线有码中文字幕| 日韩久久激情精品| 五月婷婷AV| 麻豆AV短剧| 日日摸日日碰| 婷婷av在线中文字幕| 综合久| 嗯嗯啊在线视频| 久久亚洲天堂| 91色伦| 国产福利在线视频网站| www.一本大99| 97久久久网站| 亚洲精品影视老司机| 精品国产乱码久久久久久口爆网站| 国模限制级电影| 丝袜性亚洲| 国内外毛片在线观看| av天堂精品久久| 玖玖爱一区在线| 日韩一级二级三级| 久久超碰爱| 亚洲不雅视频1区二区| 每日更新AV| 国内外毛片在线观看| 亚洲AV秘无码一区..| 偷拍欧美激情| 色综合V| 久热久操| 国产又色又爽又舒服的三级视频| 夜夜嗨TV| 理论久久婷婷网 8| 高潮毛片无遮挡高清免费| 熟女五十路一区二区三| 亚洲电影91| 天天躁日日躁XXXXYY| 色哟哟av网址| 国产精品美女久久久久AⅤ国产馆| 天天日老熟妇| 日韩在线欧美精品一区二区| 97超级欧美| 亚洲精品a人片在线观看视| 九九九只有精品| 亚洲情色1区| 三级激情网站| 九七毛片九九毛片 | 九九久久一区二区三区| 一区二区三区四区免费视频| 日韩特一级久久| 爆乳免费黄网站| 国产av激情无码久久天堂| 国产青一二三| 岛国大片国产| 九一国产精品| 欧美综合制服在线| 日韩精品 资源| 白天啪啪晚上啪啪视频| 狠狠色伊人亚洲综合网站色| 久久久精品九| 精品96久久| 97色色婷婷| 亚洲天堂一区二区久久| 大香蕉淫人网| 久久精品一区一起草| 成人久久精品| 精品然女一区二区| 有码免费观看| 夜夜爽爽爽| 久久久久亚洲Aⅴ无码| 97超碰中文在线| 人妻铁牛TV| 亚洲日韩美女丝袜美腿人妻视频| 天天久久久久久| 国产欧洲精品亚洲午夜拍精品| 色狠狠综合噜一二三区| 久久久久13| 欧美精品日韩久久久九| 日韩免费三级黄片电影| 久久精品黄色| 黄色交缠性感爆操91国产精品免费一区二区三区| av大香蕉网站| 欧美综合在线91| 久久97超碰香蕉| 青青草精玖玖69精品| 1956日韩精品| 强奸乱伦大香蕉网| 精品一啪| 国产Aα| 国产粉嫩出水在线播放| 人妻少妇色综合| 九九英色视频| 色香91| 欧美97色| 久久无码成人| 一区二区三区机械有限公司| 东京热亚洲一区二区| 亚洲和欧美裸体美女双飞视频| 白嫩国模丰满一二三区| 日韩美脚一区二区网站| 粉嫩国产精品久久久| 欧美亚洲激情一二三| 欧美综合网A| 大香蕉久久| 国产又黄又粗的视频| 丁香五月天激情网站| 东京热免费视频| 久久99精品国产| 极品白嫩美少妇在地板上位骑射淫水泛滥| 亚洲一级性爱视频免费看| 大香蕉综合| 1204av韩国| 国产suv精品一区| 国产女人和拘做爰视频| 67914亚洲精品| 亚洲色欧| 午夜小电影在线插入淫高潮 | 青青伊人加勒比海| 在线人成亚洲视频免费观看| 亚洲AV成人在线| 不卡超碰护士AV在线免费播放| 国产精品69久久久久久久| 欧美激情性爱视频网站| 狠狠狠狠狠狠| 久久av网| 狠狠色伊人亚洲综合网站色| 午夜激情床戏激情| 国产强奸乱伦第1页| 丁香五月大香蕉| 成人精品久久| 操逼网免费无码视频| 日韩亚洲美女一区久久| 四虎在线视频| 欧美黄色大片在线观看| 日日夜夜草草草| 国产人伦a片信息免费片| 久久神马影院| 黄色高清无码无码破解免费暗网| 天天操天天日青青草超碰av| 嗯啊抽插大香蕉网页| 天天日天天操VV| 色综合色欲色综合色综合色综合| 亚洲,欧美,综合网| 偷窥自拍亚洲天堂网爆| 九九综合九九综合| 亚洲人久久久网| 成人午夜小视频手机在线看| daxiangjiao你懂的| 天天干天天狼在线视频| 国产区在线| 九九久久一区二区三区| 啪一啪免费视频| 亚洲成人帖图| 欧美第一页性| 精品国产一区二区三区在线播出| 午夜欧美J进J出白浆流出久久久| 99精品九九九九九九| 97se综合网| 99人人干| 亚洲第一页色网| 91伊人影视综合| 日产狠狠干| 人人操人人操草草| 中文字幕天堂在线| 玖玖久久久| 欧美日不卡| 熟妇色99| 韩国女主播青草在线| 色区久久| 国产亚州精品美女久久久免费| 精品少妇高潮久久| 97网址97| 99热 按摩 日韩| www.狠狠干.coom| 日韩欧美国产高清视频| 欧美日韩狠狠爱| 亚欧美无遮挡| 国产精品另类| 久久久久白虎| 午夜福利合集| 大香蕉人妻久久| 久久久久96| 欧美精品,四区。五区| 1024亚洲中文字幕久在线看片你懂的| 久久精视频美日韩在线视频| 97在线观看播放视频| 国产欧美日本亚洲精品| 91人妻人人澡人人爽人人精品| 精品视频久久区| 女同性恋中文字幕| 99999re| 97超碰中文在线| 中文字幕一区二区无码成人| 熟妇一区,二区,三区。| 日韩传媒在线| 日本天堂在线播放| 色欧洲| 亚洲97精品| 性91| 久久首页| 日韩精品 资源| 欧美久久久15P| 日韩中文字幕av在线播放| 欧美大色交| 美女毛片999| 久久精品国产97欧美精品亚洲 | 亚洲色图激情小说| 日本丝袜美腿人妻九九| 日本熟妇精品九九| 久久9久久| 日日骚网站| 曰韩精品视频一区二区| 女优视频第10页| 色欲久久99精品久久| 久久是精品| 欧美 日韩第一性色| 夜夜操美女| 超碰97欧美在线| 好爽要喷了| 综合亚洲欧美精品日韩?v| 人人操人人摸人人看人人干| 久九九九九九九热| 竹菊一区二区三区AV线| 国产精品熟女一区二区三区| 秋霞久久亚洲精品成人| 91粉芽高清在线一区二区| 伊人色综合欧美| 极品销魂美女一区二区| 丁香五月激情啪啪| 碰人碰碰人人开房人肉| 成全动漫视频观看免费下载| 丁香婷婷久久| 久久精品人妻一区二区三区| 欧美性生活免费网| 91精品综合久久久久久五月丁香| 蜜桃精品视频一区二区三区| 天天做日日做| 天天综合网入口~91| 岛国黄片网站| 亚洲诱惑| 国产超碰| 欧美成人精品一区| 91一区二区| 97超碰色色| 丁香婷婷久久 | 大香蕉啪啪啪| 夜色综合| 十八禁啪啦拍视频无遮挡| 亚洲综合有码| 99精品欧美一区二区三区桃色| 九九九九九九九九九九九蜜桃| 亚洲第一男人天堂| av九九| 9 1果冻精品视频| 日本韩欧美在线播放a| 蜜臀AV一区二区三区| 东京日日夜夜| 久久永久无码人妻视频| 97 国产一区| 婷婷色婷婷| 欧美国产欧美在线观看| 夜夜嗨TV| 欧美高潮在线| 日韩无码专区| 97视频免费播放| 96精品在线| 无码天天操| 国产男女无套97| 精品一区二区人妖| 亚洲欧洲综合| 98福利在线视频| 欧洲成人性爱视频| 国产性爱强奸乱伦大全| 亚洲AV色图一区| 熟妇熟女视频一区二区三区| 黄在线| 国产精品人妻无码久久久互動交流| 欧美 日韩 另类 亚洲| 欧洲天天在线| 黄色一区二区秘书性感| 亚洲欧美日韩中文久久自慰| 蜜臀亚洲中文| 天堂8在线新版官网| 亚洲美女精品九九视频| 色香欲天天天天综合色| 久久久久久久久久久久久久久久9| 日本免费亚洲欧美| 懂色aV一区二区天美传媒| 97在线播放 | 亚洲超碰97| 成人无遮挡毛片免费看| 日韩三级在线观看网站| 秋霞 色色| 亚洲97| 岛国福利在线精品播放| 青青草好吊色| 欧美亚洲首页| 九九热av| 国产无码精品成人| 欧美人妻久久精品二区三区 | 超碰久久中文| 九九香蕉网| 东北女人av| 欧美韩国你懂得在线 | 久久啊啊| 亚洲阿v天堂在线| 久久久久久亚洲Av无码| 强奸乱亚洲| 免费的av网| 中文字幕在线2| 激情小说激情视频| 黑人精品XXX一区一二区| 天天视频黄网站| 中文字幕一区日韩精| 久久香蕉国产线看观看猫咪av| 在线精品福利免费播放| 97天天爽| 女人的天堂大香蕉网| 超碰色大香蕉| 一级黄色视频网| 无码免费一区二区三区啪啪| 青青色综合| 4虎在线视频| 日本淫乱女一区二区三区视频| 青青伊人这里只有精品| 国产精品对白内射| 色悠久久久av| 亚洲丝袜二区在线| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 超碰欧美| aaaa少妇高潮大片| 欧美亚洲丝袜美女电影| 午夜操一操| 亚洲激情综合| 欧洲特黄毛片免费看欧洲毛片| 另类TS人妖一区二区三区| 欧美躁死她一区二区| 欧洲天天在线| 欧美色图在线视频少妇| 青青免费在线视频一区| 亚洲色图超碰在线| 偷窥自拍亚洲| 伊人久操| 大香蕉伊在线久草麻豆天堂故事| 91欧美亚洲| 五月丁香激情综合网| 欧洲大香蕉| 亚洲第一无码播放立川理惠| 欧美人人天天网| 午夜福利一区二区影院| AV丝袜少妇| 欧美成人精品欧美一级乱黄一区二…| 99ri精品| 欧美一级美片在线观看免费| 情色五月天久久久| 亚洲成人无码影院| 国产尤物在线三区| 操国产逼| 99久久综合| 麻豆久久一区二区三区| 男人的天堂在线有码| 五月丁香黄色网| 91精产一区二区三区| 国产精品久久久久久久久久久久久久吹| 五月激情视频| 国产精品内射婷婷一级二| 日韩欧美一级特黄大片| 日本精品免费一区二区三区四区| 白丝AV| 超碰在线第一页| 九九九九久久久| 无码直播久久久| 热G综合热G中文| 嗯嗯,啊啊,国产精品| 国产极品一区二区三区三州| 亚洲自拍97| 国产久久一区二区| 在线天堂999| 无码又爽又硬又激情免费视频| 七月丁香婷婷| 91色堂| AA丁香综合激情| 日本免费专区| 婷婷超| 神马麻豆福利院| yy少妇精品久久| 91撸色网 玖玖网 欧美| 亚洲性综合9| 99在线观看| 色黄色美女大长腿午夜视频| 3PAV乱伦视频| 美女天天干| 天天做天天爱| 国产中文日韩欧美一区二区三区人妻丝袜美腿| 五月婷婷综合在线| 亚洲精品美女久久久久久久久| 翔田千里av一区二区三区| 少妇高潮流水av免费| 亚洲国产精品无码AV久久| 操国产高清| 搡老女人911熟妇老熟女| 欧美999| 欧美成人一级麻豆| 七月婷婷综合| 亚洲一区在线观看欧洲 | 日韩啪啪视频| 91欧美综合在线| 精品传媒在线一区| 日韩成人人妻网站| 精品天堂| 嫩呦国产一区二区三区AV| 亚洲综合另类小说色区亚洲成av人片在www| 精品九九九| 波多野42部无码喷潮在线观看| www.99色| 人人色人人操在线| 久久久爆乳翘臀一线天伦理视频| 精品妇女一区二区三区| 日本99久久| 中文字幕性感少妇av| 亚州成人a∨| 精品人妻一区二区蜜桃视频| 国产区在线| 一级aaaaa欧美中文字幕录像片| 丰满熟女一区二区三区在线播放| 久久九色| 夜间福利片1000无码| 欧美|91色综合| 国产精品在线网站| 600国产精品视频| 天天躁日日躁xxxxx| 五月天偷拍| 国产精品一区二区后入| 黄色一区三区| 天天射天天| 嗯嗯啊啊视频在线看| 日韩少妇丰满亚洲| 久操视频在线| 亚洲成A∨人影院在线欢看| 国产精品情侣啪啪| 91精品免费| 91殴美| 志村玲子视频一区二区| 日本黄色裸日本黄色裸体| 亚洲中文字幕熟女少妇一区二区| 亚欧免费| 韩国一区二区精品亚洲| 亚洲 欧美 综合 91| 易易A毛视频| 丁香五月成人| 91操熟女视频| jizz啪啪| 亚洲色图欧美色图制服丝袜| 玖玖久久久| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 久久久久久99999国产精品| 性爱综合一区二区| 中文字幕88av在线| 超清福利精品视频在线| 色五月婷婷在线| AV女资源| 蜜色网色哟哟| 高清无码一区二区三区| 日本久久综合| 人人看欧美性爱| 亚洲丝袜二区| 亚洲AV秘无码一区..| 久久久久密臀一区二区| 欧美αv.com| 日韩成人人妻网站| 久久婷婷五月综合| 蜜臀99久久国产| 伊人一区二区三区| 色色福利| 超碰在线91| 97丝袜亚洲在线播放| 免费毛片在线播放| 精品人妻高清麻豆av| 欧美精品偷拍| 综合激情五月天| AV不卡在线| 中文字幕丝袜| 91熟女综合| 宅男午夜在线视频| 精品亚洲国产成人精品| 亚洲成人精品久久久| 九九伊人网| 免费超碰97在线观看| 欧美加勒比| 久久久久久久久久久久欧美日| 国产成人久久久精品免费AV| 免费中文综合精品| 91狠狠综合久久| 日韩熟女精品无码专区一区二区| 欧美啪啪女女| 大香蕉黄色一级片免费看| 亚洲国产美女久久久久| 三级特黄60分钟播放| 国产刺激视频| 在线观看日韩av不卡| 免费a级毛片av无码久久精品中文字幕| 日韩特一级久久| 北京专精特新企业招聘信息| 亚洲 日韩 欧美 国产综合体| 一起草日韩| 中文字幕91页| 600国产精品视频| 蜜臀少妇一区二区| 日韩精品碰碰| 神马麻豆福利院 | 大屁股熟女一区二区三区| 嗯嗯啊啊好大好爽| 麻豆婷婷成人一二三| 欧美 传媒 麻豆 日韩 偷拍| 后入内射蜜桃臀| 俺去也婷婷| 日韩99神马视频播放| 国产九月婷婷| 色狠狠综合噜一二三区| 男人的天堂不卡一区二区|