Reactアプリケーションでは、別のドメインから非同期に一部のデータを読み込みます。要求はのcors
モードで行われ、要求と応答はすべて正しく見え、自分のブラウザでテストすると正しく動作します。Googlebotと空のCORS応答
私たちは応答を監視し、分析のために私たちのアプリケーションに戻ってログに記録します。
多くの場合、正常にインデックスが作成されており、すべて正常にインデックスに登録されているように見えますが、データを正しく取得できないGooglebotの場合は、のみが失敗します。 。応答オブジェクトのデバッグstatus
は200ですが、statusText
は空です。応答には本文がありません(したがって、.json
または.text
メソッドはありません)。ヘッダーはありません。この場合は、cors
と正しく設定されています(opaque
ではありません)。
CORSの私の理解から、これは送受信されるヘッダーの点ではすべて上にありますが、なぜGooglebotに間欠的な問題が多いのですか? GooglebotはHTTP 200の応答(成功、Promiseは拒否されません)があると言っていますが、HTTP 200が応答するすべてのものが欠けています。 Googlebotがヘッダーと本文を含む応答を返さないのはなぜですか(後述)。
通常のプリフライトリクエストは、この(丁目のデベロッパーツールから)のように見えます(*/\*
内の余分なスラッシュは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として送信されます)をフォローします。
(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
をコードブロックでコメントを開くことを意図しているので、*/*を考えていたので、コピーペーストの問題がありました。もう一度削除されました。 –
何が問題なのですか? – guest271314
GooglebotはHTTP 200応答があると主張していますが、本文とヘッダーはありません。他の場所でのテストは再現できず、問題はGooglebotでのみ発生します。 これをより明確にするために編集します。 –