HTTP协议之Transfer-Encoding
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的更多相关文章
- HTTP协议(二):header标头说明
Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求 Accept-Ranges: bytes Age 从原始服务器到代理缓存形成的估算时间(以秒计 ...
- HTTP协议及其请求头分析
HTTP协议及其请求头分析 HTTP协议及其请求头分析 众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP.Archie Gopher等是建立在TCP/IP协议之上的应用 ...
- [转]HTTP协议及其请求头分析
众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP.Archie Gopher等是建立在TCP/IP协议之上的应用层协议,不同的协议对应着不同的应用. WWW服务器使用 ...
- HTTP 协议的历史演变和设计思路
HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点. 本文介绍 HTTP 协议的历史演变和设计思路. 一.HTTP/0.9 HTTP 是基于 TCP ...
- HTTP协议:header标头说明
原文地址 http://blog.chinaunix.net/uid-7374279-id-4518834.html Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范 ...
- HTTP协议header标头详解
本文根据RFC2616(HTTP/1.1规范),参考 http://www.w3.org/Protocols/rfc2068/rfc2068 http://www.w3.org/Protocols/r ...
- iOS-网络编程(一)HTTP协议
一. 网络编程基础 在移动互联网时代,几乎所有应用都需要用到网络,只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力.一个好的移动网络应用不仅要有良好的UI和良好的用户体验也要具备实时更 ...
- HTTP1.1协议中文版-RFC2616
转自:http://www.cnpaf.net/Class/HTTP/200811/23277.html 说明 本文档规定了互联网社区的标准组协议,并需要讨论和建议以便更加完善.请参考 “互联网官方协 ...
- HTTP协议发展介绍
HTTP协议工作于C/S架构上,是万维网服务器传输超文本到本地客户端的一种应用层协议,全称是:Hyper Text Transfer Protocol(超文本传输协议),HTTP是基于TCP/IP通信 ...
- HTTP协议篇(一):多工、数据流
管道机制.多工 管道机制(Pipelining) HTTP 1.1 引入了管道机制(Pipelining),即客户端可通过同一个TCP连接同时发送多个请求.如果客户端需要请求两个资源,以前的做法是在同 ...
随机推荐
- 去除移动端alert/confirm的网址(url)
移动端的alert.confirm都会显示来源的url,影响体验 下面的代码将alert和confirm重写了一遍,可去除url 参考了网上代码,完善了confirm不同状态跳转 示例代码: & ...
- Socket网络编程--聊天程序(9)
这一节应该是聊天程序的最后一节了,现在回顾我们的聊天程序,看起来还有很多功能没有实现,但是不管怎么说,都还是不错的.这一节我们将讲多服务器问题(高大上的说法就是负载问题了.)至于聊天程序的文件发送(也 ...
- mysql 核心知识要点
整体知识介绍:mysql基本操作和使用,mysql优化(索引,分表等),mysql部署(读写分离,负载均衡等) 数据库基本介绍:数据库概念,常用数据库,web应用三大软件分工,PHP动态语言特点(处理 ...
- Git 藏匿操作
假设您正在为您的产品实施的一项新功能.你的代码是在推进开发进度而客户不断升级需求突然来了.正因为如此,你必须保持放下你的新功能,工作几个小时.你不能提交你的部分代码,也不能扔掉你的变化.所以,你需要一 ...
- Java知多少(23)类的基本运行顺序
我们以下面的类来说明一个基本的 Java 类的运行顺序: public class Demo{ private String name; private int age; public Demo(){ ...
- github管理开发代码流程
首先.通过github网站新建一个仓库,得到仓库地址 https://github.com/piercalex/a.git 接着回到客户端,打开git shell: //在客户端配置账户信息 git ...
- Java关键字-----------------java中synchronized关键字的用法
在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法. 因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识. j ...
- 简单的SSM框架搭建教程
简单的ssm框架的搭建和配置文件 ssm框架里边的配置: 1.src路径下直接存放数据库和log4j的properties文件 2.src路径下建个config包,分别放置ssm的xml文件 3.修改 ...
- win8 下 TortoiseSVN 不显示图标
如果你安装 TortoiseSVN 之后,功能使用正常,但是文件夹或文件左上角就是不显示图标,那么你可能 1. 64bit 系统上装了 32bit 的 TortoiseSVN 解决方法是,再安装 64 ...
- ruby的第一次使用
今天看购买的小册,看到推荐使用的工具是ruby写的,提供了源码地址,但是不知道怎么使用 因此尝试使用了下ruby,并记录下来 1.安装 去ruby的官网,下载windows安装包 启动 Ruby 安装 ...