1

我正在构建一个控制对存储在Azure Blob存储中的文件的访问的ASP.NET Azure Web应用程序(Web角色)。 在GET请求上,我的HttpHandler对用户进行身份验证,并为该特定文件和用户创建一个短时间帧(例如30分钟)的共享访问签名。客户端是一个媒体播放器,它使用HEAD检查更新的媒体文件,如果最后修改的标头不同,它将发出GET请求。因此,我不想创建SAS网址,而是响应HEAD请求返回LAst修改,Etag和内容长度标头。这是不好的做法吗?如果文件是最新的,则不需要再次下载文件,因此不需要创建SAS网址。“303其他”在HTTP HEAD响应中

实施例请求:

GET /testblob.zip 
Host: myblobapp.azurewebsites.net 
Authorization: Zm9v:YmFy 

响应:

HTTP/1.1 303 See other 
Location: https://myblobstorage.blob.core.windows.net/blobcontainer/testblob.zip?SHARED_ACCESS_SIGNATURE_DATA 

任何想法?

回答

0

是否有强制客户端首先发出HEAD请求的具体原因?它可以使用您的服务进行身份验证,获得SAS令牌,使用If-Modified-Since标头针对Azure存储创建GET请求,并且只有在自上次下载后修改后才下载blob。有关Azure存储Blob服务支持的条件标头的更多信息,请参阅Specifying Conditional Headers for Blob Service Operations

+0

客户端是专有(关闭)设备,我无法修改客户端软件。 – user3336731 2014-10-02 06:02:35

+0

我实现了服务,以便HEAD请求返回最后修改的头(客户端设备期望的),以便它可以确定是否发出GET请求。在GET请求中,我生成SAS令牌并重定向到azure blob服务。它效果很好。问题是:有更好的方法吗?我有我的数据库中的所有文件元数据,所以我不需要连接到Azure的HEAD请求。 – user3336731 2014-10-02 06:08:11