我已经制作了一个小型服务器来尝试节点上的http2,但我无法判断推送机制是否正常工作。我的样式是通过http2加载的,但这并不意味着推送按预期工作......
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);
在devtools中,发起人说:“其他”。
答案 0 :(得分:3)
您需要明确告诉您的快速服务器要推送哪些资源。看看这里有一个体面的运行:
https://webapplog.com/http2-server-push-node-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>')
})
调用res.push()
是您要提供服务的文件的关键。
他还记录了编写一些中间件以处理资产推送的方法:
https://webapplog.com/http2-server-push-express-middleware/
实施此功能后,您可以在Ba devDP的答案中看到Chrome devtools中的推送项目。
答案 1 :(得分:1)