web-dev-qa-db-ja.com

net :: ERR_HTTP2_PROTOCOL_ERRORとは何ですか?

現在ウェブサイトで作業していますが、Google Chromeでnet::ERR_HTTP2_PROTOCOL_ERROR 200エラーが発生します。何がこのエラーを引き起こしているのか正確にはわかりませんが、HTTPSでWebサイトにアクセスしたときにのみポップアップ表示されることに気づきました。私はそれが関連していることを100%確信することはできませんが、それはjavascriptが適切に実行されるのを妨げているようです。

たとえば、次のシナリオが発生します。

  1. HTTPSでWebサイトにアクセスしています

  2. https://publish.Twitter.com を介して統合された私のTwitterフィードがまったくロードされない

  3. コンソールでERR_HTTP2_PROTOCOL_ERRORに気づく

  4. Twitterフィードをロードするコードを削除すると、エラーが残る

  5. HTTPでWebサイトにアクセスすると、Twitterフィードが表示され、エラーが消えます

Google Chromeはエラーをトリガーする唯一のWebブラウザーです:EdgeとFirefoxの両方で正常に動作します(注:Safariで試しましたが、同様のkcferrordomaincfnetwork 303エラーが発生します)

エラーにこの「200」の言及があり、404/500ページが何もトリガーしていないため、サーバーから返されたヘッダーに関連しているのではないかと思っていました。

ことは、エラーがまったく文書化されていないことです。 Google検索で結果がほとんどない。さらに、私はそれがごく最近のGoogle Chrome=リリースで表示されていることに気づきました。エラーはv.64.Xでは表示されませんが、v.75 +では表示されます(OSに関係なく、 Mac thoで作業しています)。

この時点で調査するための手がかりは喜んでいただければ幸いです。

前もって感謝します。

トリスタン


Edit 1:関連があるかもしれません FirefoxではWebサイトOKですが、Safariではできません(kCFErrorDomainCFNetworkエラー303)どちらもChrome(net: :ERR_SPDY_PROTOCOL_ERROR)


編集2:さらなる調査の結果は次のとおりです。

  • サーバーが2XXではなく404を返す場合、エラーはまったく同じページに表示されません
  • ローカルでHTTPS証明書を使用してもエラーが表示されない
  • 別の証明書を使用する別のサーバー(どちらもOVHのサーバー)でエラーが発生
  • PHPバージョンが使用されている場合でも、5.6から7.3までのエラーがポップされます(使用されるフレームワーク:Cakephp 2.10)

Edit 3:リクエストに応じて、以下は、Webページ全体である、失敗したリソースの返されたヘッダーです。エラーがHTTPヘッダー200を持つ各ページでトリガーされている場合でも、それらのページは常にクライアントのブラウザーに読み込まれますが、要素が欠落している場合があります(私の例では、外部Twitterフィード)。 [ドキュメント]自体を除いて、[ネットワーク]タブの他のすべてのアセットは成功を返します。 line that failed in console

Google Chrome header(with error)):

Chrome header

Firefoxヘッダー(エラーなし):

Firefox header

コンソールでのcurl --head --http2リクエストは、次の成功を返します:

HTTP/2 200 
date: Fri, 04 Oct 2019 08:04:51 GMT
content-type: text/html; charset=UTF-8
content-length: 127089
set-cookie: SERVERID31396=2341116; path=/; max-age=900
server: Apache
x-powered-by: PHP/7.2
set-cookie: xxxxx=0919c5563fc87d601ab99e2f85d4217d; expires=Fri, 04-Oct-2019 12:04:51 GMT; Max-Age=14400; path=/; secure; HttpOnly
vary: Accept-Encoding

編集4:chrome:// net-export /と https://netlog-viewer.appspot.com ツールを使ってさらに深くしようとすると、リクエストがRST_STREAMで終了していることを教えてください:

t=123354 [st=5170]    HTTP2_SESSION_RECV_RST_STREAM
                      --> error_code = "2 (INTERNAL_ERROR)"
                      --> stream_id = 1

私が読んだものについて this other post 、 "HTTP/2では、クライアントがリクエストを中止したい場合は、RST_STREAMを送信します。サーバーがRST_STREAMを受信すると、クライアントへのDATAフレームの送信を停止し、応答(またはダウンロード)を停止します。接続は他の要求に対して引き続き使用可能であり、中止された要求と同時の要求/応答は続行し続ける場合があります。[ ..] RST_STREAMがクライアントからサーバーに移動するときまでに、リクエストのコンテンツ全体が転送中にクライアントに到着し、クライアントがそれを破棄する可能性があります。ただし、応答コンテンツが大きい場合は、 RST_STREAMは、応答コンテンツ全体が送信される前にサーバーに到着する可能性が高いため、帯域幅を節約できます。 "

記述されている動作は、私が観察できる動作と同じです。しかし、それはブラウザが犯人であることを意味し、それから、1つが200ヘッダー、もう1つが404の2つの同一のページで発生する理由を理解できません(JSを無効にしても同じです)。

31
Tristan G

このエラーは現在修正中です https://chromium-review.googlesource.com/c/chromium/src/+/2001234

しかし、それは私を助け、nginx設定を変更しました:

  • gzipをオンにします。
  • add_header 'Cache-Control' 'no-store、no-cache、must-revalidate、proxy-revalidate、max-age = 0';
  • 期限切れ。

私の場合、NginxはNode.jsアプリケーションのリバースプロキシとして機能します。

0
EduardS

PHPサーバーにAJAXを介してDELETEリクエストを送信しようとしたため、先週この問題が発生しています。最近、SSL証明書を取得しているホスティングプランをアップグレードしましたPHPおよびJSファイルを保存するホスト上。SSL証明書を追加したため、この問題は発生しなくなりました。これがこの奇妙なエラーに役立つことを願っています。

0
Matthew Fallon

私のチームは、これを、提供していた単一のJavaScriptファイルで確認しました。他のすべてのファイルは正常に機能しました。 http2 戻る http1.1、次にいずれかのnet::ERR_INCOMPLETE_CHUNKED_ENCODINGまたはERR_CONTENT_LENGTH_MISMATCH。私たちは最終的に、「情報漏洩」を誤って検出している企業フィルター(Trustwave)があることを発見しました(社会保障番号に似たファイル/ファイル名で何かを検出したと思われます)。企業にこのフィルタを微調整させることで問題が解決しました。

0
adamdport

1MBを超えるファイルを投稿すると、同じ問題(asp、c#-HttpPostedFileBase)が発生しました(アプリケーションにファイルサイズの制限はありません)。モデルクラスの簡略化が役立ちました。この問題が発生した場合は、モデルの一部を削除してみて、それが何らかの形で役立つかどうかを確認してください。奇妙に聞こえますが、私にとってはうまくいきました。

0
L.V

私たちの場合、理由は無効なヘッダーでした。編集4で述べたように:

  • ログを取る
  • ビューアでEventsを選択します
  • を選択しましたHTTP2_SESSION

同様のものを探します:

HTTP2_SESSION_RECV_INVALID_HEADER

->エラー= "ヘッダー名に無効な文字があります。"

-> header_name = "charset = utf-8"

0

私もこのエラーに直面しましたが、その背後には複数の理由が考えられます。私の場合、ARRはタイムアウトになりました。

私の場合、リダイレクトルールを設定したリバースプロキシサイトにブラウザがリクエストを出し、そのプロキシサイトが最終的に実際のサイトをリクエストしています。巨大なデータの場合、2分5秒以上かかり、サーバーのApplication Request Routingタイムアウトは2分に設定されました。以下の手順でARRタイムアウトを増やすことでこれを修正しました。1. IIS 2.に移動します。2.サーバー名をクリックします3.中央のペインで[Application Request Routing Cache]をクリックします4.サーバープロキシ設定をクリックします右ペインで5.タイムアウトを増やします6. [適用]をクリックします

0
Ankit

私はこのエラーに何度か直面しましたが、それはサーバーからクライアントに大きなリソース(3MBを超える)を転送したことが原因でした。

0