Во-первых, я не согласен с двумя предыдущими ответами - ни один не затрагивает вопрос.
Однопиксельное изображение решает внутреннюю проблему для веб-аналитических приложений (например, Google Analytics) при работе по протоколу HTTP - как передавать (веб-метрики) данные изклиент к серверу .
Самый простой из методов, описанных в Протоколе, самый простой (по крайней мере, самый простой метод, который включает тело запроса) - это GET запрос .Согласно этому методу протокола клиенты инициируют запросы к серверам на ресурсы;серверы обрабатывают эти запросы и возвращают соответствующие ответы.
Для веб-аналитического приложения, такого как GA, эта однонаправленная схема является плохой новостью, поскольку она не позволяет серверу извлекать данные изклиент по требованию - опять же, все серверы могут делать это, предоставляя ресурсы, а не запрашивая их.
Итак, каково решение проблемы получения данных от клиента обратно на сервер? В пределахВ контексте HTTP существуют другие методы протокола, отличные от GET (например, POST), но это ограниченный вариант по многим причинам (о чем свидетельствует его нечастое и специализированное использование, такое как отправка данных формы).
Если вы посмотрите наGET Запрос из браузера, вы увидите, что он состоит из URL-адреса запроса и Заголовки запроса (например, заголовки Referer и User-Agent), последний содержит информацию о клиенте--eg, тип и версия браузера, язык браузера, операционная система и т. д.
Опять же, это часть запроса о том, что клиентотправляет на сервер.Так что идея, которая мотивирует однопиксельный gif, заключается в том, что клиент отправляет данные веб-метрик на сервер, обернутый в заголовок запроса.
Но тогда как заставить клиента запрашивать ресурс, чтобы его можно было «обмануть» при отправке данных метрик? А как заставить клиента отправлять фактические данные, которые хочет сервер?
GoogleХороший пример - аналитика: файл ga.js (большой файл, загрузка которого клиенту запускается небольшим скриптом на веб-странице) содержит несколько строк кода, которые направляет клиентузапрашивать конкретный ресурс с определенного сервера (сервера GA) и отправлять определенные данные, заключенные в заголовок запроса.
Но поскольку целью этого запроса является не получение ресурса, аДля отправки данных на сервер этот ресурс должен быть как можно меньше, и он не должен быть виден при визуализации на веб-странице - следовательно, прозрачный GIF размером 1 x 1 пиксель.Размер - наименьший возможный размер, а формат (gif) - наименьший среди форматов изображений.
Точнее, все данные GA - каждый элемент - собираются и упаковываются в Запросить строку запроса URL (все после '?').Но для того, чтобы эти данные передавались с клиента (где он создается) на сервер GA (где он регистрируется и агрегируется), должен быть HTTP-запрос, поэтому ga.js (загруженный скрипт Google Analytics, если онкэшируется клиентом в результате функции, вызываемой при загрузке страницы) указывает клиенту собрать все аналитические данные - например, файлы cookie, строку местоположения, заголовки запроса и т. д. - объединить их в одну строкуи добавьте его в виде строки запроса к URL (*http://www.google -analytics.com / __ utm.gif *?), и он станет URL запроса .
Это легко доказать, используя любой веб-браузер, который позволяет просматривать HTTP-запрос для веб-страницы, отображаемой в вашем браузере (например, Safari Web Inspector , Firefox / Chrome Firebug и т. Д.).
Например, я ввел действительный URL-адрес корпоративной домашней страницы в адресную строку моего браузера, которая вернула эту домашнюю страницу и отобразила ее в моем браузере (я мог бы иметьвыбрал любой веб-сайт / страницу, которая использует одно из основных аналитических приложений, GA, Omniture, Coremetrics и т. д.)
В качестве браузера я использовал Safari, поэтому я нажал Разработка в строке меню, а затем Показать веб-инспектор .В верхней строке веб-инспектора нажмите Resources , найдите и щелкните ресурс utm.gif в списке ресурсов, показанном в левом столбце, а затем перейдите на вкладку Headers ,Это покажет вам что-то вроде этого:
Request URL:http://www.google-analytics.com/__utm.gif?
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
Ключевые моменты, на которые следует обратить внимание:
Запрос был фактически запросом на utm.gif, так какОб этом свидетельствует первая строка выше: * URL запроса: http://www.google -analytics.com / __ utm.gif *.
Параметры Google Analytics хорошо видны в строке запросадобавлен к URL-адресу запроса : например, utmsr - это имя переменной GA для ссылки на разрешение экрана клиента; для меня это значение равно 1280x800; utmfl - это имя переменной для флэш-версии со значением 10,3 и т. Д.
Заголовок ответа , называемый Содержимое-Тип (отправленный сервером обратно клиенту) также подтверждает, что запрошенный и возвращенный ресурс был размером 1x1 пикселей: Тип содержимого: image / gif
Эта общая схема передачи данных между клиентом и сервером существует всегда;вполне может быть лучший способ сделать это, но это единственный известный мне способ (который удовлетворяет ограничениям, накладываемым размещенной аналитической службой).