世界中の「Firefox」が止まった原因が判明。 なるほど、分からん。 [112890185]
■ このスレッドは過去ログ倉庫に格納されています
世界中の「Firefox」が一時的に使用不能になった問題について、Mozillaが詳細を明かす
「Firefox」のHTTP/3接続は、すべてネットワーキングスタック「Necko」を経由する。
しかし、ネットワークへアクセスする必要のあるRustコンポーネントは、「Necko」を直接使うのではなく、
「viaduct」と呼ばれる中間ライブラリを挟んで「Necko」を呼び出す仕組みになっている。
HTTP/3接続はリクエストサイズを決定するため、「Content-Length」ヘッダーを必要とする。
「Necko」はこのヘッダーが存在するかどうかをチェックし、存在しない場合は自動で追加する。
ところが、「Necko」のチェックでは大文字と小文字が区別されない。一方で、HTTP/3接続においては大文字と小文字が区別される。
「Necko」は「Content-Length」ヘッダーを追加する際、大文字と小文字を正しく挿入するため、この違いは通常、問題とならない。
しかし、「viaduct」を通過するリクエストは「Content-Length」ヘッダーを小文字に変換してしまう。
そのため、「Necko」のチェックをすり抜けてしまうが、実際のHTTP/3接続では「Content-Length」ヘッダーを見つけられず、
送信するコンテンツがないとして予期せず終了する。
このおかげで、コードはエラーを返すどころか、無限ループに陥る。すべてのネットワークリクエストは1つのソケットスレッドを経由するため、
このループはそれ以上のネットワーク通信をブロックしてしまい、その結果「Firefox」はWebコンテンツを読み込めずに無反応となってしまった。
Rustベースの「Firefox」コンポーネントのうち、ネットワークスタックを利用しており、
かつ「Content-Length」ヘッダーを追加するのはテレメトリコンポーネントだけだ。
そのため、テレメトリを無効化している「Firefox」ではHTTP/3接続のエラーは幸運にも発生しなかった。
しかしこれはたまたまで、根本的な原因は「Necko」と「viaduct」の関係にあったといえる。
https://forest.watch.impress.co.jp/docs/news/1385904.html あーなるほどな
大方のケンモメンの予想通りだったな 全ての接続が通るという「Necko」って全ての根本ってことで日本語の根っこからとってる感じしない?
ホルホルホルホル
テレメトリを有効にしてた献身的なユーザーがバカみたいじゃん こういうとき大文字小文字どっちも許容するのかそれとも頭大文字の場合のみを許容するべきなのか
どっちなのか教えてケンモメン こんな不具合あったのか?うちのfirefox56ちゃん(エロ動画専用)は何もなかったな
Mozillaからの説明だとGoogleがGCPのロードバランサで予告なく勝手にHTTP3をデフォルトにしたせいと書いてあったはw ブラウザ開いて寝落ちして朝起きるとブラウザクラッシュしてる Content-Lengthが見っかんない時のデフォルト値0で
無限ループになるのがいけない・・・・でいいのかっ
デフォルト値1ぐらいにしとけば、無限ループにならずに済んだって事かっ こういうのわ道具なので
必要が無ければアップデートせんでええねんww firefoxは強震モニターの拡張機能が使えない
やはりちょっと違うんだろうな すげえへぼいな
世界的なプロジェクトでもこの程度なの? HTTP/3が何なのか知らんが、マルチパートのboundaryとか言う奴は抹消してくれた?
何で普通にContent-Lengthじゃなくあんな仕様なんだ? リクエストヘッダーの大文字小文字の挙動が変更されて動かなくなるのは
たまにしかスクリプト書かん俺でも何回か遭遇したことあるわ それがないと開発やビジネスの都合上話にならないのはわかるしネットに繋げてる以上気にしたところで完全に無意味というのもそうなんだが
何起動させてもテレメトリテレメトリばっかでキモいとまでは行かずとも興醒めみたいな気分になっている 記事にあるHTTP3はlowlevelな実装のことで
無限ループになるのはnecko(content-lengthを送ったつもり)が終了しても
HTTP3ではそれを待ち続けてるみたいな話
翻訳元のブログには全部書いてあるんだけど
毎度のことながらよく分からない部分は訳さないというジャップクオリティー >>40
Ungoogled-chromium最高 いや、わかりやすいだろこれは…
>このおかげで、コードはエラーを返すどころか、無限ループに陥る。
ここの説明は無いけど 今このブラウザ使うやつおるんか
Chromeやedgeと比べてもなんの利点があるの httpのプロトコルに詳しい奴じゃないとわけわかめだな >>4
>>34
アホ丸出しで草 病気だよおまえら 結局そのviaductって言うラッパー作った時の大文字小文字仕様が不完全だったってことやろ? >>41
窓の杜は日本中のGEEKが見てるハイクオリティ・メディアだぞ >>47
仕事ではVivaldi使ってるけどChromiumだとAdBlock微妙かなと思い
家でネットサーフィンしたり、YouTubeとかエロ見る用がFirefoxになってる。 アドブロックとか使ってたやつは、問題に気が付かなかったってことか
なーるほどー ファイル名も大文字小文字は区別しない方がいいよな
readme.txtとREADME.txtが同じディレクトリに存在する必要がない
余計なトラブルになるだけ >>.61
広告ブロックとかの問題じゃなく、FF自体が駄目てのもあるの? 大文字小文字を仕様どおりに実装したら仕様に沿ってないヘッダーの処理でコケたんじゃなかったか? 最近Chromeも検索出来なくなったりするやが
俺だけなん? >>73
Firefoxだけど最近Google検索でたまに詰まるわ >>9
インターネッツルールの整備されてない部分だね
検索では区別されてないし >米国時間1月13日、世界中の「Firefox」が一時的に使用不能になった。
え?こんなことあったっけ? HTTP/3サーバ「『Content-Length』を正しく指定したらデータ送るよ」
Necko「はいどうぞっ『Content-Length』」
viaduct「小文字に直しときますね『content-length』っと」
HTTP/3サーバ「ん?なんだこのリクエストは?無視無視っと」
Necko「あああああああ!!!」(無限ループ)
ぬこは悪くないだろ >>68
パンダみたりストアにないアドオンとかスクリプト入れやすいじゃない >ところが、「Necko」のチェックでは大文字と小文字が区別されない。一方で、HTTP/3接続においては大文字と小文字が区別される。
何でこんな滅茶苦茶な翻訳してるの
正しくは
・httpヘッダは大文字小文字を区別してはいけない
・Necko APIはPOSTリクエストに対してデフォルトで”Content-Lenghth"ヘッダを追加するが、APIがrustから呼ばれる際は(rust用にc++のNeckoをラップしている)viaductによって全て小文字の"content-lenghth"に変換される
・Neckoから呼び出されるHTTP3の処理を行うコードが大文字小文字を区別しないという仕様に準拠しておらず”Content-Lenghth"以外の表記を正しく認識できない状態にあった
というのが正しい理解
この樽井という記者は低クオリティの記事を書くことで有名 ■ このスレッドは過去ログ倉庫に格納されています