New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix a bug about If-Modified-Since header #7

Merged
merged 1 commit into from Nov 12, 2011

Conversation

Projects
None yet
2 participants
@KitaitiMakoto
Copy link
Contributor

KitaitiMakoto commented Oct 19, 2011

初めまして。

暫く前に公式サイトのITSも書いたのですが、
テストを書いたので改めてご連絡します。

RSSプラグインのIf-Modified-Sinceヘッダーの扱いがおかしくて
Hikiの最終更新時刻とIf-Modified-Sinceが等しい時にも
200としてレスポンスボディを返してしまっていました。

パッチ(と言っても一文字ですが)をご検討ください。

プラグインのテストについて約束が無いようだったので
その場凌ぎ的に書いてしまいましたが、
方針が決まっているようでしたら書き直します。

@okkez

This comment has been minimized.

Copy link
Member

okkez commented Oct 26, 2011

http://hikiwiki.org/its/ は見てなかったので気付きませんでした。
すみません。。。

たぶん、今後もあんまり見ないので github の方にコメントしていただけると
助かります。。

http://www.ietf.org/rfc/rfc2616.txt

14.25 If-Modified-Since

The If-Modified-Since request-header field is used with a method to
make it conditional: if the requested variant has not been modified
since the time specified in this field, an entity will not be
returned from the server; instead, a 304 (not modified) response will
be returned without any message-body.

と書いてあるので現状が正しいと思います。If-Modified-Since は指定された
時刻以降(指定された時刻も含みます)にコンテンツが更新されていれば 200 を
返すものです。

@KitaitiMakoto

This comment has been minimized.

Copy link
Contributor

KitaitiMakoto commented Nov 1, 2011

たぶん、今後もあんまり見ないので github の方にコメントしていただけると
助かります。。

分かりました。
また何かあったらこちらに書き込みます。

と書いてあるので現状が正しいと思います。If-Modified-Since は指定された
時刻以降(指定された時刻も含みます)にコンテンツが更新されていれば 200 を
返すものです。

恥ずかしながら英語力が足りず、okkezさんのコメントを見てこのissueを閉じようと思ったのですが、
念のため確認したところ次のような結果になってしまいました。

$ irb -r open-uri
> uri = 'http://www.ietf.org/rfc/rfc2616.txt'
> res = open(uri)
> res.last_modified # => 1999-06-12 03:46:53 +0900
> open(uri, 'If-Modified-Since' => res.last_modified.httpdate)
OpenURI::HTTPError: 304 Not Modified
    from /usr/local/lib/ruby/1.9.1/open-uri.rb:346:in `open_http'
    from /usr/local/lib/ruby/1.9.1/open-uri.rb:769:in `buffer_open'
    from /usr/local/lib/ruby/1.9.1/open-uri.rb:203:in `block in open_loop'
    from /usr/local/lib/ruby/1.9.1/open-uri.rb:201:in `catch'
    from /usr/local/lib/ruby/1.9.1/open-uri.rb:201:in `open_loop'
    from /usr/local/lib/ruby/1.9.1/open-uri.rb:146:in `open_uri'
    from /usr/local/lib/ruby/1.9.1/open-uri.rb:671:in `open'
    from /usr/local/lib/ruby/1.9.1/open-uri.rb:33:in `open'
    from (irb):4
    from /usr/local/bin/irb:12:in `<main>'

どういう例が適切か分かりませんが、uriをApacheのサイト(http://httpd.apache.org/)や
nginxのサイト(http://nginx.org/)にしても、二度目のリクエストには304が返ってきました。
少なくともサーバーの実装は、「Last-ModifiedとIf-Modified-Sinceが同じ時には304を返す」となっているようです。
先にも書きましたが英語力が無くて、仕様からはどちらが正しいのか確信が持てないのですが、
この結果はどう捉えるべきでしょうか?

@okkez

This comment has been minimized.

Copy link
Member

okkez commented Nov 2, 2011

ごめんなさい。私が間違ってました。。。
もう一回RFCをよく読んだら、最初に引用してた部分の直後にわかりやすく書いてました。

 b) If the variant has been modified since the If-Modified-Since
    date, the response is exactly the same as for a normal GET.

If-Modified-Since に指定された時刻以降に変更されていたら、レスポンスは普通の GET と同じです。

 c) If the variant has not been modified since a valid If-
    Modified-Since date, the server SHOULD return a 304 (Not
    Modified) response.

If-Modified-Since で指定された時刻以降に変更されていなければ、304 を返すべき(SHOULD) です。

って書いてあるので、北市さんが正しいです。
コードは近いうちに修正します。

@KitaitiMakoto

This comment has been minimized.

Copy link
Contributor

KitaitiMakoto commented Nov 3, 2011

お手間を取らせてしまいました。
ありがとうございます。

コードは近いうちに修正します。

よろしくおねがいします!

okkez added a commit that referenced this pull request Nov 12, 2011

Merge pull request #7 from KitaitiMakoto/plugin-rss
Fix a bug about If-Modified-Since header.

@okkez okkez merged commit 326a028 into hiki:master Nov 12, 2011

@KitaitiMakoto

This comment has been minimized.

Copy link
Contributor

KitaitiMakoto commented Nov 12, 2011

マージ、ありがとうございました。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment