Ruby 使用Sinatra更改HTTP状态消息

Ruby 使用Sinatra更改HTTP状态消息,ruby,http,sinatra,rack,http-status,Ruby,Http,Sinatra,Rack,Http Status,我正在编写一个简单的Sinatra应用程序,如果一个用户发布了一个带有特定数据的请求,我想返回一个带有消息CLIENT_error的错误“453”(自定义错误代码),或者类似的东西 问题是:查看Sinatra文档并进行一些测试,我找不到设置响应错误消息的方法,只有响应状态 因此,如果a设置Sinatra响应 get '/' do response.status = 453 end 我得到了正确的错误代码: curl -v localhost:4567 * About to connec

我正在编写一个简单的Sinatra应用程序,如果一个用户发布了一个带有特定数据的请求,我想返回一个带有消息CLIENT_error的错误“453”(自定义错误代码),或者类似的东西

问题是:查看Sinatra文档并进行一些测试,我找不到设置响应错误消息的方法,只有响应状态

因此,如果a设置Sinatra响应

get '/' do
   response.status = 453
end
我得到了正确的错误代码:

curl -v localhost:4567

* About to connect() to localhost port 4567 (#0)
*   Trying 127.0.0.1... connected
> GET / HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4     libidn/1.23 librtmp/2.3
> Host: localhost:4567
> Accept: */*
> 
< HTTP/1.1 453 
< X-Frame-Options: sameorigin
< X-XSS-Protection: 1; mode=block
< Content-Type: text/html;charset=utf-8
< Content-Length: 0
< Connection: keep-alive
< Server: thin 1.3.1 codename Triple Espresso
< 
* Connection #0 to host localhost left intact
* Closing connection #0
curl-v localhost:4567
*即将连接()到本地主机端口4567(#0)
*正在尝试127.0.0.1。。。有联系的
>GET/HTTP/1.1
>用户代理:curl/7.22.0(x86_64-pc-linux-gnu)libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
>主机:本地主机:4567
>接受:*/*
> 
但我想要的是:

< HTTP/1.1 453 CLIENT_ERROR
和我一样

< HTTP/1.1 200 OK
当一切按计划进行时


是否可以使用Sinatra/Rack执行此操作?

状态消息由您正在使用的服务器生成,例如,在精简版中,消息在中,响应行在中生成;在WEBrick中,消息在中,响应在中生成

如果知道正在使用的服务器,可以将错误添加到相应的哈希中

使用瘦:

require 'thin'
Thin::HTTP_STATUS_CODES[453] = "Client Error"
以及输出:

$curl-v localhost:4567
*即将连接()到本地主机端口4567(#0)
*正在尝试127.0.0.1。。。有联系的
*已连接到本地主机(127.0.0.1)端口4567(#0)
>GET/HTTP/1.1
>用户代理:curl/7.19.7(universal-apple-darwin10.0)libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3
>主机:本地主机:4567
>接受:*/*
> 
与WEBrick合作:

require 'webrick'
WEBrick::HTTPStatus::StatusMessage[453] = "Client Error"
它给出了输出:

$curl-v localhost:4567
*即将连接()到本地主机端口4567(#0)
*正在尝试127.0.0.1。。。有联系的
*已连接到本地主机(127.0.0.1)端口4567(#0)
>GET/HTTP/1.1
>用户代理:curl/7.19.7(universal-apple-darwin10.0)libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3
>主机:本地主机:4567
>接受:*/*
> 
本地主机--[13/Aug/2012:01:41:48英国夏令时]“GET/HTTP/1.1”4530
- -> /
我建议不要使用自定义HTTP状态代码。如果你认为你有一些通用的东西,考虑写一个互联网草案,并通过IETF规范过程。

这是可能的Ruby代码运行时NGNX+乘客?