aio-libs / aio-libs/aiohttp

Override Last-Modified header in web.FileResponse

未关闭
#5,545 0 条评论 3 个 reaction 已指派 0 人 在 GitHub 查看
enhancement
主要语言
Python
星标
16.5k
派生
2.4k
平均合并
17 小时 22 分钟
30 天内合并 PR
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 摘要。