javascript - Googlebot 和空 CORS 响应

标签 javascript cors isomorphic-fetch-api

我们有一个 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 地址:

https://support.google.com/webmasters/answer/80553?hl=en

关于javascript - Googlebot 和空 CORS 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40965697/

相关文章:

javascript - v8 在 C++ 中从 nodejs 中提取全局对象

javascript - 为字符串创建动态段落

ajax - JSON REST Get-Request 正在等待 Tomcat for Chrome/Firefox 上的 CORS

javascript - 从服务器(API?)获取数据并将其显示在 HTML 页面上

javascript - 将值从 jquery slider 传递到 Django views.py

Javascript 内联输出

javascript - 尝试将 XMLHttpRequest 发送到 http ://api. lbs.yandex.net/geolocation 时收到错误请求错误 400

azure - 如何在生产中的 Nuxt 静态文件响应上添加 CORS header ?

javascript - 如何在 webpack 中正确填充 URLSearchParams?

reactjs - 如何在react-redux中调度页面加载操作?