gooddeploy
Handbuch · Kapitel 18

Sicherheits-Header und Komprimierung

gooddeploy setzt auf jede Antwort deiner Seite drei Sicherheits-Header und komprimiert Text-Antworten mit gzip. Du musst dafür nichts einstellen. Bei Next.js kannst du jeden der Header mit einem eigenen Wert überschreiben.

Welche Header gooddeploy setzt

HeaderWertWozu
Strict-Transport-Securitymax-age=31536000Der Browser ruft deine Adresse ein Jahr lang nur noch per HTTPS auf.
X-Content-Type-OptionsnosniffDer Browser nimmt den angegebenen Inhaltstyp ernst und rät nicht selbst (schützt z. B. vor als Bild getarntem Skript).
Referrer-Policystrict-origin-when-cross-originAndere Seiten sehen beim Klick auf einen Link nur deine Domain, nicht den ganzen Pfad mit Parametern.

Das gilt für static und Next.js, für die Live-Seite und alle Previews, auch für Antworten mit 401 (Passwortschutz, Preview ohne Freigabelink) und 404.

Bewusst nicht dabei:

  • includeSubDomains und preload bei Strict-Transport-Security: Sie würden auch Subdomains deiner eigenen Domain betreffen, die gooddeploy nicht ausliefert.
  • Content-Security-Policy und X-Frame-Options: Sie hängen davon ab, welche Skripte, Fonts und Einbettungen deine Seite nutzt, und brechen sonst leicht etwas. Setze sie selbst, wenn du sie brauchst (unten).

Eine Ausnahme: Die Seite, die einen Freigabelink einlöst, und der Hinweis „kein Zugang“ für Previews ohne Link senden Referrer-Policy: no-referrer, damit der Link nie in einem Referer landet.

Weiterleitungen von http auf https und Weiterleitungen auf deine Haupt-Domain kommen ohne diese Header; Strict-Transport-Security wirkt ohnehin nur auf HTTPS-Antworten.

Header in Next.js überschreiben

Setzt deine App einen dieser Header selbst, gilt ihr Wert. gooddeploy schickt dann nur deinen Header, nicht zusätzlich den eigenen. Am einfachsten mit headers() in next.config.ts:

import type { NextConfig } from "next";

const nextConfig: NextConfig = {
  output: "standalone",
  async headers() {
    return [
      {
        source: "/:path*",
        headers: [
          { key: "Referrer-Policy", value: "same-origin" },
          { key: "X-Frame-Options", value: "DENY" },
          { key: "Content-Security-Policy", value: "frame-ancestors 'none'" },
        ],
      },
    ];
  },
};

export default nextConfig;

Das geht auch in der Middleware (proxy.ts bzw. middleware.ts) oder in einer API-Route. Header, die gooddeploy nicht setzt (z. B. Content-Security-Policy), kommen immer unverändert an.

Bei static (reines HTML, Vite, Astro …) kannst du die drei Header nicht überschreiben; eine Referrer-Policy kannst du dort mit <meta name="referrer" content="…"> im HTML setzen.

Komprimierung

Text-Antworten (HTML, CSS, JavaScript, JSON, SVG, XML, Daten der React Server Components) komprimiert gooddeploy mit gzip, wenn der Browser es anbietet. Bilder, Videos, Fonts und sehr kleine Antworten bleiben, wie sie sind.

Bei Next.js komprimiert gooddeploy vor deiner App; deine App bekommt keine Anfrage nach komprimierten Antworten und hat dadurch mehr Rechenzeit für die Seiten selbst. Du musst compress in next.config nicht ändern. Streaming mit Suspense bleibt erhalten: Die Teile einer Seite kommen weiter nacheinander beim Browser an.

Brotli bietet gooddeploy nicht an; Browser, die gzip, br anfragen, bekommen gzip.