我正在尝试从计算机上的静态文件向简单的 sinatra 服务进行 AJAX 调用。ajax 调用返回错误且没有详细信息。服务器也没有记录错误。另一个奇怪的症状是请求标头中的 Origin 为空。
事实证明,如果不付出一点额外的努力,您就无法进行跨域 ajax 调用。您可以在您的 sinatra 响应中设置Access-Control-Allow-Origin标头,以使用如下代码段将您的服务公开给外部域:
get '/hi' do
response['Access-Control-Allow-Origin'] = '*'
content_type 'text/plain'
"Hello World"
end
您还可以设置另一个标头,以允许除 GET 之外的其他 HTTP 方法Access-Control-Request-Method。您可以通过搜索 CORS: Cross Origin Resource Sharing 和前面提到的标头来找到更多信息。
哦,如果你也想在 Rails 中这样做,你可以在你的控制器中做这样的事情:
after_filter :set_access_control_headers
def set_access_control_headers
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Request-Method'] = '*'
end