Sinatra 服务器不提供名称中带有'+'的文件



我的Sinatra服务器公用文件夹中的一些文件在其名称中有一个'+'。当我试图通过浏览器访问这些文件时,我得到一个404错误。没有额外的日志输出。

我再三检查文件是否存在,URL是否正确。我可以访问公共文件夹中的其他文件。如果我重命名这些文件,使它们的名称中不包含'+',我也可以访问它们。

不幸的是,我无法避免在我的文件名中使用"+"字符。

以前有过这种经历吗?

Sinatra源代码中的罪魁祸首似乎是这一行:

  path = File.expand_path("#{public_dir}#{unescape(request.path_info)}"

其行为归结为

URI.decode_www_form_component('a+b', 'utf-8')  # returns "a b"

在这行之前,请求中的任何+字符。Path_info被空格替换。

听起来你打算使用这个web服务器不仅仅是一个简单的项目。在这种情况下,我强烈建议你不要使用Sinatra作为文件服务器,而是将其隐藏在反向代理(如nginx)后面,它对发送文件进行了高度优化。

如果nginx找不到该文件,它会将请求转发给sinatra web服务器来处理。

最新更新