[英]How to disable SSL in a single Rack::Proxy request within an SSL enabled Rails application?
我有一个启用SSL的应用程序,并且正在将特定请求重定向到较旧的应用程序,以避免CORS问题。 实际上,这是一个.Net应用程序,将处理打印请求,但不支持SSL。 重定向的请求尝试与SSL连接,从而在Rails应用程序日志中生成以下内容...
OpenSSL :: SSL :: SSLError(返回的SSL_connect = 1 errno = 0 state = SSLv3 / TLS向客户端问好:版本号错误):
另一个应用程序根本不支持SSL,因此与验证SSL证书或SSL版本号无关。
目前,我正在使用以下功能,当应用程序未在SSL下运行时,该功能可以解决问题
def perform_request(env)
request = Rack::Request.new(env)
if request.path.include? "proxy_process_dispatch"
env["http.read_timeout"] = (OFFICE_PRINT_TIMEOUT / 1000) - 1
env["HTTP_HOST"] = OFFICE_IP + ':' + OFFICE_PRINT_SERVER_PORT
env["REQUEST_PATH"] = "/?process=true"
super(env)
else
@app.call(env)
end
end
似乎因为原始请求是SSL,所以重定向的请求也是SSL,但我需要确保它是标准HTTP请求,尽管是在非标准端口上。
好的,所以我决定我将以这种错误的方式进行操作,而不是使用Rack :: Proxy转移请求以避免发生CORS问题,我只是使用Net:HTTP函数创建了一个新的简单请求。 因此,我的应用程序向我的rails应用程序发出了JS请求,并且我的rails路由将请求定向到控制器功能,如下所示:-
require "net/http"
require "uri"
def process_dispatch_list
uri = URI.parse("http://#{OFFICE_IP}")
http = Net::HTTP.new(OFFICE_IP, OFFICE_PRINT_SERVER_PORT)
http.use_ssl = false
http.read_timeout = (OFFICE_PRINT_TIMEOUT / 1000) - 1
request = Net::HTTP::Get.new(uri.request_uri + "?process_dispatch=true")
response = http.request(request)
case response
when Net::HTTPSuccess
render json: response.body, status: :ok
else
render json: response.body, status: :unprocessable_entity
end
end
工作正常,我的响应在前端ajax请求中进行解释,并根据响应状态使用pnotify报告失败的成功。 不再需要Rack:Proxy了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.