ZShogi に If-Modified-Since
ZShogi-0.5.1, PyShogi-0.5.5
ZShogi-0.5.1 で HTTP ヘッダ If-Modified-Since を受け取った場合の対応をしてみました。 今まで局面を動的に返すことしか考慮してなかったのですが、 クライアントから棋譜全体を静的に get することもあるので。 以下のようなコードを追加。
# ZShogi.py
...
from App.Common import rfc1123_date
...
def index_html(self, REQUEST=None):
if REQUEST is not None:
last = REQUEST.get('HTTP_IF_MODIFIED_SINCE', '')
mtime = rfc1123_date(self.bobobase_modification_time())
# 棋譜が更新されてない場合は HTTP ステータス 304 を返す
if mtime == last:
REQUEST.RESPONSE.setStatus(304) # Not Modified
return ''
# 棋譜データを返す
_set_header = REQUEST.RESPONSE.setHeader
_set_header('last-modified', mtime)
_set_header('X-Zope-Product', 'ZShogi-%s' % __version__)
_set_header('Content-Type', 'application/xml')
...