2010-11-13 7 views
15

Nur versuchen zu verstehen, warum sie keine REST-API verwendet haben.Warum verwendet Google Analytics __utm.gif?

+1

möglich duplizieren: http://stackoverflow.com/questions/1227417/google-analytics-and-the-utm-gif-file –

+3

Negativ. Ich habe das gelesen, bevor ich das gepostet habe. Dieser Thread fragt nur, ob Sie die .gif-Datei auf Ihrem Server haben müssen. Ich habe mich gefragt, warum sie es überhaupt benutzen. – Jacksonkr

+4

zustimmen - zu fragen, wer dem GIF-Bild dienen muss, ist eine andere Frage als zu fragen, ob es überhaupt serviert werden muss. In diesem Q geht es darum, ob es einen besseren Mechanismus gibt, um die Daten vom Client zum Server zu übertragen. – doug

Antwort

28

In REST initiieren Clients Anforderungen an Server für Ressourcen; Server verarbeiten diese Anfragen und geben entsprechende Antworten zurück.

Die utm.gif ist nicht in der Server-zu-Client-Datenübertragung beteiligt, aber stattdessen ist es beteiligt, Daten in die andere Richtung zu bewegen.

Natürlich verfügt REST über HTTP-Methoden, mit denen der Client mit Servern kommunizieren kann (GET und POST). Google Analytics weist den Browser des Clients an, alle Analysedaten über eine GET-Anfrage an die GA-Server zu senden. Genauer gesagt besteht eine GET-Anforderung aus einer Anforderungs-URL und Anforderungsheadern (z. B. Referer- und User-Agent-Header).

Alle GA Daten - jedes einzelne Stück - zusammengebaut und verpackt die in Query-String des Anforderungs-URL (alles nach dem '?'). Damit diese Daten jedoch vom Client (wo sie erstellt werden) zum GA-Server (wo sie protokolliert und aggregiert wird) gehen muss, muss eine HTTP-Anfrage vorliegen, also das ga.js (google analytics Skript, das heruntergeladen wird, außer es ist Zwischengespeichert vom Client als Ergebnis einer Funktion, die aufgerufen wird, wenn die Seite geladen wird) weist der Client den Client an, alle Analysedaten - z. B. Cookies, Adressleiste, Anforderungsheader usw. - zu einer einzigen Zeichenfolge zusammenzufügen und an eine URL als Abfragezeichenfolge anhängen (http://www.google-analytics.com/__utm.gif?) und das wird die Anfrage URL.

Natürlich kann es keine HTTP-Anfrage ohne eine Ressource geben; also Ressource ist der Client vom Server anfordern? Es benötigt nichts vom Server, sondern möchte Informationen an den Server senden. Die tatsächliche Server-Ressource, die vom Client angefordert wird, ist also rein vortextuell - die Ressource wird vom Client nicht einmal benötigt, sie wird lediglich benötigt, um dem Übertragungsprotokoll-Operator zu entsprechen. Daher ist es sinnvoll, diese Ressource so klein und so unauffällig wie möglich zu gestalten, weshalb es sich um ein 1 x 1 transparentes Pixel im Gif-Format handelt. Es ist die kleinstmögliche Größe und das am wenigsten dichte Bildformat (Bytes/Pixel); Ich denke, es sind etwas mehr als 30 Bytes. Ein 1 × 1-Bild in den anderen üblichen Formaten (z. B. jpeg, png, tiff) ist größer.

Dieses allgemeine Schema für die Übertragung von Daten zwischen einem Client und einem Server ist für immer gewesen; Es könnte durchaus ein besserer Weg sein, dies zu tun, aber es ist der einzige Weg, den ich kenne (der die von einem gehosteten Analysedienst auferlegten Beschränkungen erfüllt).

(Google Analytics in der Tat zwei hat APIs-- "Data Export" and "Management" --which beide Dienste RESTful Web sind.)

+2

So sind sie nur die gif mit mit Protokoll konform eingeschätzten ? Sie senden alle ihre Daten über QS und brauchen keine Header, also bekomme ich es immer noch nicht :( PS- danke für die detaillierte Erklärung – Jacksonkr

+1

Nein, der Zweck der utm.gif ist dies: a js Web-Analyse-Rig erfordert, dass Daten vom Client an den Server übertragen werden.Eine 'GET' Anfrage war der Betreiber für diese Übertragung gewählt, was bedeutet, dass die Daten in die GET-Request-Header gepackt werden müssen.Eine GET-Anfrage ist eine Anfrage vom Client zum * Server *, aber nur so funktioniert es, daher muss der Client eine Ressource vom Server anfordern, damit es eine gültige GET-Anfrage ist, also wird eine 'falsche' Ressource verwendet, dieses winzige 1x1 Pixel transparentes Bild – doug

+7

@doug, Warum kann der Server nicht einfach eine 1-Byte-Zeichenfolge anstelle eines 35-Byte-GIF zurückgeben? –

7

Sie können in Browsern __utm.gif, die Javascript nicht die <noscript> unterstützen mit Tag (mit einigen Arbeiten auf dem Server), sowie in E-Mail-Nachrichten (mit etwas Arbeit vor dem Senden der E-Mail).

Wie werden Sie eine REST-Anfrage in einer E-Mail-Nachricht machen?

+0

Wenn JavaScript deaktiviert ist, kann das JavaScript-Snippet, das das eigentliche Google Analytics-Skript einfügt, nicht ausgeführt werden. – Alan

+0

@Alan falsch. Sie könnten __utf.gif mit einem Image-Tag anfordern. Dies erfordert kein JavaScript. Sie müssen die GA-Skripts nicht laden, um eine Anfrage an ihren Server zu stellen. –

+0

Der Tag selbst wird im laufenden Betrieb erstellt und vom Google Analytics-JavaScript eingefügt. Es ist nicht etwas, das bereits im Markup existiert – Alan

Verwandte Themen