最近、Web クローラーに興味を持ちましたが、よくわからないことが 1 つあります。ページを取得し、そこからリンクを抽出し、後で同様に処理するためにそれらをキューに入れる単純なクローラーを想像してみてください。
特定のリンクが別のページではなく、何らかのアセットまたは他の種類の静的ファイルにつながる場合、クローラーはどのように処理しますか? どうやって知るのでしょうか?おそらく、このような大規模なバイナリ データや、xml や json ファイルでさえもダウンロードしたくないでしょう。コンテンツ ネゴシエーションはこれにどのように分類されますか?
コンテンツ ネゴシエーションがどのように機能するかは、Web サーバー側で要求を発行したときに、要求をexample.com/foo.png
満たさAccept: text/html
ない場合は html 応答または Bad Request ステータスを返す必要があります。実生活。Content-Type: image/png
とにかく、私が受け入れるだけだと言っているときでも、そのバイナリデータを送り返しますtext/html
。Web サーバーがこのように動作し、要求している正しい応答を強制しないのはなぜですか?
コンテンツ ネゴシエーションの実装が壊れていますか、それとも正しく実装するのはアプリケーションの責任ですか?
そして、実際のクローラーはどのように機能するのでしょうか? リンクの反対側にあるものを確認するために HEAD リクエストを先に送信することは、非現実的なリソースの浪費と見なされます。