400 错误请求请求 Header 或 Cookie 太大 - Rails 与 facebook 和子域

400 Bad Request Request Header Or Cookie Too Large - Rails with facebook and subdomains

我在 rails 4 中使用子域创建了应用程序。它使用 Turbolinks。我给它添加了一个 facebook 插件。在生产中,当我刷新页面时,一切正常。但是,当我进入使用子域的 link 时,服务器响应 400 状态代码。

400 错误请求 请求 Header 或 Cookie 太大 nginx/1.6.2

如您所见,我使用 nginx 作为网络服务器。

我尝试调试它并注意到,在我的子域 facebook 插件上生成了两个额外的 cookie。

当我删除那些 cookie 时,我可以在我的子域上自由冲浪,直到我返回根域。之后,当我再次尝试访问我的子域时,这两个 cookie 再次生成,整个问题再次出现。

有谁知道为什么要创建它以及如何防止 facebook 生成它?

它没有出现在本地主机上。请问这是不是nginx的配置?

我当前的 FB 集成是使用 coffescript 提供的。

fb_root = null
fb_events_bound = false

fb_init =  ->
  loadFacebookSDK()
  bindFacebookEvents() unless fb_events_bound

bindFacebookEvents = ->
  $(document)
    .on('page:fetch', saveFacebookRoot)
    .on('page:change', restoreFacebookRoot)
    .on('page:load', ->
      FB?.XFBML.parse()
    )
  fb_events_bound = true

saveFacebookRoot = ->
  fb_root = $('#fb-root').detach()

restoreFacebookRoot = ->
  if $('#fb-root').length > 0
    $('#fb-root').replaceWith fb_root
  else
    $('body').append fb_root

loadFacebookSDK = ->
  window.fbAsyncInit = initializeFacebookSDK
  $.getScript("//connect.facebook.net/pl_PL/all.js#xfbml=1")

initializeFacebookSDK = ->
  FB.init
  appId     : 'my_app_id'
  channelUrl: '//https://facebook.com/my_site
  status    : true
  cookie    : true
  xfbml     : true

@Facebook = { fb_init }

$(document).on "ready page:load pageshow", ->
  Facebook.fb_init()

coffee_script 代码有问题。

我从https://developers.facebook.com/docs/plugins/like-button

复制代码解决了这个问题

到正文标签后的 html 文件。这确保即使在实施了 turbolinks 的情况下也能重新初始化 facebook 插件。

代码如下:

body
  #fb-root
  javascript:
    (function(d, s, id) {
      var js, fjs = d.getElementsByTagName(s)[0];
      if (d.getElementById(id)) return;
      js = d.createElement(s); js.id = id;
      js.src = "//connect.facebook.net/pl_PL/sdk.js#xfbml=1&appId=MY_APP_ID&version=v2.0";
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));