1

Azure Blob 저장소에 저장된 파일에 대한 액세스를 제어하는 ​​ASP.NET Azure 웹 응용 프로그램 (웹 역할)을 구축 중입니다. GET 요청에서 HttpHandler는 사용자를 인증하고이 특정 파일 및 사용자에 대해 짧은 시간 프레임 (예 : 30 분)의 공유 액세스 서명을 만듭니다. 클라이언트는 HEAD를 사용하여 업데이트 된 미디어 파일을 확인하는 미디어 플레이어이며, Last-modified 헤더가 다른 경우 GET 요청을합니다. 따라서 SAS URL을 생성하고 싶지 않고 HEAD 요청에 대한 응답으로 LAst 수정, Etag 및 Content 길이 헤더를 반환합니다. 이 나쁜 습관인가? 파일이 최신 인 경우 파일을 다시 다운로드 할 필요가 없으므로 SAS URL을 만들 필요가 없습니다."303 HTTP 헤더 응답에서"

예 요청 :

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 토큰을 얻고, Azure 저장소에 대한 If-Modified-Since 헤더를 사용하여 GET 요청을하고, 마지막 다운로드 이후에 수정 된 경우에만 BLOB를 다운로드 할 수 있습니다. Azure 저장소 Blob 서비스가 지원하는 조건부 헤더에 대한 자세한 내용은 Specifying Conditional Headers for Blob Service Operations을 참조하십시오.

+0

클라이언트는 독점 (폐쇄) 장치이므로 클라이언트 소프트웨어를 수정할 수 없습니다. – user3336731

+0

HEAD 요청이 GET 요청을 할 것인지 결정할 수 있도록 Last-Modfied 헤더 (클라이언트 장치가 기대하는)를 반환하도록 서비스를 구현했습니다. GET 요청에서 나는 SAS 토큰을 생성하고 하늘색 얼룩 서비스로 리디렉션합니다. 그것은 위대한 작품. 질문 : 더 좋은 방법이 있습니까? 내 DB에 모든 파일 메타 데이터가 있으므로 HEAD 요청에서 Azure에 연결할 필요가 없습니다. – user3336731