我正在尝试运行一个本地服务器(现在)主要服务于Windows 7计算机上的静态内容。问题是许多内容是使用符号链接组织的,当我尝试使用CherryPy提供这些文件时,它们总是返回:
请求的资源返回的字节数多于声明的Content-Length。
大概这是因为CherryPy会检查磁盘上符号链接的大小,将其用于Content-Length,然后当它尝试访问该文件时,Windows会为其提供文件的完整大小,因此两者不要不配。我猜这个问题已经解决了,并且有一个我不知道的配置选项,但我似乎无法找到所有CherryPy配置选项的完整列表。任何人都有一个很好的解决方案吗?
答案 0 :(得分:2)
据我所知,这个问题与CherryPy无关。如果你看过cherrypy.lib.static.serve_file
,你会看到以下内容。
try:
st = os.stat(path)
except OSError:
if debug:
cherrypy.log('os.stat(%r) failed' % path, 'TOOLS.STATIC')
raise cherrypy.NotFound()
# ...
# Set Content-Length and use an iterable (file object)
# this way CP won't load the whole file in memory
content_length = st.st_size
fileobj = open(path, 'rb')
return _serve_fileobj(fileobj, content_type, content_length, debug=debug)
Python文档说明了os.stat
:
在给定路径上执行等效的stat()系统调用。 (此函数遵循符号链接;使用lstat()统计符号链接。)
Wikipedia points to restrictions创建符号链接,因为只有提升的管理员才能创建它们。所以它看起来不像是一个常见的功能。这些链接的类型也很少,启用它们的方式也可能不同。
无论如何,我很容易检查os.stat
是否真的遵循您平台上的符号链接:
import os
print os.stat('/path/to/filename').st_size
如果您认为结果不正确,我建议您向Python bug tracker提交报告。