七牛计算私有文件下载时是不是没对~做转义

我自己用python写了一个第三方七牛的sdk,我看七牛的下载凭证中有这么一句话:

为 URL 签名之前,对 Path 部分(不含前导/符号,通常就是 Key 本身,即上例中的 sunflower.jpg)做一次 URL转义。

我用python的urllib.quote做转义(会把~转义成%7E)获取下载地址都没有问题,下载其他文件均正常。但是当下载一个key中带有~的文件时会显示download token auth failed 。后来我在quote这里做了一个replace,把%7E换成~,也就是不要让~转义掉,就正常了。是不是七牛的计算时也没有对~做转义?

阅读 2.6k
1 个回答

文档当中的意思是,为了保证签名的正确性,如果私有资源文件名为 test~test.jpg、域名为 test.clouddn.com,那么最好签名的时候最好是用 http://test.clouddn.com/test%7Etest.jpg 去签名,同时访问的时候,用 http://test.clouddn.com/test%7Etest.jpg?e=xxx&token=xxx 去访问;

但是如果签名的时候使用 http://test.clouddn.com/test%7Etest.jpg 作为baseUrl签名,但是访问的时候用 http://test.clouddn.com/test~test.jpg?e=xxx&token=xxx 那很大可能性就会报错了;

推荐对文件名做utf-8的urlencode的主要目的还是防止特殊字符在一些情况下http请求发生错误的转义;本质上,如果特殊字符是utf-8的格式是可以不用额外的做urlencode的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进