Articles of http2

HTTP2推送脚本标签在res.end

使用Speedy NPM模块阅读HTTP2文章后,我有一个问题。 HTTP2推送的好处是浏览器在浏览器请求之前caching资源。 在这个例子中: spdy.createServer(options, function(req, res) { // push JavaScript asset (/main.js) to the client res.push('/main.js', {'content-type': 'application/javascript'}, function(err, stream) { stream.end('alert("hello from push stream!")'); }); // write main response body and terminate stream res.end('Hello World! <script src="/main.js"></script>'); }).listen(443); 什么<script src="/main.js"></script>实际上导致浏览器在res.end('Hello World! <script src="/main.js"></script>') ? 如果index.html里面有<script src="/main.js"></script> ,为什么把它放在res.end('Hello World! <script src="/main.js"></script>') ?

HTTP2 / SPDY推送validation:如何testing?

我正在使用节点模块spdy 实施HTTP2 / SPDY推送资源。 我遵循indutny的文档 ,并已经做了testing运行实现他的例子到我的server.js。 问题是双重的; 我没有得到任何日志中的错误,也没有看到在浏览器中的alert 。 在开发者控制台中我也没有看到任何改变。 如果我设置一个伪造的推送url,我不会收到任何回应/错误等。 我相信在理论上,优先级应该从中medium High (?)。 请参阅屏幕截图。 有没有另外一种方法来testing浏览器是否被推送? 或者,我的脚本中是否有错误( 请检查不一致 )? 另外,抛出什么stream.on('error', function() {}); ? 在Chrome(在ChromeBook上)中进行testing,在Chrome中validation了nodejs v5.1.0,npm v3.3.12 – 启用了H2。 server.js: var environment = '../env/' + process.env.NODE_ENV // Process User config , fS = require('fs') , jsonFile = fS.readFileSync(environment + '/config.json') , jsonString, hostIp, hostPort, cacheExp, cps; […]

我可以使用http2将响应stream式传输回浏览器吗?

是否有可能从浏览器,也许使用http2stream回应答? 在我的networking应用程序中,用户按下了一个启动服务器进程的button。 此过程可能需要10分钟或更长时间才能完成。 我想将状态更新传回给客户端/浏览器。 我相信我可以用websockets做到这一点,但是我希望http2有一些东西可以使这个更容易。 我知道它支持“推”,但据我所知,这只是推送用户将来可能需要的文件。 或者,也许我甚至不需要http2? 浏览器保持连接多长时间? 我可以无限期地保持res.write()吗?

expressjs v5发布date?

6月份有一个小小的expression,但是自从1月份以后(在被StrongLoop和IBM收购之前)没有任何performance。 自从StrongLoop收购以来,它似乎一直在收集灰尘……有没有人有什么想法,他们可能会开始采取行动? 即使围绕这个问题的讨论似乎也是死的。 终于见到http2支持会很好,我不敢相信像express这样的stream行架构还没有它,现在已经落后了一段时间。

是否有一个“请求”像使用http2的包?

我们在工作中使用请求 。 我们现在可以访问我们的服务器到服务器请求的http2 。 你知道任何节点包与使用http2的请求相同的api(ish)吗?

HTTP2 – 如何具有类似WebSocket的function(Keep-Alive,EventSource等)

想知道如何在Node.js中设置客户端和服务器之间的持久连接。 持久连接应该能够从双方来回发送请求。 似乎需要有一个机制来描述每个请求,比如\r\n如果请求是JSON,但是不知道如果之前已经完成了什么最佳实践, 想知道如何networking套接字处理这一点。 Mozilla说Keep-Alive不应该用在生产中,所以想知道HTTP2是否仍然适用。 使用EventSource可以接收服务器事件,但是想知道是否有办法添加客户端事件发送到服务器。 最后,我希望有一个像WebSockets一样的双向通信的简单设置,但是我不确定HTTP2的最佳实践,以及是否应该使用WebSockets完成。 我宁愿尝试没有websockets这样做。 https://daniel.haxx.se/blog/2016/06/15/no-websockets-over-http2/

获取socket.io,express和node-http2通过HTTP / 2进行通信

我使用socket.io,node-http2编写了一个Web Socket服务器,并在Node.js中表示。 除了根据Chrome的DevTools socket.io的协商请求通过HTTP / 1.1(如下所示)之外,服务器按预期工作。 如果请求是使用HTTP / 2发送的,则“协议”列应显示h2 。 这只在Chrome中发生,其他浏览器使用正确的协议。 服务器代码(缩写): var PORT = 8667, config = require('./config'), socketioServer = require('socket.io'), app = express(), https = require('http2'), cors = require('cors'); app.use(cors(function(req, callback){ var corsOptions = { origin: false }; if (/^https:\/\/mlpvc-rr\.lc/.test(req.header('Origin'))) corsOptions.origin = true; callback(null, corsOptions); })); app.get('/', function (req, res) { res.sendStatus(403); }); […]

TypeError:dest.end不是一个函数

我正在尝试使用HTTP / 2。 我的快递版本是5.0.0-alpha.2, http2版本是3.3.4。 我想http2应该和express 5一起工作 。 const http2 = require('http2'); // const http2 = require('spdy'); // using spdy package here, everything works perfect const options = { key: fs.readFileSync(path.join(__dirname, 'private', 'server.key')), cert: fs.readFileSync(path.join(__dirname, 'private', 'server.crt')) }; const server = http2 .createServer(options, app) .listen(3000, err => { if (err) throw new Error(err); // I […]

使用从chrome到node-http2服务器的HTTP / 2时,请参阅多个TCP连接

更新(对于任何对结果感兴趣的人:) 我无法弄清为什么chrome和node-http2服务器之间的下一个协议协商失败。 我的怀疑是自签名证书或ALPN / NPN支持问题。 所以我搬到了golang HTTP / 2的实现 。 相同的设置完美地工作,我看到单个多路复用的TCP连接(铬 – > golang) 我一直在阅读关于HTTP / 2的知识,以及它如何通过每个主机的单个多路复用TCP连接来解决HTTP / 1.1的延迟问题,所以我决定尝试一下。 本实验 创build一个简单的HTML文件,引用一个CSS,一个JS和几个图像。 Node.js中的一个简单的http服务器,它提供所有这些文件 使用chrome发出http请求 在Ubuntu上使用tcptrack( tcptrack )来跟踪到http服务器的TCP连接。 tptrack窗口显示build立了4个连接。 所以浏览器打开不同的连接图像和CSS / JS请求。 我使用tcpdump获得类似的输出。 供参考使用的tcptrack命令是 tcptrack -d -i eth0 -r 3600端口8989 而tcpdump也显示类似的输出 tcpdump -i eth0 -nns 0“dst port 8989 and tcp [tcpflags] == tcp-syn” 服务这些文件的简单的一台http服务器就像下面这样(相关的代码) (function(){ ……….. var […]

使用SystemJS生成工作stream,并通过CDN托pipe外部依赖项

我试图找出一个良好的生产工作stream程,与开发工作stream程很好。 需要从构build中排除1MB的外部库,然后使用CDN分别托pipe它们。 所以我们有这个: <script src="jspm_packages/system.js"></script> <script src="config.js"></script> <script src="build.js"></script> <script> System.import('app/main.js'); </script> 这很好,main.js中的任何内容都被忽略,因为它已经包含在build.js中。 虽然我猜这意味着什么时候该回到开发热门的时候,我们必须先删除build.js? 所以现在我想分开生产的外部依赖关系: builder.buildStatic('app/main.js', 'build.js', { externals: ['jquery'], globalName: 'App', globalDeps: { 'jquery': 'jQuery' } }); 当我们这样做时,我们需要添加一行: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2 jquery.min.js"></script> <script src="jspm_packages/system.js"></script> <script src="config.js"></script> <script src="build.js"></script> <script> System.import('app/main.js'); </script> 这意味着,当我们切换回开发版本时,jQuery将被双重捆绑到main.js中? 然后是SystemJS的片段: System.config({ bundles: { 'build/core': ['jquery'] } }); System.import('app/main.js'); 不知道如何使用这个,因为现在我们不会使用CDN来托pipejQuery。 所以对我来说,这种感觉就像一个捕捉22. JSPM是伟大的,因为它给你的包pipe理,但要在生产中使用的包,你希望他们在外面。 所以如果我们不得不在页面中包含脚本标签,那么这不就是JSPM的目的呢? […]