Astro 5.11

作者
Emanuele Stoppa

更多实验性的内容安全策略(CSP)好东西,包括使用您偏好的适配器来提供 CSP!

Astro 5.11 是一个小的次要版本,它带来了新的 CSP 功能,以及在使用 Node.js 适配器时选择退出 HTML 流式传输的能力。

要升级现有项目,请使用自动化的 @astrojs/upgrade CLI 工具。或者,通过运行包管理器的升级命令来手动升级

# Recommended:
npx @astrojs/upgrade
# Manual:
npm install astro@latest
pnpm upgrade astro --latest
yarn upgrade astro --latest

带适配器的 CSP

到目前为止,静态页面只能通过 <meta http-equiv="content-security-policy"> 元素提供内容安全策略(CSP)头。这对一些用户来说很不方便,因为一些 CSP 指令,如 report-uriframe-ancestorssandbox,在 <meta> 元素中不受支持。

从 Astro 5.11.0 开始,官方的 @astrojs/node@astro/netlify@astro/vercel 适配器可以为预渲染页面指定自定义头部。这意味着这些适配器现在可以为静态页面设置 CSP 头部,从而支持所有指令,即使是在预渲染页面上也是如此。

这是一项实验性功能,通过启用新的 experimentalStaticHeaders 适配器选项即可使用。

astro.config.mjs
import { defineConfig } from "astro/config";
import node from "@astrojs/node";
export default defineConfig({
experimental: {
csp: true
},
adapter: node({
mode: "standalone",
experimentalStaticHeaders: true
})
})

您今天就可以在 Netlify、Vercel 和 Node.js 上开始使用此功能,Cloudflare 支持即将推出。

我们很快也将推出对 Cloudflare 的支持,它将使用 _headers 文件

在底层,这些适配器利用了一个名为 experimentalStaticHeaders 的新适配器 API 功能。如果您是适配器开发者,现在可以为您的用户提供完整的 CSP 功能。

禁用 HTML 流式传输

@astrojs/node 适配器现在可以通过新的 experimentalDisableStreaming 选项配置为禁用按需页面的 HTML 流式传输

HTML 流式传输有助于提高性能,通常能提供更好的访客体验。在大多数情况下,不建议禁用流式传输。

但是,当您需要禁用 HTML 流式传输时(例如,您的主机仅支持 CDN 级别的非流式 HTML 缓存),您现在可以选择退出默认行为。

astro.config.mjs
import { defineConfig } from 'astro/config';
import node from '@astrojs/node';
export default defineConfig({
adapter: node({
mode: 'standalone',
experimentalDisableStreaming: true
})
});

错误修复

一如既往,自 5.10 版本发布以来,我们一直在努力修复问题。请参阅变更日志了解所有详情。

社区

Astro 核心团队成员是

Alexander Niebuhr , Ben Holmes , Caleb Jasik , Chris Swithinbank , Emanuele Stoppa , Erika , Florian Lefebvre , Fred Schott , Fuzzy , HiDeoo , Luiz Ferraz , Matt Kane , Matthew Phillips , Nate Moore , Reuben Tier , Sarah Rainsberger , and Yan Thomas

感谢所有其他为 Astro 5.11 做出贡献的开发者,他们的代码和文档的添加和改进使之成为可能,其中包括:

Armand Philippot, coderfee, David Umoru, Dawid Gaweł, Durojaye Olusegun, Felix Eklöf, Fuan200, Happydev, Junseong Park, knj, Louis Escher, Martin Trapp, Matthew Justice, Michael Samoylov, michaltarasiuk, Nin3, Paul Valladares, pioupia, Rezix, Sgal Cheung, Thomas Bonnet, vivek lokhande, and vrabe