中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

加關(guān)鍵詞的網(wǎng)站石家莊網(wǎng)站seo外包

加關(guān)鍵詞的網(wǎng)站,石家莊網(wǎng)站seo外包,興科cms網(wǎng)站建設(shè)系統(tǒng),網(wǎng)站設(shè)計參考#1 問題描述 在基于Spring Boot的項目中實現(xiàn)了請求轉(zhuǎn)發(fā)(使用 RestTemplate 的 exchange 方法)的功能,忽然在前端報net::ERR_CONTENT_DECODING_FAILED 200 (OK)的錯誤,后端及上游系統(tǒng)日志均顯示請求已完成。 #2 原因探尋 上述錯…

#1 問題描述

在基于Spring Boot的項目中實現(xiàn)了請求轉(zhuǎn)發(fā)(使用 RestTemplate 的 exchange 方法)的功能,忽然在前端報net::ERR_CONTENT_DECODING_FAILED 200 (OK)的錯誤,后端及上游系統(tǒng)日志均顯示請求已完成。

#2 原因探尋

上述錯誤字面意思為內(nèi)容解碼失敗,就是說瀏覽器拿到后端數(shù)據(jù)后沒辦法正常解碼。此時我們看看請求響應(yīng)的編碼

可以看到上游系統(tǒng)啟用了響應(yīng)壓縮,然后中轉(zhuǎn)系統(tǒng)讀取方式為:

restTemplate.exchange(entity, String::class.java)

故當(dāng)上游系統(tǒng)的響應(yīng)啟用壓縮后,中轉(zhuǎn)系統(tǒng)按String讀取再返回給前端,瀏覽器拿到數(shù)據(jù)后通過響應(yīng)頭識別到是gzip編碼則嘗試解壓,導(dǎo)致前面出現(xiàn)的異常。

#3 修復(fù)

要修復(fù)其實也很簡單,在中轉(zhuǎn)系統(tǒng)中用字節(jié)數(shù)組格式讀取響應(yīng)即可(兼容上游系統(tǒng)的各種格式的響應(yīng)),完整代碼如下:

class ServiceRoute {val logger = LoggerFactory.getLogger(javaClass)val restTemplate = RestTemplate().also {  }fun redirect(request:HttpServletRequest, response:HttpServletResponse, targetUrl:String, extraHeaders: Map<String, String?>?=null):ResponseEntity<ByteArray> {val entity = createRequestEntity(request, targetUrl, extraHeaders)return restTemplate.exchange(entity, ByteArray::class.java)}@Throws(URISyntaxException::class, IOException::class)private fun createRequestEntity(request: HttpServletRequest, url: String, extraHeaders: Map<String, String?>?): RequestEntity<*> {val httpMethod = HttpMethod.valueOf(request.method)val headers = parseRequestHeader(request)extraHeaders?.forEach { (k, v) -> headers.add(k, v) }//將原始請求轉(zhuǎn)換為字節(jié)數(shù)組val body = StreamUtils.copyToByteArray(request.inputStream)return RequestEntity<Any>(body, headers, httpMethod, URI(url))}/*** 復(fù)制原始請求的 header 信息*/private fun parseRequestHeader(request: HttpServletRequest): MultiValueMap<String, String?> {val headers = HttpHeaders()val headerNames: List<String> = Collections.list(request.headerNames)for (headerName in headerNames) {val headerValues: List<String> = Collections.list(request.getHeaders(headerName))for (headerValue in headerValues) {headers.add(headerName, headerValue)}}return headers}
}

使用示例

@RequestMapping("route/**", name = "轉(zhuǎn)發(fā)請求")
fun redirect(response:HttpServletResponse):ResponseEntity<*> {val path = request.servletPath.replace("/route/", "")return try{//自定義請求頭val extraHeaders = mapof("from" to "中介系統(tǒng)")route.redirect( request, response, "http://localhost:8080/${path}", extraHeaders ).also {//此處可查看返回內(nèi)容}}catch (e:Exception) {logger.error("[SERVICE-ROUTE] 轉(zhuǎn)發(fā)失敗", e)ResponseEntity(e.message, HttpStatus.INTERNAL_SERVER_ERROR)}finally {//此處可以做一些后續(xù)操作}
}
http://m.risenshineclean.com/news/65596.html

相關(guān)文章:

  • 上海網(wǎng)站企業(yè)軟文推廣是什么
  • 網(wǎng)站后期維護收費熱門網(wǎng)站排名
  • 貿(mào)易網(wǎng)站建設(shè)sem投放是什么意思
  • 網(wǎng)頁制作工具的選擇與網(wǎng)站整體風(fēng)格網(wǎng)絡(luò)廣告推廣服務(wù)
  • 老司機做爰網(wǎng)站老師影音百度托管運營哪家好
  • 家裝設(shè)計師培訓(xùn)學(xué)校湖南企業(yè)seo優(yōu)化推薦
  • 新手做網(wǎng)站做什么樣的網(wǎng)站建設(shè)公司哪個好呀
  • 怎么在微信做企業(yè)網(wǎng)站app開發(fā)費用標準
  • 有哪些設(shè)計的很優(yōu)秀的網(wǎng)站企業(yè)培訓(xùn)內(nèi)容
  • 沈陽智能模板建站軟文營銷范文100字
  • 武漢軟件100強企業(yè)名單北京官方seo搜索引擎優(yōu)化推薦
  • 資陽網(wǎng)站設(shè)計搜狗搜索網(wǎng)
  • 互聯(lián)網(wǎng)行業(yè) 英文郴州seo網(wǎng)絡(luò)優(yōu)化
  • 濟南做網(wǎng)站多少錢站長工具pr值查詢
  • 全免費云游戲網(wǎng)頁在線玩seo快速排名軟件價格
  • 東莞seo網(wǎng)站推廣個人怎么做免費百度推廣
  • 重慶網(wǎng)站建設(shè)有限公司拼多多運營
  • 網(wǎng)站運營模式有哪些短網(wǎng)址鏈接生成
  • 現(xiàn)在最靠譜的購物網(wǎng)站有哪些天津seo實戰(zhàn)培訓(xùn)
  • 網(wǎng)站開發(fā)師培訓(xùn)網(wǎng)絡(luò)營銷手段有哪四種
  • 深圳網(wǎng)站開發(fā)優(yōu)化營商環(huán)境 助推高質(zhì)量發(fā)展
  • 建設(shè)一個網(wǎng)站需要提供什么手續(xù)seo網(wǎng)絡(luò)推廣專員
  • 十堰建設(shè)網(wǎng)站首頁無錫seo公司
  • 怎樣查看網(wǎng)站是用什么cms 做的企業(yè)培訓(xùn)課程有哪些
  • 權(quán)重高的網(wǎng)站是幾vue seo優(yōu)化
  • 個人網(wǎng)站頁面設(shè)計需要那些步驟seo教學(xué)平臺
  • 北京朝陽不限購小戶型天津seo培訓(xùn)
  • 住房和城鄉(xiāng)建設(shè)部網(wǎng)站辦事大廳各大免費推廣網(wǎng)站
  • 山東省住房和建設(shè)廳網(wǎng)站百度網(wǎng)址大全免費下載
  • 延安免費做網(wǎng)站怎么創(chuàng)作自己的網(wǎng)站