Nachdem ich in einem kürzlich erschienen Artikel zeigte, wie man versehentliches DDoS nach der Aktivierung von ActivityPub in WordPress mithilfe des Plugins Surge verhindern kann, fand ich nun eine Optimierung für verbesserte Cache-Handhabung. Mit der Standard-Konfiguration von Surge gibt es nämlich das Problem, dass es den Accept-Header ignoriert.

Dieser Accept-Header ist ein Wert, das normalerweise bei jeder Anfrage zu deinem Server mitgesendet wird. Durch den Zugriff dieser Seite durch den Browser ist der Wert für diesen Accept-Header beispielsweise so etwas wie text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8. Das zeigt dem Server, dass der Client (hier: der Browser) allgemein HTML, XHTML und XML als Antwort akzeptiert.

Bei Systemen, die mit ActivityPub arbeiten, sieht der Accept-Header eher so aus: application/activity+json, um dem Browser zu sagen, dass ein JSON in der ActivityPub-Variante gewünscht ist.

Wenn du nun Surge in seiner Standard-Konfiguration verwendest, wird dieser Accept-Header praktisch ignoriert. Das heißt, wenn du einen Beitrag per Browser aufrufst, landet das HTML im Cache. Wenn nun jemand den Beitrag über ActivityPub abruft, wird das HTML im Cache zurückgegeben, statt des gewünschten JSON.

Glücklicherweise fand Dominik Schilling eine clevere Lösung dafür, um verschiedene Cache-Versionen je nach Accept-Header zu speichern. Der Code sieht dabei so aus:

<?php
// Content negotiation.
$representation = 'html'; // Or 'generic'.
if ( isset( $_SERVER['HTTP_ACCEPT'] ) ) {
	$accept = strtolower( $_SERVER['HTTP_ACCEPT'] );

	if ( str_contains( $accept, 'text/html' ) ) {
		$representation = 'html';
	} elseif (
		str_contains( $accept, 'application/json' ) ||
		str_contains( $accept, 'application/activity+json' ) ||
		str_contains( $accept, 'application/ld+json' )
	) {
		$representation = 'json';
	}
}
$config['variants']['representation'] = $representation;
unset( $accept, $representation );

return $config;
Code-Sprache: PHP (php)

Speichere ihn in einer Datei namens cache-config.php im Wurzelverzeichnis deiner WordPress-Instanz und lade es durch das Hinzufügen des folgenden Werts in deiner wp-config.php:

define( 'WP_CACHE_CONFIG', __DIR__ . '/cache-config.php' );Code-Sprache: PHP (php)

Danach wird die Datei direkt geladen und ist aktiv und alles sollte sauber laufen. 🙂

1 Kommentar

  1. Ein skeptischer Blick auf Figma Sites In der letzten Woche hat das beliebte Design-Tool Figma ein neues Produkt angekündigt. Es hört auf den Name Figma Sites und ergänzt das Kern-Angebot von Figma aus wirtschaftlicher Sicht um ein wichtiges Feature: das Betreiben von Websites. Der Anbieter eines solchen Design-Tools ist wie kaum ein anderes Unternehmen positioniert, […]

Erwähnungen

Likes

Neuveröffentlichungen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Um auf deiner eigenen Website zu antworten, gib die URL deiner Antwort ein, die einen Link zur Permalink-URL dieses Beitrags enthalten sollte. Deine Antwort wird dann (möglicherweise nach der Moderation) auf dieser Seite erscheinen. Möchtest du deine Antwort aktualisieren oder entfernen? Aktualisiere oder lösche deinen Beitrag und gib die URL deines Beitrags noch einmal ein. (Mehr über die Funktion von Webmentions erfahren)