初步解决过程和遗留问题

生产测试环境对比

content-length对比

目前的解决方案

指定客户端accept:application/json或者服务端返回的content-type:applcation/json

遗留的问题

为什么生产环境没有content-length而测试环境有?

为什么content-type不同content-length也会不同?为什么会乱码?

除了以下每个controller头指定produces,有没有统一的地方指定接口均返回的是application/json

@RestController

@RequestMapping(value = "/v1", produces = "application/json;charset=UTF-8")

public class XXXController

content-length

content-length 作用

Content-Length首部告诉浏览器报文中实体主体的大小。这个大小是包含了内容编码的.

使用Content-Length首部是为了能够检测出服务器崩溃而导致的报文截尾,并对共享持久连接的多个报文进行正确分段

http响应头里没有或者有content-length的几种可能性

1.客户端在http头(head)加Connection:keep-alive时,服务器的response是Transfer-Encoding:chunked的形式,通知页面数据是否接收完毕,例如长连接或者程序运行中可以动态的输出内容,例如一些运算比较复杂且需要用户及时的得到最新结果,那就采用chunked编码将内容分块输出。

2.除了如1所述之外的情况一般都是可以获取到Content-Length的。

在HTTP协议中,Content-Length用于描述HTTP消息实体的传输长度the transfer-length of the message-body。在HTTP协议中,消息实体长度和消息实体的传输长度是有_区别,比如说gzip压缩下,消息实体长度是压缩前的长度,消息实体的传输长度是gzip压缩后的长度。

如果head中有Content-Length,那么这个Content-Length既表示实体长度,又表示传输长度。如果实体长度和传输长度不相等(比如说设置了Transfer-Encoding),那么则不能设置Content-Length。如果设置了Transfer-Encoding,那么Content-Length将被忽视”。这句话翻译的优点饶,其实关键就一点:有了Transfer-Encoding,则不能有Content-Length。

HTTP 协议中的 Transfer-Encoding

由于 Content-Length 字段必须真实反映实体长度,但实际应用中,有些时候实体长度并没那么好获得,例如实体来自于网络文件,或者由动态语言生成。这时候要想准确获取长度,只能开一个足够大的 buffer,等内容全部生成好再计算。但这样做一方面需要更大的内存开销,另一方面也会让客户端等更久。

我们在做 WEB 性能优化时,有一个重要的指标叫 TTFB(Time To First Byte),它代表的是从客户端发出请求到收到响应的第一个字节所花费的时间。大部分浏览器自带的 Network 面板都可以看到这个指标,越短的 TTFB 意味着用户可以越早看到页面内容,体验越好。可想而知,服务端为了计算响应实体长度而缓存所有内容,跟更短的 TTFB 理念背道而驰。但在 HTTP 报文中,实体一定要在头部之后,顺序不能颠倒,为此我们需要一个新的机制:不依赖头部的长度信息,也能知道实体的边界。

杂谈Nginx与HTTP协议

在项目中遇到一个问题,需要详细了解下HTTP协议及其Nginx中对HTTP协议的支持程度。今天一天收集了一些资料,也梳理出最终方案。记录到博客上,方便后续查阅。重点关注以下几个方面:1、Http交互中如何判定内容的长度及其HTTP协议中关于Content-Length的解读。2、Chunk和Gzip在Nginx中的实现及原理。3、Upstream如何和Chunked结合。

linux web接口返回乱码,【bug】测试环境的API接口,返回内容为乱码相关推荐

  1. 魔坊APP项目-18-种植园,基于支付宝提供的沙箱测试环境开发支付接口、服务端, 处理支付结果的同步通知和异步通知、修复页面底部菜单无法被点击的BUG

    种植园 一.基于支付宝提供的沙箱测试环境开发支付接口 沙箱环境: https://openhome.alipay.com/platform/appDaily.htm?tab=info 开发文档: ht ...

  2. Kali Linux 从入门到精通(五)-测试环境准备

    Kali Linux 从入门到精通(五)-测试环境准备 准备实验环境 渗透非系统授权的弊端 搭建自己的实验环境 安装虚拟机 微软最新软件 http://msdn.microst.com/en-ca/s ...

  3. 微信关闭头像昵称接口后,如何根据手机号码返回头像昵称用户信息,API接口

    微信官方公告内容: 自 2022 年 10 月 25 日 24 时后(以下统称 "生效期" ),用户头像昵称获取规则将进行如下调整: 自生效期起,小程序 wx.getUserPro ...

  4. 自用免费有趣的测试、学习API接口

    自用免费有趣的测试.学习API接口 一.每日一言 https://v.api.aa1.cn/api/yiyan/index.php 二.每日搞笑段子 https://www.mxnzp.com/api ...

  5. 唯品会关键字搜索商品API接口(item_search-按关键字搜索唯品会商品API接口),唯品会API接口

    一.唯品会关键字搜索商品API接口(item_search-按关键字搜索唯品会商品API接口),唯品会API接口接口可获取到宝贝标题,宝贝价格,宝贝ID,宝贝图片,优惠价,宝贝链接,卖家昵称,店铺所在 ...

  6. 京东推荐商品列表API接口-(item_recommend-获取推荐商品列表API接口),京东API接口

    一.京东推荐商品列表API接口-(item_recommend-获取推荐商品列表API接口),京东API接口代码对接如下: 1.请求参数: 名称 类型 必须 描述 key String 是 调用key ...

  7. 京东商品评论API接口-(item_review-获得JD商品评论API接口),京东API接口

    一.京东商品评论API接口-(item_review-获得JD商品评论API接口),京东API接口代码对接如下: 1.公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GE ...

  8. tmall.product.schema.add(淘宝天猫商品发布接口),淘宝商品发布API接口,tmall.product.schema.get产品信息获取接口

    tmall.product.schema.add(淘宝天猫商品发布接口),淘宝商品发布API接口,可以用于店铺发货,店铺订单详情获取,店铺明文接口,订单同步,订单推送等业务,下面是一套完整的订单发货的 ...

  9. 亚马逊商品详情API接口-(item_get-获得AMAZON商品详情接口),亚马逊详情API接口

    一.亚马逊商品详情API接口-(item_get-获得AMAZON商品详情接口),亚马逊详情API接口可以获取到商品价格,商品库存,商品销量,商品ID,商品图片,商品sku属性,sku详情,sku图片 ...

  10. 微店商品详情API接口(item_get-获得微店商品详情API接口),微店API接口

    一.微店商品详情API接口(item_get-获得微店商品详情API接口),微店API接口代码对接可以获取到宝贝ID,宝贝标题,价格,掌柜名称,库存,最小购买数,宝贝链接,宝贝图片,品牌名称,商品详情 ...

最新文章

  1. FD.io/VPP — VPP 的安装部署
  2. 【C++grammar】文件I/O流的基本用法
  3. leetcode 461. 汉明距离(位运算)
  4. 32张感恩海报!武汉市文化和旅游局这波操作太可以了
  5. 终于过了。。。。。。。。。。。
  6. android 开发传输安全,移动应用安全开发指南(Android)--数据传输
  7. ant-design 本地web版本下载_bilibili 哔哩哔哩视频如何下载到电脑的 3 种方法
  8. 超棒的一遍综述性博客
  9. 设置CMD窗口为UTF-8编码
  10. 动手学深度学习Pytorch Task03
  11. Linux内核移植介绍
  12. 由QCustomplot引发drawPolyline和drawLine的区别
  13. GitHub简单入门
  14. 基于美国人口数据分析
  15. CSDN上传资源无法设置积分了吗
  16. 如何重新认知性能优化及其度量方法
  17. 大数据项目(二)————某电信公司通话记录改造
  18. Acwing 265. 营业额统计
  19. 不租云服务,也能自建网站
  20. FICO配置详解之五:内部订单管理

热门文章

  1. Linux下的日志维护技巧
  2. 六款优秀的 Linux 基准测试工具
  3. iOS中关于文件操作
  4. 技术选型和知识点介绍(下)
  5. linux 数据库无法启动,【已回应】数据库无法启动,是怎么回事啊
  6. Tp5.1 图片处理:缩略图+水印(换行显示)
  7. 微服务之Go-Micro(八)基于Gin框架的Http网关
  8. 六石管理学:座位可以考虑混排
  9. 刚接触新工作的程序员:不会打开终端窗口
  10. 没有人会认真阅读协议,有恶意皆无效