gpt4 book ai didi

python - uwsgi X-Sendfile 模拟 mimetype 丢失?

转载 作者:太空宇宙 更新时间:2023-11-03 16:38:47 24 4
gpt4 key购买 nike

我正在为我们的 python Web 应用程序配置 uwsgi+nginx。我想添加 X-Sendfile 模拟(请参阅 http://uwsgi-docs.readthedocs.io/en/latest/Snippets.html ):

[uwsgi]
collect-header = X-Sendfile X_SENDFILE
response-route-if-not = empty:${X_SENDFILE} static:${X_SENDFILE}

现在我访问我们的网站,使用sendfile()正确响应内容。唯一的缺陷是 Content-Type 丢失,即使我已经在 wsgi 的响应中明确设置了它。我尝试了很多方法,我发现的唯一解决方法是:

[uwsgi]

collect-header = X-Sendfile-Content-Type X_SENDFILE_CONTENT_TYPE
collect-header = X-Sendfile X_SENDFILE
response-route-if-not= empty:${X_SENDFILE_CONTENT_TYPE} addheader:Content-Type: ${X_SENDFILE_CONTENT_TYPE}
response-route-if-not = empty:${X_SENDFILE} static:${X_SENDFILE}

这可行,但有点愚蠢。我真的希望内容类型可以由文件的扩展名确定。可能吗?

最佳答案

深入研究uwsgi的源代码后,我找到了原因(参见 https://github.com/unbit/uwsgi/blob/2.0.12/core/uwsgi.c#L2677 )

    if (uwsgi.build_mime_dict) {
if (!uwsgi.mime_file)
#ifdef __APPLE__
uwsgi_string_new_list(&uwsgi.mime_file, "/etc/apache2/mime.types");
#else
uwsgi_string_new_list(&uwsgi.mime_file, "/etc/mime.types");
#endif
struct uwsgi_string_list *umd = uwsgi.mime_file;
while (umd) {
if (!access(umd->value, R_OK)) {
uwsgi_build_mime_dict(umd->value);
}
else {
uwsgi_log("!!! no %s file found !!!\n", umd->value);
}
umd = umd->next;
}
}

仅当设置了变量 build_mime_dict 时,uwsgi 才会构建 mime dict(将文件扩展名映射到内容类型)。由于我的配置不包含任何设置此变量的选项,因此 mime 字典将为空。

因此,向其中添加一些“静态”选项(如 mimefile)将构建 mime 字典。还将collect-header更改为pull-header以确保不显示真实的文件路径。

[uwsgi]
mimefile = /etc/mime.types
pull-header = X-Sendfile X_SENDFILE
response-route-if-not = empty:${X_SENDFILE} static:${X_SENDFILE}

关于python - uwsgi X-Sendfile 模拟 mimetype 丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36999995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com