请求无效:HTTP 格式无效,解析失败 Rails
Invalid request: Invalid HTTP format, parsing fails in Rails
在传递带有特殊字符的字符串时,我收到无效请求:无效的 HTTP 格式,解析失败错误。日志报错如下。
我的要求:
http://localhost:3000/search/%
错误日志:
Invalid request: Invalid HTTP format, parsing fails.
/.rvm/gems/ruby-1.9.3-p545/gems/thin-1.6.2/lib/thin/request.rb:84:in `execute'
/.rvm/gems/ruby-1.9.3-p545/gems/thin-1.6.2/lib/thin/request.rb:84:in `parse'
/.rvm/gems/ruby-1.9.3-p545/gems/thin-1.6.2/lib/thin/connection.rb:39:in `receive_data'
/.rvm/gems/ruby-1.9.3-p545/gems/eventmachine-1.0.3/lib/eventmachine.rb:187:in `run_machine'
/.rvm/gems/ruby-1.9.3-p545/gems/eventmachine-1.0.3/lib/eventmachine.rb:187:in `run'
/.rvm/gems/ruby-1.9.3-p545/gems/thin-1.6.2/lib/thin/backends/base.rb:73:in `start'
/.rvm/gems/ruby-1.9.3-p545/gems/thin-1.6.2/lib/thin/server.rb:162:in `start'
/.rvm/gems/ruby-1.9.3-p545/gems/rack-1.5.2/lib/rack/handler/thin.rb:16:in `run'
/.rvm/gems/ruby-1.9.3-p545/gems/rack-1.5.2/lib/rack/server.rb:264:in `start'
/.rvm/gems/ruby-1.9.3-p545/gems/railties-4.0.2/lib/rails/commands/server.rb:84:in `start'
/.rvm/gems/ruby-1.9.3-p545/gems/railties-4.0.2/lib/rails/commands.rb:76:in `block in <top (required)>'
/.rvm/gems/ruby-1.9.3-p545/gems/railties-4.0.2/lib/rails/commands.rb:71:in `tap'
/.rvm/gems/ruby-1.9.3-p545/gems/railties-4.0.2/lib/rails/commands.rb:71:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
可能是什么问题?请建议我解决此问题的想法。
如何在出现以下错误时重定向到另一个页面?
%
是url中的一个特殊字符,用于url-encoding
您应该使用另一个通配符,例如 *
http://localhost:3000/search/*
为处理此类错误而引发的异常数量。
喜欢 ActiveRecord::RecordInvalid
ActiveRecord::RecordNotFound
。但这是模型例外。
对于控制器,我们有 ActionController::RoutingError
ActionController::BadRequest
与路由、映射相关 url
所以当你得到 400
错误时,它是一个 bad request error
,所以你必须通过调用一个方法来处理它,该方法将呈现一个 html 页面作为响应
试试这个
class ApplicationController < ActionController::Base
rescue_from ActionController::RoutingError, :with => :route_not_found_error
rescue_from ActionController::BadRequest, :with => :bad_request_error
resue_from StandardError, :with => :render_server_error
protected
def route_not_found_error
render "shared/404", :status => 404
end
def bad_request_error
render "shared/400", :status => 400
end
def render_server_error
render "shared/500", :status => 500
end
end
在 app/views/shared
中添加您的 404.html
、400.html
、500.html
的页面
如下更新您的 nginx 配置文件并在 public 文件夹中创建 400.html 文件。
服务器
{
听 80;
root /public; # <--- be sure to point to 'public'!
error_page 400 /400.html;
location = /400.html {
internal;
}
}
在传递带有特殊字符的字符串时,我收到无效请求:无效的 HTTP 格式,解析失败错误。日志报错如下。
我的要求:
http://localhost:3000/search/%
错误日志:
Invalid request: Invalid HTTP format, parsing fails.
/.rvm/gems/ruby-1.9.3-p545/gems/thin-1.6.2/lib/thin/request.rb:84:in `execute'
/.rvm/gems/ruby-1.9.3-p545/gems/thin-1.6.2/lib/thin/request.rb:84:in `parse'
/.rvm/gems/ruby-1.9.3-p545/gems/thin-1.6.2/lib/thin/connection.rb:39:in `receive_data'
/.rvm/gems/ruby-1.9.3-p545/gems/eventmachine-1.0.3/lib/eventmachine.rb:187:in `run_machine'
/.rvm/gems/ruby-1.9.3-p545/gems/eventmachine-1.0.3/lib/eventmachine.rb:187:in `run'
/.rvm/gems/ruby-1.9.3-p545/gems/thin-1.6.2/lib/thin/backends/base.rb:73:in `start'
/.rvm/gems/ruby-1.9.3-p545/gems/thin-1.6.2/lib/thin/server.rb:162:in `start'
/.rvm/gems/ruby-1.9.3-p545/gems/rack-1.5.2/lib/rack/handler/thin.rb:16:in `run'
/.rvm/gems/ruby-1.9.3-p545/gems/rack-1.5.2/lib/rack/server.rb:264:in `start'
/.rvm/gems/ruby-1.9.3-p545/gems/railties-4.0.2/lib/rails/commands/server.rb:84:in `start'
/.rvm/gems/ruby-1.9.3-p545/gems/railties-4.0.2/lib/rails/commands.rb:76:in `block in <top (required)>'
/.rvm/gems/ruby-1.9.3-p545/gems/railties-4.0.2/lib/rails/commands.rb:71:in `tap'
/.rvm/gems/ruby-1.9.3-p545/gems/railties-4.0.2/lib/rails/commands.rb:71:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
可能是什么问题?请建议我解决此问题的想法。
如何在出现以下错误时重定向到另一个页面?
%
是url中的一个特殊字符,用于url-encoding
您应该使用另一个通配符,例如 *
http://localhost:3000/search/*
为处理此类错误而引发的异常数量。
喜欢 ActiveRecord::RecordInvalid
ActiveRecord::RecordNotFound
。但这是模型例外。
对于控制器,我们有 ActionController::RoutingError
ActionController::BadRequest
与路由、映射相关 url
所以当你得到 400
错误时,它是一个 bad request error
,所以你必须通过调用一个方法来处理它,该方法将呈现一个 html 页面作为响应
试试这个
class ApplicationController < ActionController::Base
rescue_from ActionController::RoutingError, :with => :route_not_found_error
rescue_from ActionController::BadRequest, :with => :bad_request_error
resue_from StandardError, :with => :render_server_error
protected
def route_not_found_error
render "shared/404", :status => 404
end
def bad_request_error
render "shared/400", :status => 400
end
def render_server_error
render "shared/500", :status => 500
end
end
在 app/views/shared
中添加您的404.html
、400.html
、500.html
的页面
如下更新您的 nginx 配置文件并在 public 文件夹中创建 400.html 文件。
服务器 { 听 80;
root /public; # <--- be sure to point to 'public'!
error_page 400 /400.html;
location = /400.html {
internal;
}
}