1. ホーム
  2. javascript

[解決済み] なぜ1x1ピクセルのGIF(ウェブバグ)データを提供するのか?

2023-07-11 18:34:27

疑問点

多くの分析・追跡ツールが、クロスドメインイベントの保存/処理用に 1x1 GIF 画像 (ユーザーからは見えない Web バグ) を要求しています。

なぜこの GIF 画像をまったく提供しないのですか? それは より効率的 のようなエラーコードを返す方が効率的ではありませんか? 503 サービスが一時的に利用できません または空のファイル?

更新してください。 より明確に言うと、GIF 画像データを提供するために必要なすべての情報が が既に送信されているのに をリクエストヘッダで送信しています。GIF 画像そのものは、何の有用な情報も返しません。

どのように解決するのですか?

Dougの回答はかなり包括的です。(OPの要望で、私のコメントから)追加でメモしておこうと思います。

Doug の回答は、1x1 ピクセル ビーコンが使用される目的について説明しています。私は、代替アプローチの可能性について概説しようと思いました。

204 コンテンツなし

サーバはリクエストを処理しましたが を返しますが エンティティボディを返す必要はなく 更新されたメタ情報を返したいかもしれません。レスポンス は新しいまたは更新されたメタ情報を含んでもよい の形で、新規または更新されたメタ情報を含んでもよい。 エンティティヘッダーがある場合は、そのヘッダーは に関連付けられるべきです (SHOULD)。 リクエストされた variant に関連付けられるべきです。

基本的に、サーバはリクエストを受け取り、ボディを送らない (この場合、画像を送らない) ことにします。しかし、これは意識的な決定であることをエージェントに知らせるために、コードで返信します。基本的に、これは肯定的な応答をするための単なる短い方法です。

から Google のページ速度に関する文書 :

ページビューを記録する一般的な方法の1つは ビューを非同期で記録する一般的な方法の1つは、次のとおりです。 JavaScriptのスニペットを ターゲットページの下部 (または オンロードイベントハンドラとして) 含めることです。 ログサーバーに通知します。 ページを読み込んだときにログサーバーに通知します。これを行う最も一般的な方法は これを行う最も一般的な方法は、サーバーにビーコンを要求する サーバーへのリクエストを作成することです。 ビーコンリソースのURLのパラメータとして ビーコン・リソースのURLのパラメータとしてエンコードすることです。HTTPレスポンスを非常に小さくするために HTTPレスポンスを非常に小さくするために 1x1ピクセルの透明な画像は、ビーコンリクエストに最適です。 ビーコンリクエストの候補となります。A より最適なビーコンとして HTTP 204レスポンス("no content") よりもわずかに小さい1x1 GIF よりもわずかに小さくなります。

試したことはありませんが、理論的には、GIF 自体を送信することなく同じ目的を果たすはずで、Google Analytics の場合、35 バイトを節約することができます。(全体から見れば、Google Analytics が 1 日に何兆ものヒットを提供しているのでなければ、35 バイトなんてたいしたことありません)。

このコードでテストすることができます。

var i = new Image(); 
i.src = "http://httpstat.us/204";