Sie können den HTTP-Header anfordern, um zu überprüfen, ob eine Webseite bearbeitet wurde, indem Sie ihr Datum betrachten, aber wie wäre es mit dynamischen Seiten wie - php, aspx - welche greift ihre Daten aus einer Datenbank?kann ich "http header" verwenden, um zu prüfen, ob eine dynamische Seite geändert wurde
Antwort
Sie können, wenn es die HTTP-Antwort-Header korrekt verwendet, aber es wird oft übersehen.
Andernfalls könnte es nützlich sein, einen lokalen md5-Hash des Inhalts zu speichern (es sei denn, es gibt eine einfachere In-Content-Zeichenfolge, die Sie abhaken könnten). Es ist nicht ideal (weil es ein ziemlich langsamer Prozess ist), aber es ist eine Option.
Ja, Sie können und sollten HTTP-Header verwenden, um Seiten als nicht abgelaufen zu markieren. Wenn sie jedoch dynamisch (PHP, ASPX usw.) und/oder datenbankgesteuert sind, müssen Sie die Einstellung der Expires-Kopfzeile/HTTP-Not-Modified-Verarbeitung manuell steuern. ASP.NET verfügt hierfür über einige SqlDependency-Objekte, die jedoch noch konfiguriert und verwaltet werden müssen. (Nicht sicher, ob PHP hat etwas so wie es, aber es ist wahrscheinlich etwas in PEAR, wenn auch nicht ...)
Dies ist der genaue Zweck des ETag Header, aber es hat von Ihrem Web-Framework unterstützt werden oder Sie müssen darauf achten, dass Ihre Anwendung ordnungsgemäß auf Anfragen mit Kopfzeilen antwortet. If-Match, If-Not-Match und If-Bereich (siehe HTTP Ch 3.11).
Der Header wird nur für Sie von Nutzen sein, wenn der Programmierer der Site explizit festgelegt hat, dass er zurückgegeben werden soll.
Für eine reguläre, statische Seite ist der Zeitstempel der letzten Änderung der HTML-Datei. Für eine dynamisch generierte Seite kann der Server keinen -Wert zuweisen, da er nicht wirklich wissen kann, wie sich der Inhalt je nach Anforderung geändert hat, so dass viele Server den Header überhaupt nicht generieren.
Wenn Sie die Kontrolle über die Seite haben, dann wird sichergestellt, dass der Header Letzte Änderung gesetzt ist, um sicherzustellen, dass eine Überprüfung auf erfolgreich ist. Andernfalls müssen Sie möglicherweise die Seite abrufen und entweder eine Regex ausführen, um einen geänderten Abschnitt zu finden (z. B. Datum/Uhrzeit in der Kopfzeile einer Nachrichtenwebsite). Wenn kein solcher offensichtlicher Marker existiert, dann würde ich Oli's suggestion eines MD5 auf dem Seiteninhalt als zweite Möglichkeit angeben, um sicherzugehen, dass es sich geändert hat.
Auch wenn Sie denken, dass es veraltet ist, fand ich Simon Willisons Artikel auf Conditional GET immer mehr als nützlich. Das Beispiel ist in PHP, aber es ist so einfach, dass Sie es an andere Sprachen anpassen können. Hier ist es das Beispiel:
function doConditionalGet($timestamp) {
// A PHP implementation of conditional get, see
// http://fishbowl.pastiche.org/archives/001132.html
$last_modified = substr(date('r', $timestamp), 0, -5).'GMT';
$etag = '"'.md5($last_modified).'"';
// Send the headers
header("Last-Modified: $last_modified");
header("ETag: $etag");
// See if the client has provided the required headers
$if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ?
stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) :
false;
$if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ?
stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) :
false;
if (!$if_modified_since && !$if_none_match) {
return;
}
// At least one of the headers is there - check them
if ($if_none_match && $if_none_match != $etag) {
return; // etag is there but doesn't match
}
if ($if_modified_since && $if_modified_since != $last_modified) {
return; // if-modified-since is there but doesn't match
}
// Nothing has changed since their last request - serve a 304 and exit
header('HTTP/1.0 304 Not Modified');
exit;
}
Damit Sie HTTP-Verben GET oder HEAD verwenden können (ich glaube, es ist auch möglich, mit den others, aber ich kann nicht sehen, den Grund, sie zu benutzen). Sie müssen entweder If-Modified-Since
oder If-None-Match
mit den entsprechenden Werten der Header oder ETag
, die von einer früheren Version der Seite gesendet wurden, hinzufügen. Ab HTTP-Version 1.1 wird empfohlen, ETag
über , aber beide werden die Arbeit tun.
Dies ist ein sehr einfaches Beispiel dafür, wie ein bedingtes GET funktioniert.Zunächst müssen wir die Seite auf die übliche Weise abzurufen:
GET /some-page.html HTTP/1.1 Host: example.org
erste Reaktion mit bedingten Header und Inhalte:
200 OK ETag: YourETagHere
Nun ist die bedingte GET-Anfrage:
GET /some-page.html HTTP/1.1 Host: example.org If-None-Match: YourETagHere
Und die Antwort, die anzeigt Sie können die zwischengespeicherte Version der Seite verwenden, da nur die Header geliefert werden:
304 Not Modified ETag: YourETagHere
Mit diesem hat der Server Sie benachrichtigt, es gab keine Änderung an der Seite.
Ich kann Ihnen auch einen anderen Artikel über bedingte GET empfehlen: HTTP conditional GET for RSS hackers.
- 1. Um herauszufinden, ob eine * .aspx Seite geändert wurde
- 2. Kann ich CURL verwenden, um HTTP/2-Header zu erhalten?
- 3. Wie kann ich JavaScript auf der Clientseite verwenden, um zu erkennen, ob die Seite verschlüsselt wurde?
- 4. Wie kann ich herausfinden, ob eine Datei geändert wurde?
- 5. objective c prüfen, ob die Bluetooth-Verfügbarkeit geändert wurde
- 6. Wie kann ich MSBuild verwenden, um Versionsinformationen nur zu aktualisieren, wenn eine Assembly geändert wurde?
- 7. JUnit Testfall, um zu prüfen, ob die Datei erstellt wurde
- 8. erkennen, ob etwas geändert wurde
- 9. wie zu bestimmen, ob Webseite geändert wurde
- 10. Wie kann ich prüfen, ob ein JavaScript-Eventhandler eingerichtet wurde?
- 11. Prüfen ob clearInterval aufgerufen wurde?
- 12. prüfen, ob eine Zahl um 36
- 13. Kann ich JS oder jQuery verwenden, um zu testen, ob ein SVG-Bild geladen wurde?
- 14. Kann ich dynamische Programmierung verwenden, um dies zu lösen?
- 15. Python und sqlite3, prüfen, ob ich fts5 Erweiterung verwenden kann?
- 16. Wie kann überprüft werden, ob eine Baugruppe geändert wurde?
- 17. Prüfe ich immer, ob das OAuth-Aktualisierungs-Token geändert wurde?
- 18. Wie zu verwenden Wie zu prüfen, ob eine Übereinstimmung existiert
- 19. Kann ich Orbited als HTTP-Server für dynamische Inhalte verwenden?
- 20. PHP + PHPMailer - prüfen, ob Email geöffnet/gelesen wurde
- 21. Warum der Header-Status nicht geändert wurde?
- 22. Excel/VBA, um zu prüfen, ob eine Zeile existiert
- 23. Globales Flag, um zu prüfen, ob eine Komponente in Flex bearbeitet wurde
- 24. Prüfen, ob URL zu einer Datei oder einer Seite führt
- 25. Funktion, um zu prüfen, ob eine Zeichenfolge Großbuchstaben enthält?
- 26. Kann ich sicher #ifdef verwenden, um zu wissen, ob ein C++ std-Header enthalten ist?
- 27. Clojure Makro um zu überprüfen, ob eine Funktion aufgerufen wurde
- 28. um Geld zu Seite http Anfrage golang
- 29. Prüfen, ob der Druck erfolgreich ausgeführt wurde
- 30. prüfen, ob eine Eigenschaft gesetzt wurde - mit Moq
Hat eine der vorgeschlagenen Lösungen für Sie funktioniert? –