Odpowiedź serwera 304 Not Modified
HTTP Status Code 304 (Not Modified)
HTTP status code 304 (Not Modified) jest odpowiedzią serwera, która wskazuje, że żądany zasób nie został zmieniony od momentu ostatniego żądania klienta. Kodeks ten jest wykorzystywany do optymalizacji pracy z pamięcią podręczną, co pozwala uniknąć przesyłania danych, które nie uległy zmianie.
1. Główne cechy statusu 304
- Definicja i przeznaczenie: Status 304 pozwala klientowi (np. przeglądarce) na określenie, czy powinien pobrać zasób ponownie, czy może skorzystać z kopii w pamięci podręcznej.
- Jak działa mechanizm kształtowania pamięci podręcznej z użyciem 304: Gdy klient wysyła zapytanie o zasób, dołącza do niego nagłówki, które informują serwer, kiedy zasób został ostatnio pobrany. Serwer porównuje daty i decyduje, czy zwrócić nową wersję, czy status 304.
- Warunki, w których serwer zwraca status 304: Status 304 jest zwracany, gdy zasób nie zmienił się od ostatniego pobrania, co jest weryfikowane na podstawie nagłówków takich jak If-Modified-Since i If-None-Match.
2. Praktyczne przykłady użycia statusu 304
Przykład z pamięcią podręczną obrazów na stronie internetowej
- Jak przeglądarka przechowuje pamięć podręczną: Przeglądarki internetowe przechowują zasoby, takie jak obrazy, aby zminimalizować czas ładowania stron. Gdy zasób jest pobierany po raz pierwszy, jest zapisywany w pamięci podręcznej.
- Zachowanie przy ponownym żądaniu: Przy ponownym żądaniu przeglądarka sprawdza lokalną pamięć podręczną. Jeśli zasób nie uległ zmianie, wysyła zapytanie z nagłówkiem If-Modified-Since, a serwer odpowiada statusem 304.
Przykład z API
Status 304 może być również użyty w kontekście API, gdzie zasoby są często aktualizowane. Klient może zapytać serwer o konkretny zasób, a jeśli nie uległ on zmianie, serwer odpowiada statusem 304, co pozwala zaoszczędzić na transferze danych.
Przykład z nagłówkami If-Modified-Since i If-None-Match
Klient może dołączyć nagłówki If-Modified-Since lub If-None-Match do swojego żądania. W przypadku, gdy zasób nie zmienił się od podanego czasu lub nie zmienił swojego etag, serwer zwraca status 304.
Nagłówek | Opis |
---|---|
If-Modified-Since | Określa datę, od której klient chce sprawdzić, czy zasób uległ zmianie. |
If-None-Match | Używa etag do porównania, czy zasób na serwerze zmienił się od ostatniego pobrania. |
3. Jak naprawić problemy z kodem 304 w różnych językach programowania
PHP
- Jak poprawnie ustawić nagłówki dla pamięci podręcznej: W PHP można ustawić odpowiednie nagłówki, aby informować przeglądarki o tym, jak długo powinny przechowywać zasoby.
- Przykład kodu do obsługi żądań i zwracania statusu 304:
if (filemtime('file.txt') <= strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { header('HTTP/1.1 304 Not Modified'); exit; }
Python (Flask)
- Jak skonfigurować pamięć podręczną i przetwarzanie statusu 304: W Pythonie używamy Flask, aby zarządzać nagłówkami.
- Przykład kodu do sprawdzania warunków pamięci podręcznej:
from flask import Flask, request, make_response app = Flask(__name__) @app.route('/resource') def resource(): response = make_response('Content') response.headers['Last-Modified'] = 'Wed, 21 Oct 2015 07:28:00 GMT' if request.headers.get('If-Modified-Since') == response.headers['Last-Modified']: return '', 304 return response
Node.js (Express)
- Jak obsługiwać żądania z użyciem statusu 304: Express pozwala na łatwe zarządzanie nagłówkami w odpowiedziach.
- Przykład kodu do pracy z nagłówkami If-Modified-Since:
app.get('/resource', (req, res) => { const lastModified = 'Wed, 21 Oct 2015 07:28:00 GMT'; res.set('Last-Modified', lastModified); if (req.headers['if-modified-since'] === lastModified) { return res.status(304).end(); } res.send('Content'); });
4. Często występujące błędy i sposoby ich rozwiązania
- Niewłaściwa konfiguracja pamięci podręcznej na serwerze: Upewnij się, że odpowiednie nagłówki są ustawione, aby umożliwić prawidłowe działanie pamięci podręcznej.
- Błędy w nagłówkach żądania: Sprawdź, czy nagłówki If-Modified-Since i If-None-Match są poprawnie sformułowane.
- Jak sprawdzić i debugować status 304: Użyj narzędzi deweloperskich w przeglądarkach, aby monitorować nagłówki i odpowiedzi serwera.