Sendet jede Webanforderung die Cookies des Browsers?
Ich spreche nicht von Seitenaufrufen, sondern von einer Anfrage nach einem Bild, einer .js
Datei usw.
Aktualisieren Wenn eine Webseite 50 Elemente enthält, sind dies 50 Anforderungen. Warum sollte es die gleichen Cookies für jede Anfrage senden, nicht zwischenspeichern oder wissen, dass es bereits vorhanden ist?
Antworten:
Ja, solange sich die angeforderte URL in derselben Domäne und demselben Pfad befindet, die im Cookie definiert sind (und alle anderen Einschränkungen - sicher, nur http, nicht abgelaufen usw.), gilt das Cookie für jede Anforderung.
quelle
Wie andere bereits gesagt haben, wird der Host, der Pfad usw. des Cookies 50 Mal gesendet, wenn er den Einschränkungen entspricht.
Sie haben aber auch gefragt, warum: weil Cookies eine HTTP-Funktion sind und HTTP zustandslos ist. HTTP funktioniert so, dass der Server keinen Status zwischen Anforderungen speichert.
Tatsächlich kann der Server nicht genau erkennen, welcher Benutzer eine bestimmte Anfrage sendet. Hinter einem einzelnen Webproxy (und damit der IP-Adresse) können sich tausend Benutzer befinden. Wenn die Cookies nicht bei jeder Anfrage gesendet würden, hätte der Server keine Möglichkeit zu wissen, welcher Benutzer welche Ressource anfordert.
Schließlich hat der Browser keine Ahnung, ob der Server die Cookies benötigt oder nicht. Er weiß nur, dass der Server ihn angewiesen hat, das Cookie für jede Anfrage an foo.com zu senden. Manchmal benötigen Bilder sie (z. B. dynamisch generierte Benutzer), manchmal nicht, aber der Browser kann es nicht erkennen.
quelle
Ja. Jede Anfrage sendet die Cookies, die zur gleichen Domain gehören. Sie werden nicht zwischengespeichert, da HTTP zustandslos ist. Dies bedeutet, dass jede Anforderung ausreichen muss, damit der Server herausfindet, was damit zu tun ist. Angenommen, Sie haben Bilder, auf die nur bestimmte Benutzer zugreifen können. Sie müssen Ihr Auth-Cookie mit jeder dieser 50 Anfragen senden, damit der Server weiß, dass Sie es sind und nicht jemand anderes oder ein Gast aus dem Pool der Anfragen, die er erhält.
Allerdings werden Cookies aufgrund anderer Einschränkungen, die in den anderen Antworten erwähnt werden, wie z. B. HTTPS-Einstellung, Pfad oder Domäne, möglicherweise nicht gesendet. Besonders dort ist ein wichtiger Punkt zu beachten: Cookies werden nicht zwischen Domains geteilt. Dies hilft bei der Reduzierung der Größe von HTTP-Aufrufen für statische Dateien, wie z. B. die von Ihnen erwähnten Bilder und Skripte.
Beispiel: Sie haben 4 Cookies bei
www.stackoverflow.com
; Wenn Sie eine Anfrage an stellenwww.stackoverflow.com/images/logo.png
, werden alle diese 4 Cookies gesendet.Wenn Sie dies jedoch anfordern
stackoverflow.com/images/logo.png
(beachten Sie die Änderung der Subdomain) oderimages.stackoverflow.com/logo.png
, sind diese 4 Cookies nicht vorhanden - möglicherweise jedoch diejenigen, die sich auf diese Domains beziehen.Weitere Informationen zu Cookies und Bildern, die beispielsweise angefordert werden, finden Sie beispielsweise in diesem StackOverflow-Blogbeitrag .
quelle
Nein, nicht jede Anfrage sendet die Cookies. Dies hängt von der Cookie-Konfiguration und der Client-Server-Verbindung ab.
Wenn beispielsweise die
secure
Option Ihres Cookies auf gesetzt ist,true
muss es über eine sichere HTTPS-Verbindung übertragen werden. Wenn Sie diese Website mit HTTP-Protokoll sehen, werden diese Cookies nicht von Browsern gesendet, da das sichere Flag wahr ist.quelle
Cookie hat eine "Pfad" -Eigenschaft. Wenn "path = /", lautet die Antwort Ja.
quelle
/app/
oder ähnlich sind. Dadurch bleibt die Portabilität erhalten, ohne dass separate Subdomains erforderlich sind , um redundanten Overhead zu vermeiden. Oder Sie könnten zunächst die jetzt nutzlose Google Analytics fallen lassen. Ich habe so lange Cookie-Header gesehen, dass ich mich frage, ob meine Großmutter sie gestrickt hat.3 Jahre sind vergangen
Es gibt noch einen weiteren Grund, warum ein Browser keine Cookies sendet. Sie können
crossOrigin
Ihrem<script>
Tag ein Attribut und den Wert zu hinzufügen"anonymous"
. Dadurch wird verhindert, dass Cookies an den Zielserver gesendet werden. In 99,9% der Fälle handelt es sich bei Ihren Javaskripten um statische Dateien, und Sie generieren diesen JS-Code nicht basierend auf den Cookies der Anfrage. Wenn Sie 1 KB Cookies haben und 200 Ressourcen auf Ihrer Seite haben, lädt Ihr Benutzer 200 KB hoch. Dies kann bei 3G einige Zeit dauern und hat keine Auswirkungen auf die Ergebnisseite. Besuchen Sie das HTML-Attribut: crossorigin als Referenz.quelle
Ich weiß, dass dies ein alter Thread ist. Ich habe jedoch gerade festgestellt, dass die meisten Browser keine Cookies für eine Domain senden, wenn Sie einen nachgestellten Punkt hinzufügen. Zum Beispiel
http://example.com.
erhalten keine Cookies gesetzt für.example.com
. Apache hingegen behandelt sie als denselben Host. Ich finde dies nützlich, um die domänenübergreifende Nachverfolgung für die von mir eingeschlossenen externen Ressourcen zu erschweren. Sie können sie jedoch auch aus Leistungsgründen verwenden. Beachten Sie, dass dies die Validierung vonhttps
Zertifikaten bremst . Ich habe einige Tests mit Browsershots und meinen eigenen Geräten durchgeführt. Der Hack funktioniert in fast allen Browsern, mit Ausnahme von Safari (Mobil und Desktop), bei dem Cookies in der Anfrage enthalten sind.quelle
Kurze Antwort ist Ja. Die folgenden Zeilen stammen aus der JS-Dokumentation
Cookies wurden früher für die allgemeine clientseitige Speicherung verwendet. Während dies legitim war, als sie die einzige Möglichkeit waren, Daten auf dem Client zu speichern, wird jetzt empfohlen, moderne Speicher-APIs zu verwenden. Bei jeder Anfrage werden Cookies gesendet, damit die Leistung beeinträchtigt werden kann (insbesondere bei mobilen Datenverbindungen).
quelle