【问题标题】:Range header broken in Drive?驱动器中的范围标题损坏?
【发布时间】:2014-03-05 05:41:15
【问题描述】:

Range 标头对于通过 export-links 下载的文件似乎无法正常工作。这些是请求标头、响应标头和内容的顶部:

GET /feeds/download/documents/export/Export?id=1dU-juYN25FMXdp6Ju62KAIT_0tuuZAPEgZkj-aT6kPQ&exportFormat=docx HTTP/1.1
Host: docs.google.com
Range: bytes=0-499
Content-length: 0
Authorization: Bearer ya29.1.AADtN_VJ_CVLUz30Ke0zeNnhBk19y3UPo-SAnMLK5WMXUEo9a6RiTgt_ghBZRw
HTTP/1.1 200 OK
Alternate-protocol: 443:quic
X-xss-protection: 1; mode=block
X-robots-tag: noarchive
Content-disposition: attachment;filename="EventDrivenIOWebApplicationServerAnalysis.docx"
Set-cookie: NID=67=AUoLJM4MRuah2izbPY5Lq_8-4bXlAlVH6N0dren6TAMFvZZo5R82VCXQvBOu9X2eIWdYf2_OeTwrq-3WH6q5uwA99CXcBDy1urLzr6fGeJUE5Pxy6EWVDG3HZLFjAz1H;Domain=.google.com;Path=/;Expires=Thu, 04-Sep-2014 05:36:12 GMT;HttpOnly
Expires: Wed, 05 Mar 2014 05:36:12 GMT
X-google-cache-control: remote-fetch
Server: GSE
Via: HTTP/1.1 GWA
Cache-control: private, max-age=0
Date: Wed, 05 Mar 2014 05:36:12 GMT
P3p: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document; charset=utf-8
X-frame-options: SAMEORIGIN
X-content-type-options: nosniff
Content-location: https://docs.google.com/feeds/download/documents/export/Export?id=1dU-juYN25FMXdp6Ju62KAIT_0tuuZAPEgZkj-aT6kPQ&exportFormat=docx
PK¬dDdocProps/app.xmlÁ
Â0D¿À¹kªI[Ñ«õm
´»!»þ½A={Þð±í}Ô
2GÂZÏgVBľ֧ãnºÒÅap!Ôú¬ÛfbdÀªk}IkcØ_`t<+é(NJ̽¡®¶ä¯# EU-
Ü0@¦P¿ëü+
ä_ûø||¤âkì&¥!z'åd³'êP¥ÃÖük¾§'PKoð¬PK¬dDdocProps/core.xmlmÝJÄ0FÀw¹og« RÚ.*Â*z±ÌɸmßÞlÑ*ì^ð9Ì|Íz´í1&í]Ë«rÅ:év}Ë_o+Î     §ñ[>aâë>âSô#iL,\ªehù(ÔIîÐTfÂåðÃG+(cAÈOÑ#¯V`$à ,Âbä?J%eøf( hТ£UYÁKm:90'ÿH«i
xý
zLza(ÍûWðöp¿O-´;T%w5i2ØÝìóì:êü²;xd¯øÎ6!-åÒÙcîm0SÒ©T^
,ó
UÝ}PKÙ)å.¶PK¬dDword/footer1.xml­TËnÛ0üþÀ»-'¢"EöbBÓ~CRk¾°¤¤øï»Ô+[Lkfgf¹^ûæöI«¤à¥59¹ÚîH"³\*'¿}Û|!Ôpª¬99On÷nº¬ ØøL³Ô!¸,M=«¦~k0H4
øUª)·aV;ä£T2ÓëÝî3mlN0Ùh±Ñõ¶QÙ²LǤ5¹ä`Y£   }b
BaÖøZ:?¹éKݬ'ö£K´ZMu[ÆvøMh5u¸Ë÷rv¼Ú­`´kZx9u¢©4³MÜѽÅìqh½ÕóEgáÕFê(Âùmôy¾Ô;¹j¨

Ìy«)É@]â ,;        ~GMKçeæÕªu^8qI+ ìñ÷í.ÿ^äd7¾Èý,àð-têº(i£Â¦+ '!Üñ°¸¥QMÒ     >J#üï$·Ý5¬ZPQ4j¨zpá%ü6 «:D0Û(Ú)5\B8G~Ƽ{ñõû}|IJ#?Qÿ4Þ¡¡èßç6þ{׳JGfuCxý_PKx÷OÛ PK¬dDword/numbering.xmlíXYnÛ0=Aï`èg¬Å²¬ AAQéh¶pÝôô¥ÖDRÐ?å|3óä£G#ßÜþælv$ ¨ãÏ=gF)ûÄùõüx;3¥H$Î+QÎíæÓÍi-r¾%`üfB¨5ÇsÐ:[»®ÂÂËcÜIàH)ì]à%Ï®°äÒtKÕ¯nàySÓÈÄÉA¬k+N1H%wºYËÝbRMÉ[<Hs"tÑÂ̤P©Ëfäø¯M9küNÙl) 9gΪD'   i¥úP[FßqE1f    ÝÍJ8¢¢¥)nG¨Í=7¹ëC+©Þ6òvYHez¢[@ð:\:ã<ßÇgtÔ-î1(C{!Ï¡Àº!`ç00_Hzĵ9ݺÎ=¦¢= îl̯mõ÷Ï:³¯©)¥;2c¢fH¯DLÁm°#b»©ÊÅ#oÁ`Ê«L&òünmýyÃ
ÊÈNWpöÔØ

根据文档(https://developers.google.com/drive/web/manage-downloads 的“部分下载”部分),我应该只能返回 500 字节(内容)。

Range 标头非常适合正常下载。我会在回复中得到类似的信息:

Content-range: bytes 0-499/11406698

这表示满足的范围和内容长度。

【问题讨论】:

    标签: python google-drive-api


    【解决方案1】:

    根据 API,如果您的范围完全有效,您将获得 500 个字节,如果您的范围包括 EOF,则为

    另外请记住,包含总字节数的标头和导出文档的部分下载都不是 正式 文档化 API 的一部分,因此不应依赖它们,因为它们可能随时更改/停止/删除。

    问题是您同时依赖 两个 未记录的功能 - 答案是不要导出的文档应该全部下载。

    附加信息的唯一合理用途是估计完成下载的时间,因为您通常不应该在下载完成之前开始处理文件。一个例外是下载的文件将被视为流,在这种情况下您将无法执行诸如seek() 之类的操作。

    一种可能的解决方法(除了完全下载文件)是在上游转换文档,然后对生成的文件使用部分下载,但我怀疑您必须在文件保存时这样做。

    或者提出一个功能请求来请求这个功能并保持你的手指交叉。

    【讨论】:

    • 是的,但实际响应(针对导出链接,而不是下载链接)与文档不一致。
    • 老经典 - 不要依赖 API 的 undocumented 部分,因为它们可能更改或不起作用无处不在!
    • 阅读原文,以及我对你的回复。它已记录在案,但因某些类别的下载而损坏。分块是为了可恢复性。这样做符合每个人的利益。
    • Steve,问题在于无法提前确定导出文件的大小。这对于文件系统驱动程序来说是一个大问题,因为操作系统通常只允许您搜索它提前知道的一定数量的字节。我希望有人真正有一个有用的解决方法或一些实际经验来回应......你只是分享我已经定义/暗示的问题。
    【解决方案2】:

    您能否在 appengine 上托管一个小型代理来“下载”完整的导出文件,然后将其部分下载提供给您的浏览器。

    【讨论】:

    • 如果我想先下载整个文件,我会在本地下载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2014-07-17
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多