現在ウェブサイトで作業していますが、net::ERR_HTTP2_PROTOCOL_ERROR 200
Google Chromeでエラーが発生します。何がこのエラーを引き起こしているのか正確にはわかりませんが、HTTPSでWebサイトにアクセスしたときにのみポップアップ表示されることに気づきました。私はそれが関連していることを100%確信することはできませんが、それはjavascriptが適切に実行されるのを妨げているようです。
たとえば、次のシナリオが発生します。
HTTPSでWebサイトにアクセスしています
https://publish.twitter.comを介して統合された私のTwitterフィード がまったくロードされない
コンソールでERR_HTTP2_PROTOCOL_ERRORに気づく
Twitterフィードをロードするコードを削除すると、エラーが残る
HTTPでWebサイトにアクセスすると、Twitterフィードが表示され、エラーが消えます
Google Chromeは、エラーをトリガーする唯一のWebブラウザーです。これは、EdgeとFirefoxの両方でうまく機能します。(注:Safariを試しましたが、同様のkcferrordomaincfnetwork 303
エラーが発生します)
エラーにこの「200」の言及があり、404/500ページが何もトリガーしていないため、サーバーから返されたヘッダーに関連しているのではないかと思っていました。
ことは、エラーがまったく文書化されていないことです。Google検索で結果がほとんどない。さらに、私はそれがごく最近のGoogle Chromeリリースに現れていることに気づきました。エラーはv.64.Xでは発生しませんが、v.75以降では発生します(OSに関係なく、Macで作業しています)。
この時点で調査するための手がかりは喜んでいただければ幸いです。
前もって感謝します。
トリスタン
編集1:FirefoxではWebサイトに関連しているが、Safari(kCFErrorDomainCFNetworkエラー303)では関連していない可能性があるChrome(net :: ERR_SPDY_PROTOCOL_ERROR)
編集2:さらなる調査の結果は次のとおりです。
- サーバーが2XXではなく404を返す場合、エラーはまったく同じページに表示されません
- ローカルでHTTPS証明書を使用してもエラーが表示されない
- 別の証明書を使用する別のサーバー(どちらもOVHのサーバー)でエラーが発生する
- 5.6から7.3まで、使用されているPHPのバージョンに関係なくエラーが発生します(使用されるフレームワーク:Cakephp 2.10)
編集3:リクエストに応じて、以下は失敗したリソースに対して返されるヘッダーです。これはWebページ全体です。エラーがHTTPヘッダー200を持つ各ページでトリガーされている場合でも、それらのページは常にクライアントのブラウザーに読み込まれますが、要素が欠落している場合があります(私の例では、外部Twitterフィード)。[ドキュメント]自体を除いて、[ネットワーク]タブの他のすべてのアセットは成功を返します。
Google Chromeヘッダー(エラーあり):
Firefoxヘッダー(エラーなし):
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
私がこの他の投稿で読んだことについて、「HTTP / 2では、クライアントがリクエストを中止したい場合は、RST_STREAMを送信します。サーバーがRST_STREAMを受信すると、クライアントへのDATAフレームの送信を停止し、それによって応答を停止します(またはダウンロード)接続は他の要求に対して引き続き使用可能であり、中止された要求と同時の要求/応答は続行し続ける可能性があります。[...] RST_STREAMがクライアントからサーバーへ、リクエストのコンテンツ全体が転送中であり、クライアントに到着して破棄されます。ただし、応答コンテンツが大きい場合は、RST_STREAMを送信すると、全体の前にサーバーに到着する可能性が高くなります。応答コンテンツが送信されるため、帯域幅が節約されます。」
記述されている動作は、私が観察できる動作と同じです。しかし、それはブラウザが犯人であることを意味し、200ヘッダーと404ヘッダーを持つ2つの同一ページでなぜそれが発生するのか理解できません(JSを無効にしても同じです)。