head 450
或
render status: 450
响应时正在寻找一种方法来设置自定义reason Phrase Rails将回应HTTP/1.1 450 Custom
,但我正在实施一个协议,其中HTTP/1.1 450 Out of Sync
需要返回。似乎没有办法通过render
或head
调用真的做到这一点。至少不要根据文档和简略介绍rails代码。
也许这里有人知道一个聪明的把戏如何做到这一点?
head 450
或
render status: 450
响应时正在寻找一种方法来设置自定义reason Phrase Rails将回应HTTP/1.1 450 Custom
,但我正在实施一个协议,其中HTTP/1.1 450 Out of Sync
需要返回。似乎没有办法通过render
或head
调用真的做到这一点。至少不要根据文档和简略介绍rails代码。
也许这里有人知道一个聪明的把戏如何做到这一点?
我假设你只想添加新的状态码+这些自定义代码的原因,而不是试图将200 OK
变成200 LOL
。
其部分回答别人也许能在扩大,您可以创建以下的初始化:
require 'rack/utils'
custom_codes = {
"Out Of Sync" => 450
}
custom_codes.each do |reason, code|
# allow `status: :out_of_sync`
Rack::Utils::SYMBOL_TO_STATUS_CODE[reason.tr(' ', '').underscore.to_sym] = code
# tell it what reason to use for this status code
Rack::Utils::HTTP_STATUS_CODES[code] = reason
end
,现在当你这样做:
head 450
head :out_of_sync
render status: 450
render status: :out_of_sync
Rails的日志将显示:
Completed 450 Out Of Sync in 17ms
但是,当我使用curl
或开发人员时在Safari中,他们仍然显示450 CUSTOM
。我不确定Rack在Rails实施之后是否正在修改此内容,或者工具忽略了文本并仅显示默认消息或正在进行的操作。不幸的是,我现在没有时间进一步挖掘。
不要。如果您的协议依赖于上的原因,它会被设计破坏。
见https://www.greenbytes.de/tech/webdav/rfc7230.html#rfc.section.3.1.2.p.3:
原因短语的元素存在,对于被更频繁地使用较早的互联网应用协议提供与数字状态代码关联,大多是出于尊重的文本描述的唯一目的交互式文本客户。客户端应该忽略原因短语内容
它在HTTP/2中也被删除。
这不是我的*协议,我正在使用一项依赖于此的服务。我知道客户应该忽略这个短语,但它并不是,我没有权力改变它的任何事情。我可以处理它或不使用他们的协议,这不是一个选项。但是,谢谢 – paukul