我正在尝试以分块模式发送数据.正确设置所有标头并相应地编码数据.浏览器将我的响应识别为分块,接受标头并开始接收数据.
我期待浏览器会在每个收到的块上更新页面,而是等待直到收到所有块然后全部显示它们.这是预期的行为吗?
我希望看到每个块在收到后立即显示.使用时curl,每个块在收到后立即显示.为什么GUI浏览器不会发生同样的情况?他们使用某种缓冲/缓存吗?
我将Cache-Control标头设置为no-cache,所以不确定它是否与缓存有关.
我希望通过HTTP流式传输一组日志消息.我想一次发送一行消息,可能在行之间有延迟,我希望在服务器发送后尽快在浏览器中显示每一行.
我目前的方法是设置Content-Type为text/plain; charset=UTF-8响应,并从服务器开始必要时启动它们之间的延迟流线.我确保在每次写入后刷新所有相关的输出流.
我在Chrome中观察到的行为是它等待响应完全完成后再显示任何内容.但我想要的行为是看到发送的每一行.这可能吗?
我已经提出了很多关于这个主题的stackoverflow问题,但没有一个问题已经回答了我的问题.我认为Transfer-Encoding这与我无关,因为这似乎是为了下载大文件(如果我错了,请纠正我).
这不是关于下载文件的问题,因为我希望直接在浏览器中呈现这些行.
我正在使用Nancy编写一个简单的Web应用程序.至少有一个请求导致未知长度的流,所以我无法提供Content-Length.我想使用Transfer-Encoding: chunked,或(在这种情况下同样可以接受Connection: close).
我已经对Nancy源代码进行了快速破解,并且我已添加Response.BufferOutput,并且代码设置HttpContext.Response.BufferOutput为false.你可以在这里看到:
public class HomeModule : NancyModule
{
public HomeModule()
{
Get["/slow"] = _ => new SlowStreamResponse();
}
private class SlowStreamResponse : Response
{
public SlowStreamResponse()
{
ContentType = "text/plain";
BufferOutput = false;
Contents = s => {
byte[] bytes = Encoding.UTF8.GetBytes("Hello World\n");
for (int i = 0; i < 10; ++i)
{
s.Write(bytes, 0, bytes.Length);
Thread.Sleep(500);
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
它似乎没有任何影响.5秒钟后响应立即响起.我已经测试了这个基于简单WebRequest的客户端.
如何在Nancy中使用chunked输出?我正在使用ASP.NET托管,但我对其他托管选项的答案感兴趣.
如果我写一个简单的服务器使用 …
我有一个非常简单的node.js服务器,我用它来 ping 一些我需要保持在线的服务器。
使用Express,我可以访问一个非常简单的端点,它将执行请求循环并报告结果。
在每个循环上使用res.write(),我加载的网页可以向我显示正在发生的进度。
问题是,这种进展不会发生在Safari或OS X上iOS。它会等到该过程完成,然后一次性转储整个输出。
这是我的代码的示例:
router.route('/test').get(function(req, res)
{
res.write('<html><head></head><body>');
res.write('Starting tests...<br />');
performServerTests(req, res, function(results)
{ // Each loop within performServerTests also uses res.write()
res.write('<br />Complete');
res.end('</body></html>');
});
});
Run Code Online (Sandbox Code Playgroud)
是否有已知的原因导致 Safari 会等待调用res.end()后再显示其已有的内容,而 Chrome 会res.write()在收到消息时显示每条消息?
谢谢
http ×2
browser ×1
express ×1
firefox ×1
http-headers ×1
javascript ×1
nancy ×1
node.js ×1
safari ×1
stream ×1