国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Http 響應(yīng)頭 Transfer-Encoding : chunked 導(dǎo)致 瀏覽器客戶端請求錯誤問題

這篇具有很好參考價值的文章主要介紹了Http 響應(yīng)頭 Transfer-Encoding : chunked 導(dǎo)致 瀏覽器客戶端請求錯誤問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

  • 生產(chǎn)環(huán)境服務(wù)器規(guī)劃如下
服務(wù)器 類型 網(wǎng)絡(luò)環(huán)境
cal.com nginx 外網(wǎng)
192.168.7.15:9200 tomcat 內(nèi)網(wǎng)
192.168.7.16:9200 tomcat 內(nèi)網(wǎng)
sdd.com nginx 內(nèi)網(wǎng)
192.168.7.15:9100 tomcat 內(nèi)網(wǎng)
192.168.7.16:9100 tomcat 內(nèi)網(wǎng)

192.168.7.15和192.168.7.16是做個負載均衡。目前的需求是用戶訪問外網(wǎng)的cal.com 返回 內(nèi)網(wǎng) 192.168.7.15:9200 和 192.168.7.16:9200的頁面,數(shù)據(jù)需要再次請求sdd.com,sdd.com轉(zhuǎn)發(fā)到內(nèi)網(wǎng)的
192.168.7.15:9100 和 192.168.7.16:9100。

請求的流程圖如圖所示:

Http 響應(yīng)頭 Transfer-Encoding : chunked 導(dǎo)致 瀏覽器客戶端請求錯誤問題,web,http,tomcat,java

  • 問題描述

在cal.com上線后,用戶發(fā)起請求,發(fā)現(xiàn)9200端口上的靜態(tài)頁面請求可以返回,而ajax請求數(shù)據(jù)無法返回,所有的ajax請求是做了代理的,代理到了sdd.com。既然能返回靜態(tài)頁面數(shù)據(jù),說明肯定不是cal.com對應(yīng)的服務(wù)器問題,而是在sdd.com這一環(huán)節(jié)存在問題,通過添加日志輸出,發(fā)現(xiàn)可以正常請求回來數(shù)據(jù),并寫入到響應(yīng)體中去,但是前端一直請求錯誤。

  • 解決

首先通過增加日志打印,排查方法的哪一步出現(xiàn)了問題,因為9200的tomcat服務(wù)器所有的靜態(tài)資源是可以正常返回的,這排除了服務(wù)器問題,比較離奇的時候,所有的日志打印地方都可以正常輸出,可以正常請求到sdd.com的結(jié)果,但是就是返回不了數(shù)據(jù),這一步至少確定了 從9200發(fā)送sdd.com是沒問題的。那么繼續(xù)再排查其他原因,經(jīng)過多次的代碼反復(fù)注釋,發(fā)現(xiàn)9200設(shè)在設(shè)置響應(yīng)頭的這一步出現(xiàn)了問題,具體的就是只要有Transfer-Encoding : chunked 就會導(dǎo)致瀏覽器報錯。

經(jīng)過分析此請求頭發(fā)現(xiàn),只要響應(yīng)頭中攜帶了這個Transfer-Encoding : chunked 標頭,瀏覽器就會報錯,只要一去掉,就不會報錯。后來得知Transfer-Encoding 這是一種傳輸編碼方式,如果存在這個標頭,則表示服務(wù)器無法一次性計算出本次響應(yīng)的content-length,需要將響應(yīng)內(nèi)容類型分段傳輸/分塊傳輸給客戶端,每一塊都需要用一個十六進制的長度表示當前塊傳輸內(nèi)容的字節(jié)大小,當客戶端收到最后一個塊的大小為0時,表示此次請求完整的結(jié)束了。

錯誤代碼:

        clientHttpResponse.getHeaders().forEach((key, value) -> value.forEach(it -> {
                response.setHeader(key, it);
        }));

這里面的關(guān)鍵就是 response.setHeader(key, it); 給tomcat請求設(shè)置響應(yīng)頭 Transfer-Encoding :chunked ,但是實際的響應(yīng)體數(shù)據(jù)格式卻不是chunked 分塊格式,這就導(dǎo)致了cal.com nginx服務(wù)器在接收到tomcat服務(wù)器的響應(yīng)時根本無法處理成功,進而給瀏覽器也報錯了。

這里由于sdd.com這臺nginx服務(wù)器,開啟了傳入編碼后

location / {
        chunked_transfer_encoding       on;
}

9200端口發(fā)送請求的工具類收到sdd.com返回的數(shù)據(jù)以后,進行了正確的格式解析,此時已經(jīng)獲取到了完整的響應(yīng)體數(shù)據(jù),那么這時候如果再按照sdd.com的響應(yīng)頭信息去給cal.com傳輸?shù)脑挘统霈F(xiàn)問題了,因為格式明明是完整的,而響應(yīng)頭卻設(shè)置了 Transfer-Encoding : chunked 。這就導(dǎo)致匹配不起來了。文章來源地址http://www.zghlxwxcb.cn/news/detail-614931.html

到了這里,關(guān)于Http 響應(yīng)頭 Transfer-Encoding : chunked 導(dǎo)致 瀏覽器客戶端請求錯誤問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 微信小程序之流式(chunked)響應(yīng)

    使用場景 實時輸出場景(GPT) 數(shù)據(jù)實時要求比較高(商場首頁) 微信小程序用法 1、啟動塊接收(只是適合使用在wx.request接口中) 2、重寫塊接收函數(shù)onChunkReceived 特別注意 接收的Arraybuffer需要轉(zhuǎn)換為字符串進行處理,需要注意中文,詳細請查考 往期博文 啟動enableChunked之后

    2024年02月10日
    瀏覽(19)
  • Vue 打包 chunk-vendors.js 文件過大導(dǎo)致頁面加載緩慢解決方案

    前言 顧名思義, chunk-vendors.js 是捆綁所有不是自己的模塊,而是來自其他方的模塊的捆綁包,它們稱為第三方模塊或供應(yīng)商模塊。 通常,它意味著(僅和)來自項目 /node_modules 目錄的所有模塊,會將所有 /node_modules 中的第三方包打包到 chunk-vendors.js 中。 將所有的第三方包集

    2024年02月16日
    瀏覽(29)
  • uniapp 發(fā)布h5前端項目時因chunk-vendors過大導(dǎo)致首屏加載太慢以及跳轉(zhuǎn)外部鏈接

    安裝插件 compression-webpack-plugin 安裝webpack 新建web.config.js

    2024年02月11日
    瀏覽(47)
  • maven編譯failed to transfer from http://0.0.0.0/ during a previous attempt.

    報錯如上,核心報錯是:“failed to transfer from http://0.0.0.0/ during a previous attempt.”。 經(jīng)過檢查,發(fā)現(xiàn)https://maven.aliyun.com/nexus/content/groups/public/ 是https頭,而setting.xml配置文件中寫的是http。

    2024年02月12日
    瀏覽(22)
  • win11 系統(tǒng)暫無可用音頻設(shè)備導(dǎo)致播放失敗/音頻服務(wù)未響應(yīng)

    win11 系統(tǒng)暫無可用音頻設(shè)備導(dǎo)致播放失敗/音頻服務(wù)未響應(yīng)

    win11再一次更新后音頻突然用不了了,驅(qū)動和輸出設(shè)備都顯示正常,但每次播放就會出現(xiàn)下面的問題,重啟和更新驅(qū)動也沒用。最后百度了好久終于解決了。 最后發(fā)現(xiàn)可能是新的驅(qū)動和電腦不兼容,重裝回原來的驅(qū)動即可。 1.按下鍵盤win+x,打開設(shè)備管理器,展開’聲音、視頻

    2024年02月11日
    瀏覽(15)
  • PyQt5 執(zhí)行耗時操作導(dǎo)致界面卡死或未響應(yīng)的解決辦法

    當用PyQt5開發(fā)一個GUI界面 ,需要執(zhí)行業(yè)務(wù)邏輯時,后臺邏輯執(zhí)行時間長,界面就容易出現(xiàn)卡死、未響應(yīng)等問題。 在PyQt中,GUI界面本身就是一個處理事件循環(huán)的主線程,當進行耗時操作時,主線程GUI需要等待操作完成后才會響應(yīng),在等待這段時間,整個GUI就處于卡死的狀態(tài)。

    2024年02月09日
    瀏覽(20)
  • vue3使用響應(yīng)式數(shù)據(jù) + v-model導(dǎo)致響應(yīng)式失效el-form表單無法輸入的問題

    參考文章 重構(gòu)vue2項目時發(fā)現(xiàn)的問題,原始項目使用的是 Element-ui 。 其實vue3可以使用適配的 Element-plus 問題描述 el-form表單無法輸入 控制臺報錯 Avoid adding reactive properties to a Vue instance or its root $data at runtime - declare it upfront in the data option. 使用響應(yīng)式變量時應(yīng)先聲明 解決辦法

    2024年02月15日
    瀏覽(21)
  • Http---HTTP響應(yīng)報文

    Http---HTTP響應(yīng)報文

    1. HTTP響應(yīng)報文分析 HTTP 響應(yīng)報文效果圖: 響應(yīng)報文說明: 原始響應(yīng)報文說明: 說明: 每項數(shù)據(jù)之間使用: rn 2. HTTP 狀態(tài)碼介紹 HTTP 狀態(tài)碼是 用于表示web服務(wù)器響應(yīng)狀態(tài)的3位數(shù)字代碼 。 狀態(tài)碼 說明 200 請求成功 307 重定向 400 錯誤的請求,請求地址或者參數(shù)有誤 404 請求資源在服

    2024年03月10日
    瀏覽(30)
  • HTTP常見響應(yīng)碼以及響應(yīng)碼代表的內(nèi)容

    很有意思的一個段子 : 消息: 描述: 100 Continue 服務(wù)器僅接收到部分請求,但是一旦服務(wù)器并沒有拒絕該請求,客戶端應(yīng)該繼續(xù)發(fā)送其余的請求。 101 Switching Protocols 服務(wù)器轉(zhuǎn)換協(xié)議:服務(wù)器將遵從客戶的請求轉(zhuǎn)換到另外一種協(xié)議。 消息: 描述: 200 OK 請求成功(其后是對GET和P

    2024年02月07日
    瀏覽(30)
  • HTTP工具類封裝與http請求響應(yīng)

    HTTP工具類封裝與http請求響應(yīng)

    一、前言 在Java web系統(tǒng)中經(jīng)常需要與外部接口進行對接,比較多的方式就是是http的方式。在springboot中,我們可以直接使用封裝的feign如:我們?nèi)フ埱笪⑿诺慕涌?,定義一個client客戶端,使用feign框架去請求就可以。但是也有很多系統(tǒng)沒有使用feign的框架,那就需要使用http工具

    2024年04月25日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包