Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 快速http 2服务器推送_Node.js_Http_Express_Google Chrome Devtools_Http2 - Fatal编程技术网

Node.js 快速http 2服务器推送

Node.js 快速http 2服务器推送,node.js,http,express,google-chrome-devtools,http2,Node.js,Http,Express,Google Chrome Devtools,Http2,我已经制作了一个小型服务器来在节点上尝试http2,但是我无法判断推送机制是否工作。我的风格是通过http2加载的,但这并不意味着push按预期工作 const port = 3000 const spdy = require('spdy') const express = require('express') const path = require('path') const fs = require('fs') const app = express() app.get('*', (re

我已经制作了一个小型服务器来在节点上尝试http2,但是我无法判断推送机制是否工作。我的风格是通过http2加载的,但这并不意味着push按预期工作

const port = 3000
const spdy = require('spdy')
const express = require('express')
const path = require('path')
const fs = require('fs')
const app = express()

app.get('*', (req, res) => {
    res.set('Link', '</css/styles.css>; rel=preload; as=style');
  res.sendFile(__dirname + '/index.html')
})

const options = {
    key: fs.readFileSync(__dirname + '/keys/server.key'),
    cert:  fs.readFileSync(__dirname + '/keys/server.crt')
}

spdy.createServer(options, app).listen(3000);
const端口=3000
常数spdy=require('spdy')
const express=require('express')
const path=require('路径')
常量fs=require('fs')
const app=express()
应用程序获取(“*”,(请求,请求)=>{
res.set('Link',';rel=preload;as=style');
res.sendFile(uu dirname+'/index.html')
})
常量选项={
key:fs.readFileSync(_dirname+'/keys/server.key'),
证书:fs.readFileSync(uu dirname+'/keys/server.crt')
}
createServer(选项,应用程序).listen(3000);
在devtools中,启动器说:“其他”。

如果从服务器推送资产,Chrome将在开发者工具->网络的启动器列中显示“推送/其他”:

我没有在节点中使用SDPY模块,但看起来像从和
该模块不像其他服务器(如Apache)那样使用链接头推送资源。因此,除非您在HTTP/2模式下使用Apache,否则我怀疑您的代码是否会推送资源。

您需要明确告诉express服务器要推送哪些资源。请在这里仔细浏览一下:

来自该页面的示例路由:

app.get('/pushy', (req, res) => {
  var stream = res.push('/main.js', {
    status: 200, // optional
    method: 'GET', // optional
    request: {
      accept: '*/*'
    },
    response: {
      'content-type': 'application/javascript'
    }
  })
  stream.on('error', function() {
  })
  stream.end('alert("hello from push stream!");')
  res.end('<script src="/main.js"></script>')
})
app.get('/pushy',(req,res)=>{
var stream=res.push('/main.js',{
状态:200,//可选
方法:“GET”,//可选
请求:{
接受:'*/*'
},
答复:{
“内容类型”:“应用程序/javascript”
}
})
stream.on('error',function()){
})
end('警报(“推送流中的你好!”);')
res.end(“”)
})
调用
res.push()
是您想要提供服务的文件的关键所在

他还记录了一种编写中间件来处理资产推送的方法:


一旦实现了此功能,您可以在Chrome devtools中看到推送项,如BazzaDP的回答所示。

尝试在Chrome中使用蓝色表示spdy,红色表示http1.1,绿色表示quic@alpheushttp2正在工作,我可以在devtool网络协议专栏中看到这一点。然而,没有提到推动。在你的分机里也没有提到它(顺便说一句,它对我来说是蓝色的)。