「一部のページが読み込まれない」ため、インターネット接続で友人を助けたところ、特定のブログの画像投稿の画像がブラウザーに読み込まれなかったことが問題であることに気付きました。次の理由により、私は奇妙なことに気づきました。
wget
を使用すると機能します。これが発生する理由は何でしょうか?本当に私を引き付ける部分は、wget
が機能するという事実です。そのため、ネットワーク接続の問題ではないと私は思います。
更新:
ここ は、ブラウザーでのロードに失敗したレコードされた投稿の例です。 メインブログ には、適切に読み込まれる他の画像投稿があります。 This は投稿内の画像への直接リンクであり、 here はより大きなバージョンのリンクです(どちらもここに読み込まないでください)。 wget
はどちらでも機能しますが、Firefoxとの直接リンクにアクセスすると、次のエラーが表示されます。
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>A626307DF577B411</RequestId>
<HostId>J9GxX1HY9vX3ElWjYf7M48ByvKXLRIwRBJ2al2voS3J/C+WhILWHyd3crFhhNtkXuvG0zaxBTxw=</HostId>
</Error>
RequestID
とHostId
は毎回変わります。私の友人と私はフィリピンにいます。
更新[2014/03/08]
さらにテストを行い、Tumblrサポートのメールに返信したところ、wget
が機能しなくなった(直接リンクで403エラーが発生する)ことがありました。
更新[2014/03/09]
HTTPS-EverywhereのTumblrルールをオフにすると、問題がときどき修正されるようです。
注意:
UPDATE:ロードされない画像のコア問題は、 EFFのHTTPS Everywhereプラグイン/拡張機能 がいくつかのTumblr URLを処理する方法。開発者に通知され、 修正が行われているようです 。この回答は基本的に、最初の質問で概説されているように、問題を明らかにするために行われた検出作業を分解し、同様の問題が将来発生した場合のさらなるデバッグ/診断に役立つ可能性があります。
EDIT:画像リーチングに関する大きなコンテンツは無効のようです。したがって、誰かに役立つ場合に備えて、新しいアイデアを上部に追加し、画像のリーチング情報を下部に残します。
さて、あなたが提供したURLと、Amazon CloudFront CDNセットアップでの実際の経験の一部を使用して、私は何かを発見したと思います。 TumblrのAmazon CloudFront CDN構成が何らかの理由で窒息しているようです。これが私がそうだと思う理由です。
次のURLの例を見てみましょう。
http://36.media.tumblr.com/d685b02fdf2d3f167c22d9a97e27e87a/tumblr_nfpq5qPZ4v1tognpro1_1280.png
次に、curl -I
を実行して、そのファイルのヘッダー情報を取得します。
curl -I http://36.media.tumblr.com/d685b02fdf2d3f167c22d9a97e27e87a/tumblr_nfpq5qPZ4v1tognpro1_1280.png
そのための出力は次のようになります。
HTTP/1.1 200 OK
Content-Type: image/png
Content-Length: 782141
Connection: keep-alive
Accept-Ranges: bytes
Cache-Control: max-age=1209600
Date: Thu, 05 Mar 2015 02:15:44 GMT
Server: nginx
X-Cache: Miss from cloudfront
Via: 1.1 7e54fc06cd70e4752fe050bbe5c130be.cloudfront.net (CloudFront)
X-Amz-Cf-Id: QyIUyzfaJJN3PU_xWkW0P-D2kjg_1cVenKzFAoY2PubgZQlBHWorZQ==
ここで注意すべき点は、Date
(CloudFrontエンドポイント上のファイルの日付と時刻)およびX-Cache
(Amazonコンテンツ配信ステータス)ヘッダーです。 Amazon CloudFrontの典型的な動作は、最初のアクセスが「クラウドフロントからのミス」を伝え、その後すぐに別のcurl -I
を実行すると、Hit from cloudfront
が存在するはずです。
しかし、それは私が今見たものではありません。以下は、私が行った一連のアクセスのDate
およびX-Cache
ステータスの内訳です。
Date: Thu, 05 Mar 2015 02:19:37 GMT
= X-Cache: Miss from cloudfront
Date: Thu, 05 Mar 2015 02:19:39 GMT
= X-Cache: Miss from cloudfront
Date: Thu, 05 Mar 2015 02:19:44 GMT
= X-Cache: Miss from cloudfront
Date: Thu, 05 Mar 2015 02:19:50 GMT
= X-Cache: Miss from cloudfront
Date: Thu, 05 Mar 2015 02:19:50 GMT
= X-Cache: Hit from cloudfront
Date: Thu, 05 Mar 2015 02:19:50 GMT
= X-Cache: Hit from cloudfront
Date: Thu, 05 Mar 2015 02:19:50 GMT
= X-Cache: Hit from cloudfront
末尾にHit from cloudfront
である同じ正確なデータを持つ複数のアイテムがある理由は、それがCDNで発生することです。CDNのエンドポイントにファイルがある場合、Date
は相関しますエンドポイントにあるファイルの実際の作成/変更日。
最初の4つのアクセスは秒単位で離れており、日付と時刻が異なり、それらすべてがMiss from cloudfront
です。つまり、CDNエンドポイントは、その時点でそのファイルにアクセスする試みがあり、すべての試みが失敗したことをエコーバックしているだけです。
したがって、私のアームチェア評価では、TumblrのシステムがAmazon CloudFront CDNに対応していないか、Amazon CloudFront CDNがTumblrに対応していないということです。しかし、ある意味では、サーバー側で問題が発生しています。また、これはCDNであるため、ある場所のファイルにアクセスしている人は問題に気付かないかもしれませんが、別の場所にいる他の人は画像の表示に問題があります。
つまり、クライアント側で簡単に解決できるとは思いません。
EDIT:したがって、元の投稿者がいくつかの新しいURLを追加し、これそれでもサーバー側の問題を指摘していますが、私はレコードの詳細を投稿したかっただけです。
そのため、元のポスターに詳細が追加されたため、例として使用されているブログ投稿に基づく詳細を次に示します。
http://claystorks.tumblr.com/post/112741831192/soulmister-claystorks-windspeare-explain
そして、これらの画像のURLは、その投稿のURLの例として提供されています。
https://gs1.wac.edgecastcdn.net/8019B6/data.tumblr.com/76493f424ebb3b62d6de43e53643180a/tumblr_nkps82DdCh1sjn35qo1_500.png
https://gs1.wac.edgecastcdn.net/8019B6/data.tumblr.com/76493f424ebb3b62d6de43e53643180a/tumblr_nkps82DdCh1sjn35qo1_1280.png
そして、これら2つの画像URLは実際に失敗します。しかし、私の側から(米国ニューヨーク州ブルックリンからのブログ投稿の元のソースコードを見て)、これらのEdgeCast(gs1.wac.edgecastcdn.net
)URLが表示されません。むしろ、これらは私が見ているURLです:
http://41.media.tumblr.com/76493f424ebb3b62d6de43e53643180a/tumblr_nkps82DdCh1sjn35qo1_500.png
http://41.media.tumblr.com/76493f424ebb3b62d6de43e53643180a/tumblr_nkps82DdCh1sjn35qo1_1280.png
だから私の最初の考えは、なぜオリジナルのポスターがそれらのEdgeCast(gs1.wac.edgecastcdn.net
)を見ているのかということです。しかし、41.media.tumblr.com
へのtracerouteを実行すると、それがHighwinds(!?!?)によって管理されているサーバーであることがわかります。対照的に、元のユーザーから渡された初期URLは36.media.tumblr.com
ホスト名を使用しており、Amazon CloudFront CDNサーバーによって管理されていることがわかります。
これは言いたいことです-私は以前言った-これはすべてTumblrとそのCDN管理のサーバー側の問題のようです。しかし、私の側から(米国ニューヨーク州ブルックリン)、Highwinds CDNサーバーとAmazon CloudFront CDNサーバーから期待どおりにコンテンツが配信されているのがはっきりとわかります。これらのEdgeCast URLがどこから来ているのか、どのように/なぜ失敗しているのかは、クライアント側では制御できません。これは間違いなくTumblrの技術スタッフに連絡するためのものです。デスクトップのエンドユーザーがこれを解決する方法はないからです。
もう関係ないかもしれませんが、参照用にここにあります。
これを言ってあなたは私に手がかりを与えます:
画像の直接リンクで
wget
を使用すると機能します。
多くのサイトには、通常はApacheを介して設定されるルールがあり、画像のリーチングを防ぎます。これらのルールの動作の詳細 ここに記載されています であり、次のように要約されます。
.htaccessを使用すると、サーバーでのホットリンクを禁止できるため、たとえば、サイトの画像やCSSファイルにリンクしようとするユーザーがブロックされる(画像が壊れるなどの要求の失敗)か、別のコンテンツ(すなわち:怒っている人のイメージ)。
あなたの説明、およびwget
経由で画像にアクセスできるという事実に基づいて、問題が発生している画像はユーザーによってTumblrでホストされているのではなく、Tumblrに配置されている画像であると思いますブログですが、実際には別のサイトでホストされています。
標準の画像リーチング手順が導入されている場合、リーチングをブロックする別のサイトでホストされている埋め込み画像を表示すると、画像リンクが壊れるか、「リーチングを停止する!」返される画像。これは、そのページの例のような基本的なリーチング防止ルールが、画像リファラーをクロスチェックして、画像をリクエストしているページが画像をホストしているドメインと一致することを確認するためです。
したがって、wget
を介してイメージにアクセスする場合、イメージに直接アクセスします。そのため、画像リーチングルールは適用されません。したがって、wget
を介して画像を取得できますが、別のページに埋め込まれている場合は取得できません。
私は現在この非常に問題を抱えています。これは仕事にとって安全です。まあ、ばかげた話です 影響を受けるブログの例 。
ただし、問題がChromeでのみ発生したことが判明した場合。しばらくすると、問題の原因が拡張子「 HTTPS Everywhere 。」をFirefoxにインストールしたときも、同じ問題が発生しました。実際に、HTTPSルール「Tumblr(partial)」を無効にした場合(つまり、*.tumblr.com
)、それは再び正常に動作します。
したがって、問題は、少なくともときどきHTTPSを使用して画像にアクセスすると、無効なEdgeCast URLにリダイレクトされることのようです。たとえば、次の画像URLは正常に機能します。
http://36.media.tumblr.com/57d2af15f7b21037364125f9f32c4379/tumblr_nktjzyNkv91s667kio1_1280.png
ただし、プロトコルをhttp
からhttps
に変更すると、機能しない次のURLにリダイレクトされます。
https://gs1.wac.edgecastcdn.net/8019B6/data.tumblr.com/57d2af15f7b21037364125f9f32c4379/tumblr_nktjzyNkv91s667kio1_1280.png
これがTumblr側からのエラーとしてカウントされるかどうかはわかりません。クライアントがHTTPSを使用してメディアサーバーにアクセスすることを想定されていない場合、実際にクライアントのせいにすることはできないと思います。
EDIT:そして、実際にはこのGitHubスレッドで報告されているように、問題は で処理されたようです 。
私の携帯通信会社T-Mobileでこの動作に気づきました。これは、画像サイズに基づいたトラフィックシェーピングのようなものか、またはこのアイテムを取得する際にキャリアが作成した「難易度の指標」であると考えています。
1年以上前の以前のテストで、壊れた投稿をVerizonを持っている友人に共有したところ、画像は正常に読み込まれました。
私が提供しようとしているこの画像をテストすることはできませんが(私の友人が利用できないため)、この画像は読み込まれません。 Androidをブラウザとして使用して、Nexus 5で在庫Chrome(5.0.1)を実行しています。
http://41.media.tumblr.com/efebad51567e927b8f130f9bdc4efae3/tumblr_ndvnpjcBZa1qewacoo1_500.png
イメージを直接ロードしようとすると、504ゲートウェイタイムアウトエラーが発生します。
EDIT:これは、参照用に実際の画像を投稿する@JakeGouldです。
詳細なテストと詳細:私はボルチモアMDにいます。LTEデータを実行し、次の画像が機能しました: http://40.media.tumblr.com/a5e0a96d36170c997aabad7efc630d3e /tumblr_njnalkSD7M1s5cyzso1_500.jpg
さらにテストを行うと、PNGは問題ではないようです。私がヒットした他のほとんどの画像はpngとjpgの混合でしたが、すべて "41"以外のサーバー上にありました。
最後のメモ:私は家に帰り、私のwifi -Comcast-を私の電話-私がテストしているデバイス-と504のために見ることができなかったすべての写真を見ることができるようになりました。
EDIT:スーパーユーザーに新しく、投稿をトリミングおよび編集したので、より事実に基づいており、議論が少なくなりました。
UPDATE:問題はLTEに関係しているようです。 tumblrをロードし、ロードできない画像をいくつか見つけ、携帯電話を3gに強制ダウンし、ページを再ロードしました。すべての画像が表示されます。電話機をLTEに戻し、キャッシュをクリアし、以前はLTEでロードできなかった画像をロードするようになりました。
(私はもう一度テストしていますが、今は再現できません。したがって、おそらく上記の動作はひどいものでした。)