我们有一个 React 应用程序,它从另一个域异步加载一些数据。这些请求是在 cors
模式下使用 isomorphic-fetch
发出的,在使用我自己的浏览器进行测试时,请求和响应看起来都很好并且可以正常工作。
我们监控响应并将失败记录回我们的应用程序以供分析。
虽然大多数时候一切都很好(而且一切似乎都被正确索引并在 Google 中显示正常)我们仍然看到很多失败,仅对于 Googlebot,它未能正确获取数据。调试响应对象我看到 status
是 200,但是 statusText
是空的。响应没有正文(因此没有 .json
或 .text
方法),也没有 header (不应该是这种情况)并且模式正确设置为cors
(不是不透明
,这可能解释了其他一些奇怪的现象)。
根据我对 CORS 的理解,就发送和接收的 header 而言,这一切看起来都是光明正大的,那么为什么 Googlebot 会出现这么多间歇性问题? Googlebot 说它有一个 HTTP 200 响应(成功,Promise 没有被拒绝),但它缺少 HTTP 200 响应附带的所有内容 - 它没有正文,也没有公开 header 。为什么 Googlebot 无法返回包含 header 和正文的响应(如下所述)?
一个正常的预检请求看起来像这样(来自 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
最佳答案
检查失败的 GoogleBot 调用的 IP 地址
可能是不法分子,冒充google
按照此处所述检查 IP 地址:
关于javascript - Googlebot 和空 CORS 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40965697/