@ fastify/ early- shits (中文( 台灣 ) )
关于处理HTTP 103代码的插件的建议草案. 依据: https://github.com/fastify/fastify/issues/2683 (中文(简体) )
安装
npm i @fastify/early-hints
选项
在插件注册期间, 您可以通过以下选项 :
await fastify.register(import('@fastify/early-hints'), {
warn: true // default: false
})
warn: 显示插件是否应该登录警告, 如果提供无效值作为早期提示
使用量
回复. write Early 提示
这种方法用于用需要的任何头来写出早期的提示. 它接受
无论是 object 或者说 Array 标题并返回 Promise。 。 。 .
const Fastify = require("fastify");
const eh = require("@fastify/early-hints");
const fastify = Fastify({ logger: true });
fastify.register(eh);
fastify.get("/", async (request, reply) => {
// object
await reply.writeEarlyHints({
'Content-Security-Policy': 'style-src: self;',
Link: ['</style.css>; rel=preload; as=style', '</script.js>; rel=preload; as=script']
})
// array
await reply.writeEarlyHints([
{ name: 'Content-Security-Policy', value: 'style-src: self;' },
{ name: 'Link', value: '</style.css>; rel=preload; as=style' },
{ name: 'Link', value: '</script.js>; rel=preload; as=script' },
])
return { hello: "world" };
});
const start = async () => {
try {
await fastify.listen({ port: 3000 });
fastify.log.info(`server listening on ${fastify.server.address().port}`);
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();
结果
$ curl -D - http://localhost:3000
HTTP/1.1 103 Early Hints
Content-Security-Policy: style-src: self;
Link: </style.css>; rel=preload; as=style
Link: </script.js>; rel=preload; as=script
HTTP/1.1 103 Early Hints
Content-Security-Policy: style-src: self;
Link: </style.css>; rel=preload; as=style
Link: </script.js>; rel=preload; as=script
HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
content-length: 17
Date: Thu, 12 Nov 2020 22:45:54 GMT
Connection: keep-alive
{"hello":"world"}
回复. write EarlyHintsLinks (英语)
此方法只用于写入 Link 头曰. 它接受一个 Array 财务报告和审定财务报表
返回时 Promise。 。 。 .
const Fastify = require("fastify");
const eh = require("@fastify/early-hints");
const fastify = Fastify({ logger: true });
fastify.register(eh);
fastify.get("/", async (request, reply) => {
await reply.writeEarlyHintsLinks([
"Link: </style.css>; rel=preload; as=style",
"Link: </script.js>; rel=preload; as=script",
])
await reply.writeEarlyHintsLinks([
{ href: "//example.com", rel: "preload", as: "style" },
{ href: "//example.com", rel: "preload", as: "style", cors: true },
{ href: "//example.com", rel: "preconnect" },
{ href: "//example2.com", rel: "preconnect", cors: true },
{ href: "//example3.com", rel: "preconnect", cors: "use-credentials" },
])
return { hello: "world" };
});
const start = async () => {
try {
await fastify.listen({ port: 3000 });
fastify.log.info(`server listening on ${fastify.server.address().port}`);
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();
结果
$ curl -D - http://localhost:3000
HTTP/1.1 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: </script.js>; rel=preload; as=script
HTTP/1.1 103 Early Hints
Link: </style.css>; rel=preload; as=style
Link: </script.js>; rel=preload; as=script
Link: <//example.com>; rel=preload; as=style
Link: <//example.com>; rel=preload; as=style; crossorigin
Link: <//example.com>; rel=preconnect
Link: <//example2.com>; rel=preconnect; crossorigin
Link: <//example3.com>; rel=preconnect; crossorigin=use-credentials
HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
content-length: 17
Date: Thu, 12 Nov 2020 22:45:54 GMT
Connection: keep-alive
{"hello":"world"}
浏览器限制
目前(2022-09-29),仅Chrome 103正在支持 103 Early Hints 财务报告和审定财务报表
克罗姆会忽略的 103 Early Hints 在下列情况下:.
- 根据子资源请求发出的早期提示
- Iframe 导航时发送的早期提示
- 在 HTTP/1.1 上或更早发送的早期提示
- 第二次和随后的早期提示
更多信息 https://chromium.googlesource.com/chromium/src/+/master/docs/ear-hints.md#103-ear-hints
参考资料
许可证
许可证根据 麻省理工学院。 。 。 .