Đầu tiên, tôi không đồng ý với hai câu trả lời trước - cả hai đều không liên quan đến câu hỏi.
Hình ảnh một pixel giải quyết vấn đề nội tại đối với các ứng dụng phân tích dựa trên web (như Google Analytics) khi làm việc trong Giao thức HTTP - cách chuyển dữ liệu (chỉ số web) từ máy khách đến máy chủ .
Phương thức đơn giản nhất trong số các phương thức được mô tả bởi Giao thức, phương thức đơn giản nhất (ít nhất là phương thức đơn giản nhất bao gồm phần thân yêu cầu) là yêu cầu GET . Theo phương thức Giao thức này, máy khách khởi tạo yêu cầu tới máy chủ về tài nguyên; máy chủ xử lý các yêu cầu đó và trả lại các phản hồi thích hợp.
Đối với một ứng dụng phân tích dựa trên web, như GA, lược đồ đơn hướng này là một tin xấu, vì nó dường như không cho phép máy chủ truy xuất dữ liệu từ máy khách theo yêu cầu - một lần nữa, tất cả các máy chủ có thể làm là cung cấp tài nguyên không yêu cầu họ.
Vậy đâu là giải pháp cho vấn đề lấy dữ liệu từ máy khách về máy chủ? Trong ngữ cảnh HTTP có các phương thức Giao thức khác ngoài GET (ví dụ: POST) nhưng đó là một tùy chọn hạn chế vì nhiều lý do (bằng chứng là nó được sử dụng không thường xuyên và chuyên biệt như gửi dữ liệu biểu mẫu).
Nếu bạn nhìn vào Yêu cầu GET từ trình duyệt, bạn sẽ thấy nó bao gồm URL yêu cầu và Tiêu đề yêu cầu (ví dụ: Người giới thiệu và Tiêu đề tác nhân người dùng), phần sau chứa thông tin về máy khách - ví dụ: loại trình duyệt và phiên bản, ngôn ngữ trình duyệt, hệ điều hành, v.v.
Một lần nữa, đây là một phần của Yêu cầu mà máy khách gửi đến máy chủ. Vì vậy, ý tưởng thúc đẩy gif một pixel là để khách hàng gửi dữ liệu chỉ số web đến máy chủ, được bao bọc bên trong Tiêu đề yêu cầu.
Nhưng sau đó làm thế nào để khách hàng Yêu cầu một tài nguyên để nó có thể bị "lừa" gửi dữ liệu số liệu? Và làm thế nào để máy khách gửi dữ liệu thực tế mà máy chủ muốn?
Google Analytics là một ví dụ điển hình: tệp ga.js (tệp lớn có tải xuống khách hàng được kích hoạt bởi một tập lệnh nhỏ trong trang web) bao gồm một vài dòng mã hướng khách hàng yêu cầu một tài nguyên cụ thể từ một máy chủ (máy chủ GA) và để gửi dữ liệu nhất định được bao bọc trong Tiêu đề yêu cầu.
Nhưng vì mục đích của Yêu cầu này không thực sự là để lấy tài nguyên mà là để gửi dữ liệu đến máy chủ, tài nguyên này phải càng nhỏ càng tốt và nó sẽ không hiển thị khi được hiển thị trong trang web - do đó, 1 x 1 pixel gif trong suốt. Kích thước là kích thước nhỏ nhất có thể và định dạng (gif) là nhỏ nhất trong số các định dạng hình ảnh.
Chính xác hơn, tất cả dữ liệu GA - mọi mục đơn lẻ - đều được tập hợp và đóng gói thành chuỗi truy vấn của URL yêu cầu (mọi thứ sau dấu '?'). Nhưng để dữ liệu đó đi từ máy khách (nơi nó được tạo) đến máy chủ GA (nơi nó được ghi lại và tổng hợp) thì phải có Yêu cầu HTTP, vì vậy ga.js (tập lệnh google analytics được tải xuống, trừ khi nó được khách hàng lưu vào bộ nhớ cache, do một hàm được gọi khi tải trang) hướng khách hàng tập hợp tất cả dữ liệu phân tích - ví dụ: cookie, thanh vị trí, tiêu đề yêu cầu, v.v. - nối nó thành một chuỗi duy nhất và nối nó dưới dạng một chuỗi truy vấn vào một URL ( * http: //www.google-analytics.com/__utm.gif* ?) và đó sẽ trở thành URL yêu cầu .
Thật dễ dàng để chứng minh điều này bằng cách sử dụng bất kỳ trình duyệt web nào cho phép bạn xem Yêu cầu HTTP cho trang web được hiển thị trong trình duyệt của bạn (ví dụ: Trình kiểm tra web của Safari , Firefox / Chrome Firebug , v.v.).
Ví dụ: tôi đã nhập url hợp lệ đến trang chủ của công ty vào thanh vị trí của trình duyệt, trang này sẽ trả về trang chủ đó và hiển thị nó trong trình duyệt của tôi (tôi có thể đã chọn bất kỳ trang web / trang nào sử dụng một trong những ứng dụng phân tích chính, GA , Omniture, Coremetrics, v.v.)
Trình duyệt tôi đã sử dụng là Safari, vì vậy tôi đã nhấp vào Phát triển trong thanh trình đơn, sau đó nhấp vào Hiển thị Trình kiểm tra web . Trên hàng trên cùng của Trình kiểm tra Web, bấm vào Tài nguyên , tìm và bấm vào tài nguyên utm.gif từ danh sách tài nguyên được hiển thị trên cột bên trái, sau đó bấm vào tab Tiêu đề . Điều đó sẽ cho bạn thấy một cái gì đó như thế này:
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
Những điểm chính cần lưu ý là:
Thực tế, Yêu cầu là một yêu cầu cho utm.gif, được chứng minh bằng dòng đầu tiên ở trên: * URL yêu cầu: http: //www.google-analytics.com/__utm.gif*.
Các thông số Google Analytics hiển thị rõ ràng trong chuỗi truy vấn được nối vào URL yêu cầu : ví dụ:
utmsr là tên biến của GA để chỉ độ phân giải màn hình máy khách, đối với tôi, hiển thị giá trị 1280x800; utmfl là tên biến cho phiên bản flash, có giá trị 10,3, v.v.
Các đáp ứng Tiêu đề gọi là
Content-Type (gửi qua các máy chủ lại cho khách hàng) cũng xác nhận rằng các tài nguyên được yêu cầu và trở lại là một gif 1x1 pixel:
Content-Type: image / gif
Sơ đồ chung này để truyền dữ liệu giữa máy khách và máy chủ đã tồn tại vĩnh viễn; rất có thể có một cách tốt hơn để làm điều này, nhưng đó là cách duy nhất mà tôi biết (đáp ứng các ràng buộc do một dịch vụ phân tích được lưu trữ áp đặt).