楽天市場のページへのアクセス制限変更点(2020.02.26)【未解決】


起こったこと

2020.02.25の夜あたりから、
楽天市場の商品ページへのプログラムからのアクセスができなくなった。

curlコマンドやphpのfile_get_contentが、503エラーを返す様になった。

調査内容

curlコマンドを用いて、色々と環境を変えたりオプションを変えたりして、
状況を確認。

ユーザーエージェントによる制限?(違った)

スマホのUAだと問題なかったが、スマホサイトだけは特別だったよう。
PCサイトに接続するUAだといくつか試したがどれも変わらず。

IP制限がかけられた?(違った)

IPが同一の社内環境でも、アクセスできないPCとアクセスできるPCがあった。

接続の回数制限?(違った)

一回目のアクセスで繋がらないサーバもあれば、
何回接続しても繋がるサーバもあったので。

アクセスプロトコルが、HTTP/1.1が☓でHTTP/2は◯? (正解!!)

curlコマンドに -vvv をつけて詳細ログを見てみると、

問題ない環境だと、

Using HTTP2, server supports multi-use
Connection state changed (HTTP/2 confirmed)

という記述があり、問題のある環境だと、

GET /up-t01/it001/ HTTP/1.1
:
HTTP/1.1 503 Service Unavailable

という記述が。。。

こ、これだっ!!!!

hTML/2の通信にしても503エラーになる環境アリ。

対応

HTTP/2のプロトコルが使えるコマンドに変更する。

curlだと、7.43以上。
ただし、nghttpの2 1.0.0以上も必要。

nghttp2ライブラリをインストールするには、
libnghttp2-devが必要なのだが、OSが古いとそもそもこれを入れられない場合があるので注意。
(ubuntu14の私の環境とか。。)

PHPもたぶん5.5.24以上が必要。

curlはインストールしただけだとはdisableなので注意。
./configure 後に

HTTP2:            disabled (--with-nghttp2)

となっていたら未だdisableなので要確認。

詳しくは参考サイトを参照ください。

根本原因未だ不明・・

鋭意調査中。。。

後記

そもそもなぜ503エラーになるのか。。。
普通は、まずHTTP/1.1で接続を試みて、対応してる場合はHTTP/2に切り替えるという流れで、
繋がらなくなることは無いみたいなのに。。。
(詳しくはこちら

参考