HTTP-Snippets
Eine Sammlung wichtiger HTTP-Header.
CORS
Siehe:
- MDN-Doku CORS
- MDN-Doku Preflight-Request
Preflight-Anfrage per curl
schicken:
curl -v -X OPTIONS 'https://myservice.example.org' -H 'Access-Control-Request-Method: GET' -H 'Access-Control-Request-Headers: origin, x-requested-with' -H 'Origin: https://myorigin.example.org'
Beispiel-Antwort:
HTTP/1.1 204 No Content
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Max-Age: 86400
Access-Control-Max-Age
ist optional. Default ist 5 Sekunden (zumindest bei Chromium). Viele Server verwenden 86400
(24 Stunden). Das ist auch das Maximum (zumindest bei Firefox).
Caching deaktivieren
response.setHeader("Pragma", "no-store, no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
Achtung:
- WebKit cacht extrem aggresiv. Wenn man Scripte indirekt lädt (also ein Skript benutzt, das weitere Skripte nachlädt), dann ist WebKit praktisch nicht dazu zu überreden, neue Versionen anzufordern. Selbst der Button zum Cache leeren hilft nicht.
- Einzige Abhilfe: Ein Random-Parameter (oder Zähler) in der URL. Aber allein mit Headern ist da nichts zu machen.
- Zwingen kann man den Browser zu gar nix. Alle Header sind eine Empfehlung.
Caching aktivieren
response.setDateHeader("Expires", System.currentTimeMillis() + timeToLive);
response.setDateHeader("Last-Modified", System.currentTimeMillis());
ETags
Siehe: http://en.wikipedia.org/wiki/HTTP_ETag
Hinweise:
- Für ETags muss man aber mehr Aufwand treiben (wenn es nicht eh statischer Content ist, um den sich der Server von alleine kümmert).