gpt4 book ai didi

ruby-on-rails - 如何在启用 SSL 的 Rails 应用程序中的单个 Rack::Proxy 请求中禁用 SSL?

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:32 26 4
gpt4 key购买 nike

我有一个启用了 SSL 的应用程序,我正在将特定请求重定向到一个较旧的应用程序,以避免 CORS 问题。事实上,这是一个将处理打印请求但不支持 SSL 的 .Net 应用程序。重定向的请求尝试连接 SSL,结果在 Rails 应用程序日志中出现以下内容...

OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3/TLS write client hello: wrong version number):

其他应用程序根本不支持 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 路由将请求定向到 Controller 函数,如下所示:-

 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。

关于ruby-on-rails - 如何在启用 SSL 的 Rails 应用程序中的单个 Rack::Proxy 请求中禁用 SSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57575935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com