HTTP协议中的Transfer-Encoding

浏览器和服务器端支持持久连接

持久连接(Persist Connection)
HTTP1.0默认不是持久连接的
HTTP1.1默认是持久连接的
在HTTP请求和响应中加入Connection:KEEP-alive这个告诉对方当前tcp连接时持久连接的,
进行持久连接,可以减少客户端的等待时间,因为不使用持久连接,要尽心TCP的三次握手过程。
如果不想使用TCP的持久连接可以在HTTP头部加入connection:close,来告诉对方当前连接在客户端获取响应后,关闭TCP连接。

transfer-encoding:则是用来改变报文格式。
content-encoding:是HTTP实体内容进行编码,目的是优化传输,例如服务器端用gzip对响应实体尽心压缩,
并不是服务器端所有的信息都需要压缩处理,例如图片,已经是高度压缩过得了,就不用压缩了。压缩会浪费消耗CPU资源。

HTTP持久连接和非持久连接的区别:
①如果是HTTP是持久连接,如果服务器端返回数据没有实体内容的长度即(Content-length)则浏览器一直处于pending状态,
即一直等待状态。如果是非持久连接的话,不会出现这种情况。

这是因为,对于非持久连接,浏览器可以通知连接是否关闭来界定请求或者响应实体的边界;而对于持久连接,
这种方法显然不奏效。需要在响应中加入Content-length告诉浏览器当前响应结束。

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

我们在做web性能优化时,有一个重要的指标叫TTFB(TIME TO FIRST Byte),它代表的是从客户端发出请求到收到响应
的第一个字节所花费的时间。大部分;浏览器自带的network面板都可以看到这个指标,越短的TTFB意味着用户可以
越早看到页面内容,用户体验好。

可想而知,服务器端为了计算响应实体长度而缓存所有内容,跟更短的TTFB理念不一样。
但在HTTP报文中,实体一定要在头部之后,顺序不能颠倒,为此我们需要一个新的机制:不依赖头部的长度信息,
也能知道实体的边界。

Transfer-Encoding:chunked,利用分块传输

分跨传输相当简单,只需要在HTTP响应头中加入Transfer-Encoding:chunked,就代表这个报文采用了分块编码。

Keep-Alive: timeout=5, max=100(代表当前TCP连接可以保持5秒,这个TCP连接最多接受100个HTTP请求,超过100个就断开)

HTTP协议之Transfer-Encoding的更多相关文章

  1. HTTP协议(二):header标头说明

    Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求 Accept-Ranges: bytes Age 从原始服务器到代理缓存形成的估算时间(以秒计 ...

  2. HTTP协议及其请求头分析

    HTTP协议及其请求头分析 HTTP协议及其请求头分析   众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP.Archie Gopher等是建立在TCP/IP协议之上的应用 ...

  3. [转]HTTP协议及其请求头分析

      众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP.Archie Gopher等是建立在TCP/IP协议之上的应用层协议,不同的协议对应着不同的应用.  WWW服务器使用 ...

  4. HTTP 协议的历史演变和设计思路

    HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点. 本文介绍 HTTP 协议的历史演变和设计思路. 一.HTTP/0.9 HTTP 是基于 TCP ...

  5. HTTP协议:header标头说明

    原文地址   http://blog.chinaunix.net/uid-7374279-id-4518834.html Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范 ...

  6. HTTP协议header标头详解

    本文根据RFC2616(HTTP/1.1规范),参考 http://www.w3.org/Protocols/rfc2068/rfc2068 http://www.w3.org/Protocols/r ...

  7. iOS-网络编程(一)HTTP协议

    一. 网络编程基础 在移动互联网时代,几乎所有应用都需要用到网络,只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力.一个好的移动网络应用不仅要有良好的UI和良好的用户体验也要具备实时更 ...

  8. HTTP1.1协议中文版-RFC2616

    转自:http://www.cnpaf.net/Class/HTTP/200811/23277.html 说明 本文档规定了互联网社区的标准组协议,并需要讨论和建议以便更加完善.请参考 “互联网官方协 ...

  9. HTTP协议发展介绍

    HTTP协议工作于C/S架构上,是万维网服务器传输超文本到本地客户端的一种应用层协议,全称是:Hyper Text Transfer Protocol(超文本传输协议),HTTP是基于TCP/IP通信 ...

  10. HTTP协议篇(一):多工、数据流

    管道机制.多工 管道机制(Pipelining) HTTP 1.1 引入了管道机制(Pipelining),即客户端可通过同一个TCP连接同时发送多个请求.如果客户端需要请求两个资源,以前的做法是在同 ...

随机推荐

  1. ES6,新增数据结构Map的用法

    Javascript的Object本身就是键值对的数据结构,但实际上属性和值构成的是”字符串-值“对,属性只能是字符串,如果传个对象字面量作为属性名,那么会默认把对象转换成字符串,结果这个属性名就变成 ...

  2. 我的Android进阶之旅------>Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题

    Android 设备的CPU类型通常称为ABIs 问题描写叙述 解决方法 1解决之前的截图 2解决后的截图 3解决方法 4建议 为什么你须要重点关注so文件 App中可能出错的地方 其它地方也可能出错 ...

  3. 【emWin】例程十七:窗口对象——Button

    介绍: 按钮小工具通常用作触摸屏的主要用户界面元素,本例程介绍按钮小工具的创建及使用方法. 触摸校准(上电可选择是否进入校准界面) 自绘按钮(通过回调函数来自行绘制各种形状的按钮) 设置按钮字体 设置 ...

  4. android:targetSdkVersion引起的问题

    项目在三星S3和三星Note II 上调用系统相机点击存储的时候崩溃了.查了半天没弄明白原因,后来发现就是因为在manifest里设置了android:targetSdkVersion = 14,导致 ...

  5. Zookeeper系列三:Zookeeper客户端的使用(Zookeeper原生API如何进行调用、ZKClient、Curator)和Zookeeper会话

    一.Zookeeper原生API如何进行调用 准备工作: 首先在新建一个maven项目ZK-Demo,然后在pom.xml里面引入zk的依赖 <dependency> <groupI ...

  6. for循环 while循环 break跳出循环 continue结束本次循环 exit退出整个脚本

  7. 【转】QT Graphics-View官方介绍(中文翻译)

    一.GraphicsView框架简介 QT4.2开始引入了Graphics View框架用来取代QT3中的Canvas模块,并作出了改进,Graphics View框架实现了模型-视图结构的图形管理, ...

  8. 九度OJ 1067 n的阶乘 (模拟)

    题目1067:n的阶乘 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5666 解决:2141 题目描写叙述: 输入一个整数n,输出n的阶乘 输入: 一个整数n(1<=n<=2 ...

  9. Pyramid Analytics宣布无缝集成BI Office和微软Power BI Desktop

    全球领先的企业商业智能(BI)软件提供商Pyramid Analytics与微软联手,凭借完善的分析平台BI Office强化Power BI Desktop的个人生产力功能.新的“Publish t ...

  10. springMVC参数传递实例

    最好所有的post请求用postman这个工具就好了. postman传对象