400错误的请求请求标题或Cookie太大 - 与Facebook和子域名的Rails

时间:2015-03-20 23:43:28

标签: ruby-on-rails facebook cookies nginx subdomain

我在rails 4中使用子域创建了应用程序。它使用Turbolinks。我添加了一个facebook插件。在制作时,当我刷新页面时,一切都很好。但是,当我进入使用子域的链接时,服务器会响应400状态代码。

400错误请求 请求标题或Cookie过大 nginx的/ 1.6.2

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

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

additional cookies generated by fb script

当我删除这些cookie时,我可以自由地浏览我的子域,直到我回到根域。之后,当我再次尝试访问我的子域名时,会再次生成这两个cookie,并再次出现整个问题。

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

它不会出现在localhost上。我想知道这是否是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()

1 个答案:

答案 0 :(得分:0)

coffee_script代码中存在问题。

我通过复制https://developers.facebook.com/docs/plugins/like-button

中的代码解决了这个问题

到body标签后面的html文件。这确保了重新启动facebook插件,即使实现了turbolink。

以下是代码:

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'));