我正在创建网站http://Meer.li,当我通过Facebook调试程序运行它时http://developers.facebook.com/tools/debug/og/object?q=meer.li - 它无法找到我的元标记。
当我查看facebook刮擦的来源时,它显示了我网站的精简版本,其中更改了文档类型,并且没有元标记 - http://developers.facebook.com/tools/debug/og/echo?q=http%3A%2F%2Fmeer.li%2F。
我在这里做错了什么?
我正在运行rails 3.2,ruby 1.9.3并且整个程序在Heroku上使用mongo数据库运行。
修改
我的应用程序中似乎有正确的接受标头...如果我在不同的视图中执行此操作:
<%= request.headers["Accept"] %>
我明白了:
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
如果我们卷曲-H和正确的标题,为什么我们可以刮掉整个网站?为什么Facebook没有抓住我的网站?
答案 0 :(得分:2)
在调试器中尝试使用url,它表示响应状态代码为206,表示“部分内容”。
我试图卷曲网址,实际上我得到的响应是偏的,它不包括html,head和body标签(或它们的结束标签),看起来像html包含的jsonp响应
$("#designs_content").append
我不确定为什么会发生这种情况,也许你的服务器会根据这个来检查请求和响应的用户代理字符串?
我不确定这与Heroku有什么关系,我从未与他们合作过。 另外,我对rails一无所知,所以我无能为力。
Wget与此无关,它是您的Web服务器根据http请求的标头返回的响应。 当您使用浏览器发出请求时,它会向请求添加一些标头,以帮助服务器找出一些内容。 如果您在chrome(safari等),网络选项卡(它们都有)或使用网络嗅探器中打开firebug或开发人员工具,您可以查看已发送的标头。
为了让您的生活更轻松,我检查了导致此问题的标题是什么... 试试这个:
curl "http://meer.li/"
你会看到响应是jsonp,而不是整个html页面。 现在试试这个:
curl -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" "http://meer.li/"
您将获得页面的完整html版本。
由于Facebook在删除页面时没有发送“接受”标题,因此当您使用浏览器查看源时,响应不是您所看到的。
我不知道你怎么能解决这个问题,因为它肯定是关于你的具体设置的,但现在至少你知道问题是什么。