http 编码chunked

之前针对这个也不是很关注,这个chunked在nginx上是默认开启的,但是在apache上没有,所以当切换服务器的时候,同时遇到了这个问题,发现数据内容存在乱码。

定位我就知道应该是http header的问题,但是具体是什么也不是很清楚。

仔细查阅发现,这个chunked编码。

http以trunked编码方式传输的数据表示规则

一般HTTP通信时会使用是Content-Length头信息性来指定小,但是有时候无法确定信息大小,就要使用trunked编码动态的提供body内容的长度。

进行Chunked编码传输的HTTP数据要在消息头部设置:

Transfer-Encoding: chunked

表示Content Body将用chunked编码传输内容。

Chunked编码一般使用若干个chunk串连而成,最后由一个标明长度为0的chunk标示结束。

每个chunk分为头部正文两部分,

头部内容指定下一段正文的字符总数(非零开头的十六进制的数字)和数量单位(一般不写,表示字节).

正文部分就是指定长度的实际内容,两部分之间用回车换行(CRLF)隔开。

在最后一个长度为0的chunk中的内容是称为footer的内容,是一些附加的Header信息(通常可以直接忽略)。具体的chunk编码格式如下:

  1.   chunked-body =
    *chunk
  2.          "0" CRLF
  3.          footer
  4.          CRLF
  5.   chunk = chunk-size
    [ chunk-ext ] CRLF
  6.        chunk-data CRLF
  7.   hex-no-zero
    = <HEX excluding "0">
  8.   chunk-size = hex-no-zero
    *HEX
  9.   chunk-ext =
    *( ";" chunk-ext-name
    [ "=" chunk-ext-value
    ] )
  10.   chunk-ext-name
    = token
  11.   chunk-ext-val
    = token | quoted-string
  12.   chunk-data = chunk-size(OCTET)
  13.   footer = *entity-header

RFC文档中的chunked解码过程如下:

  1.   length := 0
  2.   read chunk-size, chunk-ext
    (if any) and CRLF
  3.   while (chunk-size >
    0) {
  4.       read chunk-data and CRLF
  5.       append chunk-data to entity-body
  6.       length := length
    + chunk-size
  7.       read chunk-size and CRLF
  8.   }
  9.   read entity-header
  10.   while (entity-header not empty)
    {
  11.       append entity-header to existing header fields
  12.       read entity-header
  13.   }
  14.   Content-Length := length
  15.   Remove "chunked" from Transfer-Encoding

nginx服务器关闭chunked编码方式:

chunked_transfer_encoding off;

参考链接:

http://www.6san.com/759/

http://www.sunnyu.com/?p=175

时间: 2024-10-01 00:29:06

http 编码chunked的相关文章

读《图解HTTP》总结--第三章

HTTP报文内的HTTP信息 HTTP通信过程包括从客户端发往服务器的请求及从服务器端返回客户端的响应.此篇就具体了解下请求和响应怎么运作的. 3.1 HTTP报文 用于HTTP协议交互的信息被称为HTTP报文.请求端(客户端)的HTTP报文叫做请求报文,响应端(服务器端)的叫做响应报文.HTTP报文本身是由多行(用CR+LF做换行符)数据构成的字符串文本. HTTP报文大致可分为报文首部和报文主题两部分.两者由最初出现的空行(CR+LF)来划分.通常,并不一定要有报文主体. 3.2 请求报文及

python爬虫:http请求头部(header)详解

本文根据RFC2616(HTTP/1.1规范),参考 http://www.w3.org/Protocols/rfc2068/rfc2068 http://www.w3.org/Protocols/rfc2616/rfc2616 http://www.ietf.org/rfc/rfc3229.txt 通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息.这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可 选的消息体组成.HTTP的头域包括通用头,请求头,

HTTP请求报文和响应报文

HTTP报文分为请求报文(request message)与响应报文(response message). 一.报文的组成部分 一个HTTP报文由3部分组成,分别是: (1).起始行(start line) (2).首部(header) (3).主体(body) 示例: HTTP/1.0 200 OK //起始行 Content-type:text/plain //首部 Content-length:19 //首部 Hi I'm a message! 主体 1.1 请求报文与响应报文的格式 请求

&lt;HTTP协议详解&gt;由浅入深看HTTP

一. HTTP协议的应用简单概况 HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式.2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径.请求方法常用的有GET.HEAD.POST.每种方法规定了客户与服务器联系的类型不同.由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快.3.灵活:HTTP允许传输任意类型的数据对象.正在传输的类型由Content-Type加以标记.4.无连接:无连接的含义是限制每次连接只处理一个请求.服务器处理完客户的请求,并收到客户

http协议前世与今生

翻阅了资料之后的个人总结 HTTP协议是基于TCP/IP协议的应用层协议. 他不涉及数据包(packet)的传输,主要规定了客户端和服务器之间的通信格式,默认是80端口 换句话来说,HTTP协议是用来打包数据的,TCP/UDP是用来传输的协议 TCP/IP协议不单指TCP协议,而是泛指整个TCP协议家族     最早的HTTP版本是1991年发布的HTTP0.9版本.当时的版本只有一个GET命令   GET / index.html 上面命令表示,TCP 连接(connection)建立后,客户

HTTP协议:header标头说明

原文地址   http://blog.chinaunix.net/uid-7374279-id-4518834.html Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求 Accept-Ranges: bytes Age 从原始服务器到代理缓存形成的估算时间(以秒计,非负) Age: 12 Allow 对某网络资源的有效的请求行为,不允许则返回405 Allow: GET, HEAD Cache-Control 告诉所有的缓存机制是否可以缓

Linux运维之Web基础(HTTP基础)

本次博文的主题是web服务哈.web服务也是Internet上使用最多的服务,通常被称为WWW(World Wide Web,万维网)服务. [本次博文的主要内容] HTTP协议基础 HTTP的报文首部 HTTP的请求报文 HTTP的响应报文 常见的Web服务器和浏览器 一.HTTP协议基础: 1.HTTP是什么: HTTP:HyperText Transfer Protocol,超文本传送协议,定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器.

CentOS6服务管理之WEB-http协议详解

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议.设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法.通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识.收录在RFC 2616中. 注: 1.Request For Comments(RFC),是一系列以编号排定的文件.文件收集了有关互联网相关信息,以及UNIX和互联网社区

http标头详解/即php中header函数应用解释

HTTP协议header标头详解 分类: Webkit Web Php C/C++ 2012-10-31 11:19 14366人阅读 评论(0) 收藏 举报 本文根据RFC2616(HTTP/1.1规范),参考 http://www.w3.org/Protocols/rfc2068/rfc2068 http://www.w3.org/Protocols/rfc2616/rfc2616 http://www.ietf.org/rfc/rfc3229.txt 通常HTTP消息包括客户机向服务器的请