在Sinatra中,我如何覆盖响应中的Content-Length
标题以设置我自己的值?
my方法的最后一行返回以下内容:
[200, {'Content-Type' => component.content_type,
'Content-Length' => component.content_length.to_s}, component.content.data]
这样我希望覆盖内容值,但会导致异常:
Unexpected error while processing request: Content-Length header was 2, but should be 0
我想为内容长度返回不同的值。有没有办法做到这一点?
答案 0 :(得分:0)
Rack::Lint
middleware引发了此错误,因此快速解决方法是不使用该中间件。根据您启动应用程序的方式可能会很棘手 - 如果您使用rackup
,Rack会在某些情况下添加它。
更好的解决方案是将您的客户更改为使用HTTP HEAD
request而不是GET
。在Sinatra defining a GET
route automatically defines a matching HEAD
route。使用HEAD
将导致服务器发送标题但不发送正文,您应该能够将Content-Length
设置为您想要的任何内容。它还可以避免Rack::Lint
错误。
以下是解释如何禁用Rack::Lint
:
module Rack
class Lint
def call(env = nil)
@app.call(env)
end
end
end