我有一个网站,我已添加了必需的 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 个赞
您好,欢迎 
您能检查一下您的服务器是否没有阻止请求吗?从我这里看到的情况来看,我收到了 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 个赞
system
(system)
关闭
6
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.