Erstens bin ich mit den beiden vorherigen Antworten nicht einverstanden - beide beschäftigen sich nicht mit der Frage.
Das Ein-Pixel-Bild löst ein intrinsisches Problem für webbasierte Analyse-Apps (wie Google Analytics), wenn Sie im HTTP-Protokoll arbeiten - wie Daten (Web-Metriken) vom Client auf den Server übertragen werden .
Die einfachste der im Protokoll beschriebenen Methoden, die einfachste (zumindest die einfachste Methode, die einen Anforderungshauptteil enthält), ist die GET-Anforderung . Gemäß dieser Protokollmethode initiieren Clients Anforderungen an Server für Ressourcen. Server verarbeiten diese Anforderungen und geben entsprechende Antworten zurück.
Für eine webbasierte Analyse-App wie GA ist dieses unidirektionale Schema eine schlechte Nachricht, da es einem Server anscheinend nicht ermöglicht, Daten bei Bedarf von einem Client abzurufen. Auch hier können Server nur Ressourcen bereitstellen fordere sie an.
Was ist die Lösung für das Problem, Daten vom Client zurück auf den Server zu bringen? Innerhalb des HTTP-Kontexts gibt es andere Protokollmethoden als GET (z. B. POST), aber dies ist aus vielen Gründen eine eingeschränkte Option (wie durch die seltene und spezielle Verwendung wie das Übermitteln von Formulardaten belegt).
Wenn Sie sich eine GET-Anforderung von einem Browser aus ansehen, werden Sie feststellen, dass sie aus einer Anforderungs-URL und Anforderungsheadern (z. B. Referer- und User-Agent-Headern) besteht. Letztere enthält Informationen zum Client - z. B. Browsertyp und Version, Browser-Sprache, Betriebssystem usw.
Dies ist wiederum Teil der Anforderung, die der Client an den Server sendet. So die Idee , dass motiviert der Ein-Pixel - GIF ist für das Client der Web - Metrik - Daten an den Server, in einem Request - Header eingewickelt zu senden.
Aber wie kann man den Client dazu bringen, eine Ressource anzufordern, damit sie zum Senden der Metrikdaten "ausgetrickst" werden kann? Und wie kann man den Client dazu bringen, die tatsächlichen Daten zu senden, die der Server möchte?
Google Analytics ist ein gutes Beispiel: Die Datei ga.js (die große Datei, deren Download auf den Client durch ein kleines Skript auf der Webseite ausgelöst wird) enthält einige Codezeilen, die den Client anweisen, eine bestimmte Ressource von einer bestimmten Ressource anzufordern Server (der GA-Server) und zum Senden bestimmter Daten, die in den Anforderungsheader eingeschlossen sind.
Da der Zweck dieser Anforderung jedoch nicht darin besteht, eine Ressource abzurufen, sondern Daten an den Server zu senden, sollte diese Ressource so klein wie möglich sein und beim Rendern auf der Webseite nicht sichtbar sein - daher 1 x 1 Pixel transparent GIF. Die Größe ist die kleinstmögliche Größe, und das Format (gif) ist das kleinste unter den Bildformaten.
Genauer gesagt werden alle GA-Daten - jedes einzelne Element - zusammengestellt und in die Abfragezeichenfolge der Anforderungs-URL gepackt (alles nach dem '?'). Damit diese Daten vom Client (wo sie erstellt werden) zum GA-Server (wo sie protokolliert und aggregiert werden) übertragen werden können, muss eine HTTP-Anforderung vorhanden sein, also die Datei ga.js (Google Analytics-Skript, das heruntergeladen wird, sofern dies nicht der Fall ist) Vom Client zwischengespeichert als Ergebnis einer Funktion, die beim Laden der Seite aufgerufen wird.) Der Client wird angewiesen, alle Analysedaten - z. B. Cookies, Standortleiste, Anforderungsheader usw. - zu einer einzigen Zeichenfolge zusammenzufassen und hängen Sie es als Abfragezeichenfolge an eine URL an ( * http: //www.google-analytics.com/__utm.gif* ?), und dies wird zur Anforderungs-URL .
Es ist einfach, dies mit jedem Webbrowser zu beweisen, mit dem Sie die HTTP-Anforderung für die in Ihrem Browser angezeigte Webseite anzeigen können (z. B. Safari's Web Inspector , Firefox / Chrome Firebug usw.).
Zum Beispiel habe ich eine gültige URL für eine Unternehmenshomepage in die Standortleiste meines Browsers eingegeben, die diese Homepage zurückgegeben und in meinem Browser angezeigt hat (ich hätte jede Website / Seite auswählen können, die eine der wichtigsten Analyse-Apps, GA, verwendet , Omniture, Coremetrics, etc.)
Der von mir verwendete Browser war Safari, also klickte ich in der Menüleiste auf Entwickeln und dann auf Webinspektor anzeigen . Auf der obersten Zeile des Web Inspector, klicken Sie auf Ressourcen , finden und die utm.gif Ressource aus der Liste der Ressourcen auf der linken Spalte klicken, dann das Klicken Headers Registerkarte. Das zeigt dir so etwas:
Request URL:http:
utmwv=1&utmn=1520570865&
utmcs=UTF-8&
utmsr=1280x800&
utmsc=24-bit&
utmul=enus&
utmje=1&
utmfl=10.3%20r181&
Request Method:GET
Status Code:200 OK
Request Headers
User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/533.21.1
(KHTML, like Gecko) Version/5.0.5 Safari/533.21.1
Response Headers
Cache-Control:private, no-cache, no-cache=Set-Cookie, proxy-revalidate
Content-Length:35
Content-Type:image/gif
Date:Wed, 06 Jul 2011 21:31:28 GMT
Die wichtigsten Punkte sind:
Die Anfrage war in der Tat eine Anfrage für das utm.gif, wie aus der ersten Zeile oben hervorgeht: * URL der Anfrage: http: //www.google-analytics.com/__utm.gif*.
Die Google Analytics-Parameter sind in der an die Anforderungs-URL angehängten Abfragezeichenfolge deutlich sichtbar : zB
utmsr ist der Variablenname von GA, um auf die Bildschirmauflösung des Clients zu verweisen. Für mich wird ein Wert von 1280 x 800 angezeigt. utmfl ist der Variablenname für die Flash-Version mit einem Wert von 10,3 usw.
Der Antwortheader mit dem Namen
Content-Type (vom Server an den Client zurückgesendet) bestätigt außerdem, dass die angeforderte und zurückgegebene Ressource ein 1x1-Pixel-GIF war:
Content-Type: image / gif
Dieses allgemeine Schema zum Übertragen von Daten zwischen einem Client und einem Server gibt es schon immer. Es könnte durchaus einen besseren Weg geben, dies zu tun, aber es ist der einzige mir bekannte Weg (der die von einem gehosteten Analysedienst auferlegten Einschränkungen erfüllt).