gpt4 book ai didi

ruby - Sinatra 重定向到没有路径的 URI

转载 作者:数据小太阳 更新时间:2023-10-29 07:56:15 25 4
gpt4 key购买 nike

我正在尝试一个简单的重定向到 iOS 模式的 OTA 安装链接:

itms-services://?action=download-manifest&url=https://builds.net/abc.plist

不管 Sinatra(webrick?)尝试过的重定向方法如何,总是提示无效的 URI:ERROR URI::InvalidURIError: bad URI(absolute but no path):

我已经尝试过以下调用:

# Simple redirect
redirect 'itms-services://?action=download-manifest&url=https://builds.net/abc.plist'

# Raw headers redirect
status 302
headers 'Location' => 'itms-services://?action=download-manifest&url=https://builds.net/abc.plist'

# Halt redirect
halt 302, { 'Location' => 'itms-services://?action=download-manifest&url=https://builds.net/abc.plist' }, ''

总是导致相同的错误。

是否有可能在不触发 URI 类解析的情况下进行重定向?

(Sinatra 1.4.3,Ruby 1.9.3p194)

最佳答案

我认为问题不在于响应,而在于后续请求。该错误由 URI 库引发,因为 uri 确实 看起来无效。 Sinatra doesn't parse the uriWEBrick only parses the requests using URI

您需要提供网络服务器可以使用的 uri,没有主机名且具有该方案的 uri 不太可能被解析为有效或可用。

来自 the RFC - Uniform Resource Identifier (URI): Generic Syntax

For example, the "file" URIscheme is defined so that no authority, an empty host, and"localhost" all mean the end-user's machine, whereas the "http"scheme considers a missing authority or empty host invalid.

它是一个 HTTP 服务器,所以你必须帮助它 - 看这个 Q&A


作为我在这里和下面的评论中提到的例子,Sinatra 通过重定向发送 header ,网络服务器不应该在 IRB session 中解析响应中的 URI:

require 'sinatra/base'
# => false
class BadUri < Sinatra::Base
get "/" do
redirect 'itms-services://?action=download-manifest&url=https://builds.net/abc.plist'
end
end
# => [Az, [], [], #<Proc:0x000001009c50a8@/Users/iainuser/RubyProjects/Test/SO19858178/vendor/ruby/1.9.1/gems/sinatra-1.4.4/lib/sinatra/base.rb:1593>]
BadUri.run!
[2013-11-11 14:18:42] INFO WEBrick 1.3.1
[2013-11-11 14:18:42] INFO ruby 1.9.3 (2013-02-06) [x86_64-darwin10.8.0]
== Sinatra/1.4.4 has taken the stage on 4567 for development with backup from WEBrick
[2013-11-11 14:18:42] INFO WEBrick::HTTPServer#start: pid=36540 port=4567

然后得到响应:

curl -D headers http://localhost:4567/

在它转储的headers文件中:

HTTP/1.1 302 Found
Content-Type: text/html;charset=utf-8
Location: itms-services://?action=download-manifest&url=https://builds.net/abc.plist
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Content-Length: 0

没有抛出错误。但那是彪马。我用 Thin 试过……它也有效。对于 Webrick,它会引发错误,因此不要使用 Webrick

关于ruby - Sinatra 重定向到没有路径的 URI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19858178/

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