处理机架中子域 ajax 请求的 CORS
Handling CORS for subdomain ajax requests in rack
看了其他问题和答案后,我发现它们并没有真正涵盖我想做的事情,因此我问了一个新问题。
因此,我构建了一个用于 rack 的子域匹配中间件,我的想法是将我的 api 托管在它自己的子域 (api.localhost:3000) 中。
这在大多数情况下都有效,但是如果我尝试发送 ajax 请求,Web 浏览器会抛出一个关于 CORS 的问题。
那么我如何为我的子域匹配中间件添加子域的 CORS,请记住我在机架中为此工作。
如果您可以阻止使用 CORS 或 jsonp,我建议您这样做。最好的解决方案是定义一个子目录来处理您的 API/restful 请求。我有过类似的情况,当你强迫自己进入 CORS aka Header Always Set Access-Control-Allow-Origin * 时,你就会为自己设置限制。
尽可能避免这些限制。只是我的经验。祝你好运!
我会做类似的事情:
http://www.domain.com/rest/api/items/1
其余的地方是处理您的网络服务的地方。如果不需要,请远离子域。
如果您绝对必须使用 CORS,并且您知道请求由您处理,而且只有您自己处理,那么您可以使用 jsonp.
jsonp
jsonp 基本上使用回调函数将您的请求包装在一个 javascript 对象中。使用此方法可以处理的数据量有限,但这是一种无需设置 CORS 即可使跨域请求正常工作的快速方法。
这里是一个 jsonp 请求的例子:
$.ajax({
type: "GET",
url: "http://www.domain.com/rest/WEB055S?callback=?",
data: args,
contentType: "application/json; charset=utf-8",
dataType: "jsonp"}).
done(function(data){
alert(data.ERROR);
})...
看了其他问题和答案后,我发现它们并没有真正涵盖我想做的事情,因此我问了一个新问题。
因此,我构建了一个用于 rack 的子域匹配中间件,我的想法是将我的 api 托管在它自己的子域 (api.localhost:3000) 中。
这在大多数情况下都有效,但是如果我尝试发送 ajax 请求,Web 浏览器会抛出一个关于 CORS 的问题。
那么我如何为我的子域匹配中间件添加子域的 CORS,请记住我在机架中为此工作。
如果您可以阻止使用 CORS 或 jsonp,我建议您这样做。最好的解决方案是定义一个子目录来处理您的 API/restful 请求。我有过类似的情况,当你强迫自己进入 CORS aka Header Always Set Access-Control-Allow-Origin * 时,你就会为自己设置限制。
尽可能避免这些限制。只是我的经验。祝你好运!
我会做类似的事情:
http://www.domain.com/rest/api/items/1
其余的地方是处理您的网络服务的地方。如果不需要,请远离子域。
如果您绝对必须使用 CORS,并且您知道请求由您处理,而且只有您自己处理,那么您可以使用 jsonp.
jsonp
jsonp 基本上使用回调函数将您的请求包装在一个 javascript 对象中。使用此方法可以处理的数据量有限,但这是一种无需设置 CORS 即可使跨域请求正常工作的快速方法。
这里是一个 jsonp 请求的例子:
$.ajax({
type: "GET",
url: "http://www.domain.com/rest/WEB055S?callback=?",
data: args,
contentType: "application/json; charset=utf-8",
dataType: "jsonp"}).
done(function(data){
alert(data.ERROR);
})...