我有2个域:language.com
和bonjour.language.com
。
我想从POST
向根域发出bonjour.language.com
请求。
我使用的是Backbone:
model.save(null,
xhrFields:
withCredentials: true
)
我看到了预检请求,然后是实际请求。
请求
当请求是跨域时,显然没有传递csrf令牌,因此我在服务器上禁用了创建操作的验证。
在控制器中,当我记录request.format
时,我得到text/html
。 任何想法为什么?
(响应是406不可接受,因为我没有处理html格式的块)。
答案 0 :(得分:1)
找到解决方案,这很具有讽刺意味。
以下是最终工作的内容:
model.save(null,
xhrFields:
withCredentials: true
crossDomain: false
)
crossDomain: false
是否有跨域请求?奇怪吧?
这会诱使jQuery将X-Requested-with标头集发送到XMLHttpRequest。
默认情况下,跨域请求没有设置。
但是Rails必须知道请求是XMLHttpRequest,因此它可以使用内容类型来设置请求格式!
另一种更长但可能更明确的方法是自己设置标题:
model.save(null,
xhrFields:
withCredentials: true
beforeSend: (request) ->
request.setRequestHeader('X-Requested-with', 'XMLHttpRequest')
)