私は Sinatra で書かれた単純なプロキシを持っています。このブロックは、api/* へのすべての呼び出しを通過するように設計されています。物事はローカルで期待どおりに機能します。ただし、サーバーにプッシュすると、奇妙なことが起こり始めます。$.post を使用した jQuery 呼び出しは、予想される POST ではなく、API への GET 要求につながります。「プロキシ」サーバー ログから、単一の jQuery 呼び出しが POST と GET の 2 つのログ アイテムを生成し、後者の結果が jQuery によって返されるように見えます。ここで何が起こっているのか、私の人生では理解できません。いくつかのヒントを得ることができれば素晴らしいことです。
# Proxy all requests to /api/*
proxy = lambda do |path|
uri = URI('http://' + HOST + '/api/' + path)
uri.query = URI.encode_www_form(params) if (request.request_method == 'GET')
# New request data
data = {
:url => 'http://' + uri.host + ':' + uri.port.to_s + uri.request_uri,
:method => request.request_method,
:headers => request_headers,
:query => uri.query
}
http = Net::HTTP.new(uri.host, uri.port)
if request.request_method == 'POST'
req = Net::HTTP::Post.new uri.request_uri
request.body.rewind
req.form_data = CGI.parse request.body.read
else
req = Net::HTTP::Get.new uri.request_uri
end
# Passthrough headers
data[:headers]['host'] = uri.host + ':' + uri.port.to_s
data[:headers].each { |key, val| req[key] = val }
# Log request data
res = http.request req
# Return
status res.code
content_type 'application/json'
headers res.to_hash
body res.body
end
get '/api/*', &proxy
post '/api/*', &proxy
大法