我的网站 Onebox 预览无法工作

我有一个网站,我已添加了必需的 OpenGraph 标签,但它没有显示任何 Onebox 预览。它通过了 OpenGraph 验证,所以我怀疑是标记问题。

(我无法发布指向验证器的链接,因为我是新用户)

我可以在服务器端观察到它确实在为 Discourse 机器人提供页面:

User-Agent: 'Discourse Forum Onebox v3.3.0.beta1-dev'
IP Address: 2602:fd3f:3:204:0:242:ac11:2d

但链接就是不显示:

我曾认为问题可能出在我们为 HEAD 请求返回 505 HTTP 版本不支持,基于这个帖子。所以我修补了我们的服务器,为 HEAD 方法返回一个敷衍的 200 OK 响应:

> HEAD / HTTP/1.1
> Host: swiftinit.org
> User-Agent: curl/7.81.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< host: swiftinit.org
< access-control-allow-origin: *
< content-length: 0
< content-type: text/html; charset=utf-8
< 

然而,这仍然无效。

1 个赞

您好,欢迎 :wave:

您能检查一下您的服务器是否没有阻止请求吗?从我这里看到的情况来看,我收到了 400 作为错误代码(当我查看 Discourse 的 fetch 响应时)。

2 个赞

好的,我已经将站点配置为将 HEAD 请求与 GET 请求同等对待。

该站点有一个安全策略,除非客户端发送的 User-Agent 字符串以 \"Discourse Forum Onebox\" 开头,并且具有 Accept-Language: * 标头,否则将返回 400。我能够使用 curl 和以下设置通过过滤器:

$ curl -v -I --http1.1 \
    -A 'Discourse Forum Onebox v3.3.0.beta1-dev' \
    -H 'Accept-Language: *' \
    https://swiftinit.org -o /dev/null
> HEAD / HTTP/1.1
> Host: swiftinit.org
> User-Agent: Discourse Forum Onebox v3.3.0.beta1-dev
> Accept: */*
> Accept-Language: *
>
< HTTP/1.1 200 OK
< host: swiftinit.org
< link: <https://swiftinit.org/>; rel="canonical"
< etag: "8898806577480f6f7e5241ff270a9201"
< access-control-allow-origin: *
< content-length: 18933
< content-type: text/html; charset=utf-8
<

有没有办法可以看到 discourse 的 fetch 响应?

从我的角度来看,这是一个 GET 请求,并且只传递了 User-Agent 标头。目前,它返回一个 Bad Request

我认为没有直接查看响应的方法;我已将一些调试日志直接添加到代码中。

1 个赞

原来是这样,它有一个 Accept-Language 标头的过滤器,而机器人并非在所有请求中都发送此标头。非常感谢!

3 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.