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. 多进程vs多线程

    多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程.(当然主进程挂了所有进程就全挂了,但是Master进程只负责分配任务,挂掉的概率低)著名的Apache最早就是采用多 ...

  2. JAVA(一)JAVA基础/面向对象基础/高级面向对象

    成鹏致远 | lcw.cnblog.com |2014-01-23 JAVA基础 1.开发环境搭建 JAVA程序的执行流程 JAVA命令->要使用一个*.class文件(类文件)->通过c ...

  3. LeetCode: First Missing Positive 解题报告

    First Missing Positive Given an unsorted integer array, find the first missing positive integer. For ...

  4. Halcon的数据类型

    两大类: 1.图形参数Iconic (image, region, XLD) 2.与控制参数Control (string, integer, real, handle), 在Halcon算子的参数中 ...

  5. Java知多少(83)面板基础:JPanel和JScrollPane

    面板有两种,一种是普通面板(JPanel),另一种是滚动面板(JScrollPane). JPanel 面板是一种通用容器,JPanel的作用是实现界面的层次结构,在它上面放入一些组件,也可以在上面绘 ...

  6. Android5.0通知变化浅析

    目前在Android中通知的使用还是很常见的,为了做版本兼容,常用兼容包NotificationCompat.Builder和 Notification.Builder. NotificationCo ...

  7. Cisco VLAN ACL配置

    什么是ACL? ACL全称访问控制列表(Access Control List),主要通过配置一组规则进行过滤路由器或交换机接口进出的数据包, 是控制访问的一种网络技术手段, ACL适用于所有的被路由 ...

  8. .Net MVC Cache 缓存技术总结

    一.细说 ASP.NET Cache 及其高级用法 二..Net环境下的缓存技术介绍 (转) 三.asp.net中缓存的使用介绍一 四.HttpContext.Current.Cache 过期时间

  9. portfolio

    1.工作量计算逻辑: 原始待办事项: 预估2个冲刺,如下图所示: Sprint1的故事点计划工作量5,空闲工作量28.如下图 Sprint2为预估冲刺,指的是预估待办事项在后续冲刺的预估计划,后续冲刺 ...

  10. python中,numeric(数字类型)和integer(整型)的区别

    说明: 在今天做int实现的过程中,官方函数的解释是将numeric转换为integer,就突然不明白,两个有啥区别. numeric-数字类型包括: int,float,bool,complex i ...