gpt4 book ai didi

ruby-on-rails - 将带有修改后的 http header 的 http post 请求重定向到另一台服务器

转载 作者:可可西里 更新时间:2023-11-01 16:30:00 25 4
gpt4 key购买 nike

我正在使用 Ruby on Rails。这是要求:客户端(我开发的 native 移动应用程序)将向我的 Ruby 代码发送一个 http post 请求,我的代码将添加一些额外的 http header (基于一些业务逻辑),然后我需要“转发”或将此发布请求“重定向”到另一个后端服务器(具有 REST 服务)并将其响应返回给客户端。

我已经能够编写一个 Rack 中间件来拦截发布请求并添加额外的 header 。最初我以为我可以只使用 http 重定向(状态代码:307 用于发布请求)。但问题是额外的 header 可能NOT 被提交,这是我的代码的全部要点。所以这本身不是 http 重定向或转发,它更像是转换请求。

我可以使用 net http 从我的代码中发出单独的发布请求。这行得通。但是我必须将传入请求中的数据COPY 到传出请求(例如表单数据、http header )。这种复制似乎有点乏味。

我更喜欢某种简单的“重新打包”(类似于 http 重定向或转发),也就是说,我将整个传入请求复制到传出请求,添加额外的 header 并将其发送到目标 URL,然后完成。我不确定该怎么做,如果这样做甚至是个好主意。例如,HTTP_USER_AGENT 显示客户端的操作系统、浏览器类型,当我发出新请求时,我可能不需要继续发送它。

或者,我可以只复制特定于应用程序的数据,因为它们是所有后端服务器(此“重定向”的目的地)所关心的。但我反对在我的代码中硬编码属性,导致与客户端(我们的 native 移动应用程序)的紧密耦合。理想情况下,我只复制特定于应用程序的数据而不对其属性名称进行硬编码。这可能吗?如果是,怎么办?

如有任何建议,我们将不胜感激。谢谢。

最佳答案

HTTP 不允许 GET 请求以外的任何重定向。

(这在技术上不正确,但使用 HTTP 307 有点粗略 - 请参阅 https://softwareengineering.stackexchange.com/questions/99894/why-doesnt-http-have-post-redirect )

如果您也需要将 POST 请求发送到另一台服务器进行处理,那么使用代理就像您已经在做的那样是正确的解决方案。

在代理中重新创建请求可能看起来很乏味,但它实际上可以保证您正确调用其他服务器的“API”。

虽然您可以简单地遍历请求 header :

uri = URI('http://www.example.com/todo.cgi')
req = Net::HTTP::Post.new(uri)

request.headers.each do |key, value|
req[key] = value
end

并传递请求表单数据:

req.set_form_data = request.request_parameters

您应该问问自己代理一切是否真的明智。

参见 http://api.rubyonrails.org/classes/ActionDispatch/Request.html

关于ruby-on-rails - 将带有修改后的 http header 的 http post 请求重定向到另一台服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37253199/

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