我们有一个React应用程序,可以从另一个域异步加载一些数据。这些请求是在isomorphic-fetch
模式下使用cors
进行的,请求和响应在使用我自己的浏览器进行测试时看起来都很正常并且正常工作。
我们已将响应和日志故障的监控返回到我们的应用程序进行分析。
虽然大部分时间一切都很好(并且所有内容似乎都已正确编入索引并在Google中显示正常)但我们仍然会看到很多失败,仅适用于Googlebot,其中&#39 ; s无法正确获取数据。调试响应对象我发现status
为200,但statusText
为空。响应没有正文(因此没有.json
或.text
方法),也没有标题(不应该是这种情况),并且模式已正确设置为cors
(不是opaque
,这可能解释了其他一些奇怪的事情。)
根据我对CORS的理解,这一切都在发送和接收的标题方面看起来都很重要,那么为什么Googlebot会出现这么多间歇性问题呢? Googlebot说它有一个HTTP 200响应(成功,Promise没有被拒绝),但它缺少HTTP 200响应所带来的所有东西 - 它没有正文,也没有暴露的标题。为什么Googlebot无法返回带标题和正文的回复(如下所述)?
正常的预检请求看起来像这样(来自Chome devtools)(添加*/\*
中的额外斜线以阻止SO认为它是评论的开场白)
Accept:*/\*
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Access-Control-Request-Headers:content-type, x-apikey
Access-Control-Request-Method:POST
Cache-Control:no-cache
Connection:keep-alive
DNT:1
Host:my.host.net
Origin:http://my.origin.net
Pragma:no-cache
Referer:http://my.origin.net/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.100 Safari/537.36
预检回应看起来像这样
Access-Control-Allow-Headers:content-type,x-apikey
Access-Control-Allow-Origin:*
Cache-Control:no-cache
Connection:keep-alive
Content-Length:0
Date:Mon, 05 Dec 2016 00:55:05 GMT
Expires:-1
Pragma:no-cache
Server:Microsoft-IIS/8.5
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
然后是实际的请求,看起来像这样(作为带有JSON主体的POST发送)
accept:application/json
Accept-Encoding:gzip, deflate, br
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Cache-Control:no-cache
Connection:keep-alive
Content-Length:62
content-type:application/json
DNT:1
Host:someapi.net
Origin:http://my.origin.net
Pragma:no-cache
Referer:http://my.origin.net/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.100 Safari/537.36
x-apikey:someapikey
返回这样的响应(使用JSON正文)
Access-Control-Allow-Origin:*
Cache-Control:no-cache
Connection:keep-alive
Content-Length:33576
Content-Type:application/json; charset=utf-8
Date:Mon, 05 Dec 2016 00:55:05 GMT
Expires:-1
Pragma:no-cache
Server:Microsoft-IIS/8.5
X-AspNet-Version:4.0.30319
X-Powered-By:ASP.NET
答案 0 :(得分:2)
检查失败的GoogleBot通话的IP地址
这可能是一个邪恶的演员,假装是谷歌
按照此处所述检查IP地址: