Chúng tôi có ứng dụng React tải một số dữ liệu không đồng bộ từ một tên miền khác. Các yêu cầu được thực hiện bằng cách sử dụng isomorphic-fetch
ở chế độ cors
và các yêu cầu cũng như phản hồi đều ổn và hoạt động chính xác khi thử nghiệm bằng trình duyệt của riêng tôi.Googlebot và các phản hồi CORS trống
Chúng tôi đã giám sát các phản hồi và đăng nhập thất bại trở lại ứng dụng của chúng tôi để phân tích.
Mặc dù phần lớn thời gian đều tốt (và mọi thứ dường như được lập chỉ mục chính xác và hiển thị tốt trong Google), chúng tôi vẫn thấy rất nhiều lỗi, chỉ cho Googlebot. . Gỡ lỗi đối tượng phản hồi Tôi thấy rằng status
là 200, nhưng statusText
trống. Câu trả lời không có nội dung (và do đó không có phương thức .json
hoặc .text
) và không có tiêu đề (không phải là trường hợp) và chế độ được đặt chính xác là cors
(không phải opaque
, có thể giải thích một số khác lạ).
Từ sự hiểu biết của tôi về CORS, tất cả điều này đều nhìn trên bảng về các tiêu đề được gửi và nhận, vậy tại sao Googlebot có quá nhiều vấn đề liên tục? Googlebot đang nói rằng nó có một phản ứng HTTP 200 (thành công, Promise không bị từ chối), nhưng nó thiếu tất cả những thứ đi kèm với HTTP 200 responose - nó không có thân và không có phần đầu. Tại sao Googlebot không trả lại phản hồi với tiêu đề và nội dung (như được mô tả bên dưới)?
Yêu cầu preflight bình thường trông như thế này (từ DevTools Chome) (thêm dấu gạch chéo trong */\*
thêm để ngăn chặn SO nghĩ rằng đó là một cái mở comment)
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
Và phản ứng preflight trông như thế này
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
Sau đó, theo sau là yêu cầu thực tế trông như thế này (được gửi dưới dạng POST với cơ thể JSON)
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
nào trả về một phản ứng như thế này (với một cơ thể 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
Không, tôi đã có một vấn đề dán bản sao khi tôi đang cố gắng loại bỏ suy nghĩ SO '*/*' có nghĩa là mở một nhận xét trong khối mã. Đã xóa một lần nữa. –
Không chắc chắn vấn đề là gì? – guest271314
Googlebot tuyên bố rằng nó có phản hồi HTTP 200 nhưng không có nội dung và không có tiêu đề. Thử nghiệm ở nơi khác không thể tái tạo và sự cố chỉ xảy ra với Googlebot. Tôi sẽ chỉnh sửa để cố gắng làm rõ hơn. –