jas*_*son 7 azure-storage http-headers
我正在使用Azure Blob存储来存储媒体文件并使用共享访问签名提供对这些文件的访问; 一切都在这方面运作良好.
但是,我有一个客户端应用程序需要"恢复"对这些文件的访问,并使用HTTP RANGE标头.当它发出这样的请求时,它对从Azure返回的结果感到不满意.
我不确定如何查看Azure端的详细信息以查看请求是否失败,或者它是否只是返回了客户端没有预料到的内容,并且我没有对客户端的调试可见性.
这是传入范围标题的样子:
RANGE: bytes=4258672-
Run Code Online (Sandbox Code Playgroud)
从Azure文档中我看到它似乎支持RANGE标题,但是我想知道是否一起使用RANGE和共享访问签名存在冲突?
更新: 似乎Azure可能会为RANGE请求返回错误的状态代码,这会导致我的客户端应用拒绝响应.该文档指出Azure在响应RANGE请求时将以HTTP状态代码206响应,但是当我发出这样的RANGE请求时:
curl -I -H "User-Agent: Bonos" -r 500- "https://murfie.blob.core.windows.net/168464/1.mp3?st=2013-07-03T16%3A34%3A32.4832235Z&se=2013-07-03T17%3A34%3A32.4613735Z&sr=b&sp=r&sig=mJgQGW%2Fr3v8HN2%2BVV3Uady7J68nFqeHyzQb37HAhfuE%3D"
Run Code Online (Sandbox Code Playgroud)
Azure返回以下内容:
HTTP/1.1 200 OK
Content-Length: 19988911
Content-Type: application/octet-stream Charset=UTF-8
Last-Modified: Fri, 07 Jun 2013 16:44:50 GMT
ETag: 0x8D031B57670B986
Server: Blob Service Version 1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 77312761-65a9-42ef-90cd-ff718a80b231
Date: Wed, 03 Jul 2013 16:41:01 GMT
Run Code Online (Sandbox Code Playgroud)
我们把这个理顺了.
正如@BrentDaCodeMonkey所提到的,如果您使用的是API版本2011-01-18或更高版本,Azure会返回预期的206响应,但在我们的情况下,我们不会发出请求,因此我们无法使用请求标头指定此请求.
但是,一些微软朋友告诉我们,您可以为存储帐户全局设置API版本,但是您需要使用REST API来执行此操作(这不是您可以在管理UI中执行的操作).这篇文章解释了如何:
http://msdn.microsoft.com/en-us/library/windowsazure/hh452235.aspx
将DefaultServiceVersion设置为2011-01-18之后,我们现在回到RANGE请求的预期206状态.
对于那些在 Azure 服务 API 和棘手的授权方面苦苦挣扎的人,我推荐这个非常简单的 C# 代码片段,它以一种非常简单的方式执行完全相同的操作(至少对我来说)。
var credentials = new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials("storagename", "storagekey");
var account = new Microsoft.WindowsAzure.Storage.CloudStorageAccount(credentials, true);
var client = account.CreateCloudBlobClient();
var properties = client.GetServiceProperties();
properties.DefaultServiceVersion = "2013-08-15";
client.SetServiceProperties(properties);
Run Code Online (Sandbox Code Playgroud)
您需要添加 nuget 包 WindowsAzure.Storage v9.3.3 (已过时,但仍然有效)
归档时间: |
|
查看次数: |
2497 次 |
最近记录: |