aio-libs / aio-libs/aiohttp

Override Last-Modified header in web.FileResponse

オープン
#5,545 コメント 0 件 リアクション 3 件 担当者 0 名 GitHub で見る
enhancement
主要言語
Python
スター
16.5k
フォーク
2.4k
平均マージ
17時間 22分
マージ済み PR(30日)
212

説明

🐣 **Is your feature request related to a problem? Please describe.**
`web.FileResponse` currently does not allow overriding "Last-Modified" header via `last_modified` attribute (while parent `web.StreamResponse` allows it).
`FileResponse` instead always sets actual file mtime even if last_modified attribute has been set before.

💡 **Describe the solution you'd like**
Change line: https://github.com/aio-libs/aiohttp/blob/master/aiohttp/web_fileresponse.py#L148 to:
```
if self.last_modified is None:
self.last_modified = st.st_mtime
```
So that `self.last_modified` does not get reset by `prepare()` method if it has been set explicitly.

❓ **Describe alternatives you've considered**
Also considered setting header directly via `headers={"Last-Modified": ...}` but it doesn't work (obviously it is not the correct way).

📋 **Additional context**
--
In order to also mimic "Last-Modified" removal (like in web.StreamResponse) extra steps are required:
* Insert empty last_modified header in init: `self._headers[hdrs.LAST_MODIFIED] = None`
* Extend check to see if it has been explicitly removed (same line 148):
```
if self.last_modified is None and hdrs.LAST_MODIFIED in self._headers:
self.last_modified = st.st_mtime
```

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。