PHP + curl + etags で 304 が帰ってこない

etagsを利用するサービスで 304 が帰ってこなかったので
調べてみた。

【原因1】
curlの header オプションが間違っていた。
headerを指定するには以下の「CURLOPT_HTTPHEADER」を指定するが、
「CURLOPT_HEADER」を指定していた。

CURLOPT_HTTPHEADER ... headerを設定する
CURLOPT_HEADER ... headerを出力するかどうか

当然ながら CURLOPT_HEADER に If-None-Match を指定しても意味はない。


【原因2】
If-None-Match で指定する etags の文字列が間違っていた。
以下のように配列で指定していた。

                  • -

array('If-None-Match: test_etags_1')

                  • -

実際は以下のように設定する。

                  • -

array('If-None-Match: "test_etags_1"')

                  • -

つまり、「"」でくくらないとダメ。


ということで、上記2点を修正したら正常に動作しました。