「Provisional headers are shown」「324:ERR_EMPTY_RESPONSE」が出てきた
ある日、Webページが開かなくなった(ERR_EMPTY_RESPONSE)。Chromeは「Provisional headers are shown」と言っている。
作成日:2018-07-18, 更新日:2018-07-18
経緯
・PHPのcUrlで別サーバからデータを取得していた
・ある日、Webページが開かなくなった。
・ChromeのデベロッパーツールのNetworkを見ると「Provisional headers are shown」と言われていた。
・思い当たるふしが無いので、サーバ側で何か変更したのか確認→「fluentd」をインストするために何かをアップデートしたとか。
・調べるとcurl_exec()で落ちている→404やタイムアウトのときでも何かしら結果を返してくれるけど・・・なぜか落ちる。
Provisional headers are shown
こいつは・・・何? コイツが出てくる可能性
A.ajaxで別ドメインを指定(関連:クロスドメイン、jsonp)
B.キャッシュを使っていて通信を行っていない
・・・あたりが原因らしい。
今回は、クロスドメインではあるけどajaxを使っていないので「A」は関係なし。
※仮に「A」の場合の対策は、「先方(ajaxが指定しているURL)で受け入れ体制を取ってもらう」 or 「ajaxでjsonpを使う」感じ。
ひとまず、保留。先にプログラムがドコで落ちているか調査
curl_exec()で落ちている
画面が白くなるなら分かるけど・・・下記のようなエラー画面が出てくる。
どこで処理が落ちているのかを調べていくと「curl_exec()」で落ちていた。
※tyr-catch()で囲ってやってもcatchされずに落ちる。
404やタイムアウトでも何かしらの結果があるのに、なぜか落ちる。
→原因は、調べても分からない。
ブラウザに表示される画面にある「ERR_EMPTY_RESPONSE」を調べると「324」らしい。
「http error 324」とかで調べると2011年あたりのChromeの問題というのが多いが・・・今は2018年。多分、Chromeは関係ないと思う
後出し情報
なにげにlibcurlとcurlもアップデートしてたらしい。詳細は不明。
B.キャッシュを使っていて通信を行っていない
「324:ERR_EMPTY_RESPONSE」はひとまず置いて、先にキャッシュのほうをチェック。
この「キャッシュを使っていて通信を行っていない」ってヤツがさらに二つある。
B-1.ブラウザ側で対応
B-2.サーバ側で対応
B-1.ブラウザ側で対応
「ブラウザのキャッシュをクリア」すれば良いとか。
Chromeの場合
・デベロッパーツール→「Network」
・「Disable cache」にチェックを入れる
私の場合はチェックをいれても変化はなかった
B-2.サーバ側で対応
サーバ側でキャッシュを使うようにしていると思われるけど・・・よく分からない。
とりあえず「インターネットsecuirtyがあれば削除または無効」にする必要があるとか。
ひとまず詳しく調査しなおなす。
サーバ側
現状、分かっているのは・・・
・ajaxは使っていないので、関係ない
・他のブラウザでも同じだからブラウザ(Chrome)固有の問題ではない
・プログラムの修正は行っていないのにある日を境にエラーになった
・サーバ側の変更は管轄外なので知らない(何かをアップデートしたらしい・・・)
ひとまずapacheのエラーログの確認
▼何回も出てきているヤツがいた
/usr/sbin/httpd: symbol lookup error: /usr/lib64/libnsssysinit.so: undefined symbol: PR_GetEnvSecure
▼解決方法
httpdを「restart」じゃなく「stop」させてから「start」させる
※コイツらが原因で「Provisional headers are shown」「324:ERR_EMPTY_RESPONSE」が出てきた・・・と思われる。
http status 324: ERR_EMPTY_RESPONSE
「ERR_EMPTY_RESPONSE」が「レスポンスが空っていうエラー」っていうのは直訳すれば分かるけど、もうちょっと詳細が知りたい。
・・・ということで、「http status 324: ERR_EMPTY_RESPONSE」について少し調べてみた。
現状
下記のような状況になっている
A.cUrlを実行しようとしている「サーバ:A」がある。
B.cUrlで「サーバ:B」にアクセス:成功
C.cUrlで「サーバ:C」にアクセス:失敗(324: ERR_EMPTY_RESPONSE)
考えられる要因
・「サーバ:C」が信用のおけないセキュリティを使用している
・「サーバ:A」として「サーバ:C」へのアクセス禁止を行う
ココでは「サーバ:A」としているが、「ブラウザ」という場合もある。
→Chromeはこの手のエラーになるコトが多いとか。「セキュリティがしっかりしている」という意味ではありがたい。
対策
対策は2つ、問題が一つある。
▼対策
・「サーバ:A」で規制を緩める
・「サーバ:C」で信用のおけるセキュリティにしてもらう
「サーバ:A」で規制を緩めるってのは基本、無し。
※「ブラウザ」の場合は「全利用者に対応」してもらう必要があるので、コレも無し。
「サーバ:C」で信用のおけるセキュリティにしてもらうってのは・・・「サーバ:C」側の管理者に丸投げするので、ココから先は未調査。
▼問題
・「サーバ:A」で別のエラーがでている
※エラーログを確認したり、何かをアップデートしたけど「restart」していない、「end→start」じゃなく「restart」した・・・とか思い当たるトコを必要に応じて調査・対応。
めも・まとめ
今回、エラーの要因が複数考えられ、絞り込めなかったので・・・キーワードだけ抜け出しておく
※次回の調査時の足掛かりにするキーワードたち
・Chrome
・Provisional headers are shown
・324:ERR_EMPTY_RESPONSE
・ajax、jsonp、クロスドメイン
・セキュア(secuirty)
・apacheのエラーログ
・キャッシュ(ブラウザ側、サーバ側)
・cUrl