标签: chunked-encoding

使用"transfer-encoding:chunked",在浏览器开始渲染之前必须发送多少数据?

所有浏览器在开始呈现您已通过网络刷新的部分http响应之前等待某些内容(有时也会等待一些时间) - 但是多少?

browser http chunked-encoding

16
推荐指数
1
解决办法
4972
查看次数

如何在ASP.NET响应中将Transfer-Encoding设置为chunked,显式或隐式?

我可以简单地设置Transfer-Encoding标题吗?

Response.Flush()在某些时候打电话会导致这种情况发生吗?


编辑
不,我不能打电话给Response.Headers.Add("Transfer-Encoding","anything"); 那个投掷.

还有其他建议吗?


相关:
在ASP.NET中启用分块传输编码

asp.net http transfer-encoding chunked-encoding

15
推荐指数
1
解决办法
4万
查看次数

c#文件上传的分块传输与ServiceStack中对路由参数的访问相结合

我正在寻求使用该IRequiresRequestStream接口来启用使用ServiceStack(v3)和分块传输编码的大文件上传(视频文件).标准文件上传似乎无法应对客户上传的一些较大的视频文件,因此我们希望为这些文件启用分块传输编码.

我已成功测试了分块传输编码文件上传,但还有许多参数需要与文件一起发送.

由于IRequiresRequestStream绕过了ServiceStack请求对象解析器,Stream因此显然没有填充请求对象中的任何其他参数.作为一种解决方法,我可以看到以下选项:

  1. 查询字符串参数,可通过this.Request.QueryString集合访问
  2. 自定义标头参数,可通过this.Request.Headers集合访问
  3. 路径,可通过RequestBinder

我已经设法实现了选项1和2,但不知何故感觉还不够RESTful.我更喜欢使用Path -> RequestDTO,但我正在努力RequestBinder.

服务:

public object Any(AttachmentStreamRequest request)
{
    byte[] fileBytes = null;

    using (var stream = new MemoryStream())
    {
        request.RequestStream.WriteTo(stream);
        length = stream.Length;
        fileBytes = stream.ToArray();
    }

    string filePath = @"D:\temp\test.dat";
    File.WriteAllBytes(filePath, fileBytes);

    var hash = CalculateMd5(filePath);
    var requestHash = this.Request.QueryString["Hash"];
    var customerId = this.Request.QueryString["CustomerId"];
    var fileName = this.Request.QueryString["FileName"];

    // nicer would be
    // var requestHash = …
Run Code Online (Sandbox Code Playgroud)

.net c# chunked-encoding servicestack

15
推荐指数
1
解决办法
754
查看次数

如何在Spring MVC中代理HTTP请求?

我有一个建立在Spring MVC之上的应用程序.

我想编写处理请求的简单代理,如下所示:

  1. 将相同的HTTP请求发送到某个特定的服务器
  2. 捕获来自此特定服务器的HTTP响应
  3. 向请求客户端返回相同的答案

这是我到目前为止所得到的:

public void proxyRequest(HttpServletRequest request, HttpServletResponse response) {
    try {
        HttpUriRequest proxiedRequest = createHttpUriRequest(request);
        HttpResponse proxiedResponse = httpClient.execute(proxiedRequest);
        writeToResponse(proxiedResponse, response);
    } catch (URISyntaxException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private void writeToResponse(HttpResponse proxiedResponse, HttpServletResponse response){
    for(Header header : proxiedResponse.getAllHeaders()){
        response.addHeader(header.getName(), header.getValue());
    }
    OutputStream os = null;
    InputStream is = null;
    try {
        is = proxiedResponse.getEntity().getContent();
        os = response.getOutputStream();
        IOUtils.copy(is, os);
    } catch (IOException …
Run Code Online (Sandbox Code Playgroud)

spring-mvc httpresponse http-proxy chunked-encoding

14
推荐指数
1
解决办法
7682
查看次数

(Chunked)HTTP二进制消息体和CRLF

我似乎无法得到以下问题的明确答案(谷歌搜索和阅读HTTP/1.1规范):

当使用'chunked'传输编码时,为什么服务器需要以字节为单位写出块大小并使后续块数据以CRLF结束.这不会使发送二进制数据"CRLF-unclean"并且方法有点多余吗?如果数据在某处有一个0x0A后跟0x0D(即这些实际上是数据的一部分)怎么办?客户端是否应该遵守在数据中遇到的第一个CRLF上的块头或阻塞处明确提供的块大小?到目前为止,我的理解是简单地获取服务器提供的块大小,继续下一行,然后从以下数据中读取这个字节数(CRLF或内部没有CRLF),然后跳过跟随数据的CRLF并重复该过程,直到没有更多的块... 我对吗?那么每个数据库之后的CRLF有什么意义呢?可读性?

http chunked-encoding

13
推荐指数
2
解决办法
5630
查看次数

如何在Tomcat 6中禁用Transfer-Encoding

我有一个在Tomcat 6.0.29服务器和JDK 1.6上运行的Web应用程序.

当我将响应发送到客户端时,Tomcat发送

Transfer-Encoding: chunked 
Run Code Online (Sandbox Code Playgroud)

响应大小> 8KB时在标头中.对于<8KB的回复,它会发送

Content-Length : 
Run Code Online (Sandbox Code Playgroud)

我知道Chunked编码是处理批量响应的首选方式,但是我们的客户不希望更改其代码(因为它分布在整个服务器上).

如何在Tomcat中禁用Chunked编码?

我可以在Tomcat中禁用HTTP/1.1并启用HTTP/1.0(不知道我该怎么做)

我尝试了以下但没有成功:

  1. 在Connector标签中server.xml,我设置了bufferSize =" 65536"

    Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           bufferSize="65536" socketBuffer="65536"
           redirectPort="8443" /&gt;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在server.xml中使用NIOConnector并进行以下配置:

    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
           connectionTimeout="20000"
           socket.directBuffer="false"
           socket.rxBufSize="25188"
           socket.txBufSize="43800"
           socket.appReadBufSize="32768"
           socket.appWriteBufSize="32768"
           socket.bufferPool="500"
           socket.bufferPoolSize="100000000"
           socket.processorCache="500"
           socket.keyCache="500"
           socket.eventCache="500"
           socket.tcpNoDelay="false"
           socket.soKeepAlive="true"
           socket.soTimeout="5000"
           redirectPort="8443" />
    
    Run Code Online (Sandbox Code Playgroud)

tomcat6 chunked-encoding http-headers

12
推荐指数
2
解决办法
2万
查看次数

Restlet流数据

我有这个任务,我正在从一个设备读取数据并通过Web服务提供它.数据每秒读取4次.我希望Web客户端具有开放的HTTP连接,并且只要客户端保持连接打开,就可以使用分块传输将设备读数作为流获取.

作为一个概念证明,我想从一个不断生成随机数的服务开始,每秒4次,将其包装在json中并将其传输给客户端.我试图基于twitter流API来松散地建模.

我正在使用restlet 2.1.2创建该Web服务,但我不确定我应该使用哪个Representation来实现这一点.我试着搜索这个,但没有找到任何有用的东西.有人可能会指出我正确的方向,我应该使用什么,也许是一些例子.

谢谢

java restlet chunked-encoding restlet-2.0

11
推荐指数
1
解决办法
1433
查看次数

针对具有请求2.3.0的空块避免ChunkedEncodingError

我正在使用请求从服务器下载文件(几千兆字节).要提供进度更新(并防止整个文件必须存储在内存中),我已将stream=True下载设置并写入文件:

with open('output', 'w') as f:
    response = requests.get(url, stream=True)

    if not response.ok:
        print 'There was an error'
        exit()

    for block in response.iter_content(1024 * 100):
        f.write(block)
        completed_bytes += len(block)
        write_progress(completed_bytes, total_bytes)
Run Code Online (Sandbox Code Playgroud)

但是,在下载中的某个随机点,请求会抛出一个ChunkedEncodingError.我已经进入源代码,发现这对应于IncompleteRead异常.我在这些行周围插入了一条日志语句并发现了e.partial = "\r".我知道服务器给下载的优先级低,我怀疑当服务器等待太长时间发送下一个块时会发生这种异常.

正如预期的那样,例外会停止下载.不幸的是,服务器没有实现HTTP/1.1的内容范围,所以我不能简单地恢复它.我已经玩过增加urllib3的内部超时,但异常仍然存在.

反正有没有让底层urllib3(或请求)更容忍这些空(或晚)块,以便文件可以完全下载?

python exception chunked-encoding python-requests

11
推荐指数
1
解决办法
5305
查看次数

JSON响应上的重复块

我有一个相当标准的MEAN项目设置,使用了yeoman的angular-fullstack生成器.

我发现的是,当获取一个较大的(超过65536字节)json结果时,它使用gzip和chunked进行编码,但返回的json无法在chrome中查看或由我的angular client $ resource使用,因为它包含TWO答复!例如,{name:'hi'}{name:'hi'}对于单个id或[{..},{..}][{..},{..}]阵列.

服务器api端点是从angular-fullstack生成器自动生成的,看起来像:

// Get list of worlds
exports.index = function(req, res) {
  World.find(function (err, worlds) {
    if(err) { return handleError(res, err); }
    res.json(200, worlds);
  });
};
Run Code Online (Sandbox Code Playgroud)

如果我对数据进行切片以使其不被分块,那么json就会很好地形成.我已经检查了mongo db并且数据也正常并且调试worlds变量,我可以JSON.stringify并获得预期的字符串结果而没有任何重复.但是当它被发送的那一刻,我正在将响应的json结果加倍.

更新评论

angular-fullstack 2.0.4

架构看起来像:

'use strict';

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var WorldSchema = new Schema({
  name: String,
  info: String,
  active: Boolean,
  tiles: [Schema.Types.Mixed]
});

module.exports = mongoose.model('World', WorldSchema);
Run Code Online (Sandbox Code Playgroud)

种子:

 var newWorld = new WorldModel({
                    _id: planet._objectId, …
Run Code Online (Sandbox Code Playgroud)

javascript json chunked-encoding node.js angularjs

11
推荐指数
1
解决办法
1265
查看次数

HTTP 1.1 - 客户端是否可以请求传输不被"分块"?

HTTP 1.1客户端是否可以设置一个标头值,指示不应对请求的响应进行分块?或者是防止这种情况的唯一方法是发送HTTP 1.0请求?我试过谷歌搜索,但我能找到的方法是禁用HTTP 1.1服务器上的分块传输,所以我猜测它在客户端是不可能的,但我想我还是会问.

http http-1.1 chunked chunked-encoding http-chunked

10
推荐指数
1
解决办法
7192
查看次数