2015-02-05 5 views
0

Согласно spec, Документы Google можно загружать в разных форматах с использованием соответствующей записи в метаданных файла, полученных с использованием API-интерфейса накопителя. URL-адреса, указанные этими записями, поддерживают CORS, поэтому их можно использовать из чистого Javascript без прокси.CORS on exportLinks для таблиц Google Docs не работает

Это работает для большинства файлов и типов документов (документ, презентация), но не для электронных таблиц. При попытке к XHR GET на табличный exportLinks URL из браузера Javascript,

  1. Запрос OPTIONS возвращает правильный ответ, но он имеет Истекает заголовок Fri, 01 Jan 1990 00:00:00 GMT
  2. Браузер дает в этот момент (вероятно, из-за к истечению)
  3. Выполнение GET с тем же авторизацией, Referer, Origin headers с использованием curl возвращает таблицу в порядке, но заголовки ответов не содержат заголовок Access-Control-Allow-Origin, поэтому он не работал бы в браузере.

Другие типы документов ведут себя ожидаемым образом для ОПЦИЙ и GET, возвращая правильные заголовки Expires и CORS.

Фактически, старые таблицы - те, у которых есть URL-адреса exportLink, которые выглядят как https://docs.google.com/feeds/download/spreadsheets/Export?key=XXX&exportFormat=xlsx, также работают. Проблема ограничивается новыми листами, чьи URL-адреса exportLink выглядят как https://docs.google.com/spreadsheets/export?id=XXX&exportFormat=xlsx.

Я ударил этот вопрос с pigshell, используя следующие шаги:

  1. Посетите pigshell с помощью настольного браузера (Chrome/Firefox/Safari)
  2. Attach учетную запись Google, нажав на значок Google в rightbar
  3. В CLI pigshell,

    cd /gdrive/<[email protected]> 
    ls 
    gcat <docfilename>    # Displays PDF version of doc 
    gcat <spreadsheetfilename>  # CORS failure, examine browser console/devtools 
    gcat <spreadsheetcreatedyearsago> # Works 
    

ответ

1

Это, по существу, тот же самый вопрос, который был здесь спросил:

No 'Access-Control-Allow-Origin' header for exportLink

Вроде бы известная ошибка при использовании Drive API с новой версией Google Sheets (другие типы файлов Google и старую версию листов, похоже, не проблема). К сожалению, никаких известных обходных решений, кроме «ввести серверный компонент, который будет загружать файл, а затем передать его клиенту».

+0

Спасибо. Так или иначе пропустил этот вопрос. Жаль, что простой простой отказ не был исправлен в течение нескольких месяцев, и, что более того, даже не появляется в списке открытых проблем. – ganeshv

+0

эй @ryanroth, знаете ли, эта проблема решена? – Slava32

Смежные вопросы