首页 > 其他分享 >【Azure 存储服务】访问Azure Blob File遇见400-Condition Headers not support错误的解决之路

【Azure 存储服务】访问Azure Blob File遇见400-Condition Headers not support错误的解决之路

时间:2023-09-19 21:06:04浏览次数:36  
标签:account name headers support no storage Headers file Azure

问题描述

在微软云存储账号的服务中,存储一些静态图片,然后通过App Service访问,但是遇见了400 - condition headers not support 错误。

在单独通过浏览器访问 File Share中的文件,发现第一次可以请求成功,但是第二次刷新后就遇见400错误,第三次刷新的时候又访问成功,如此循环下去。

【Azure 存储服务】访问Azure Blob File遇见400-Condition Headers not support错误的解决之路_Storage

错误消息为:

This XML file does not appear to have any style information associated with it. The document tree is shown below.

<Error>
<Code>ConditionHeadersNotSupported</Code>
<Message>Condition headers are not supported. RequestId:cf7f3c6e-101a-0052-73db-ea03cf000000 Time:2023-09-19T09:24:55.3527405Z</Message>
</Error>


问题解答

在网络上搜索关键字 “400 Condition headers are not supported. “, 就可以发现很多结果。

其中以 Github的结果(https://github.com/MicrosoftDocs/azure-docs/blob/main/includes/storage-files-condition-headers.md) 和 Stack Overflow (https://stackoverflow.com/questions/43706605/azure-file-storage-error-condition-headers-are-not-supported) 为参考,找到了问题的根源

【Azure 存储服务】访问Azure Blob File遇见400-Condition Headers not support错误的解决之路_Azure_02

 


根源

Conditional headers aren't currently supported. Applications implementing them will need to request the full file every time the file is accessed.
Storage Account 目前不支持条件标头。 实现它们的应用程序将需要在每次访问文件时请求完整的文件。

文章中也给出了解决方案,通过在上传的文件中设置 CacheContorl属性值为 no-cache, no-store, must-revalidate. 目的时告诉浏览器,不要对这个URL的内容进行缓存,必须从源站点重新验证获取最新资源。

  • 所以需要通过 Azure Storage Explorer工具对每一个文件(注意:不能对文件所属的文件夹进行修改)的属性值 【CacheControl】进行修改。

【Azure 存储服务】访问Azure Blob File遇见400-Condition Headers not support错误的解决之路_Azure_03

  •  在Stack Overflow中,提出了另一种解决办法,就是在每一次请求的URL后面,增加一个随机参数,以保证每次发出的请求URL不一样,避免了浏览器缓存,因此也不会添加 Conditional Header。

【Azure 存储服务】访问Azure Blob File遇见400-Condition Headers not support错误的解决之路_Storage_04

(Source:https://stackoverflow.com/questions/43706605/azure-file-storage-error-condition-headers-are-not-supported

经验证,这种方法是可行的。

但问题在于,这个方法也只能使用一次。

第二次刷新时(如果随即参数不变化),也会遇见400-condition headers not support报错。


所以最后,最好的解决办法还是在Azure Blob File Share的文件中,添加属性值 CacheContorl为 no-cache, no-store, must-revalidate。

  • 如果是新文件,可以在上传的方法中设置CacheControl Properties 。
  • 如果是已经存在的文件,可以通过PowerShell脚本批量修改文件的 CacheControl Properties, 主要是使用

1) 获取指定folder下的全部内容 az storage file list
2) Foreach 循环,如果遇见文件夹,使用递归调用,直至全部文件获取完毕
3) 对文件类型,使用 az storage file update 更改 --content-cache 值

PowerShell脚本示例如下:

## Set the Storage Account name, File Share Name, and the Acceount Key
$account_name = "您的存储账号名称"
$account_key = "您的存储账号密钥"
$file_share_name = "需要修改的文件夹名称" #会修改文件夹中所有文件的content-cache属性值为 "no-cache, no-store, must-revalidate"

## Recursive Call to list all files and update the file properties .
Function UpdateAllFileProperties {
    param($foldername)
    Write-Host "Start to list this folder - "  $foldername
    #List all file & folder under this input folder path...
    $subfiles = az storage file list -s $foldername --account-name $account_name --account-key $account_key |  ConvertFrom-Json
    Foreach ($f in $subfiles) {
    
        If ($f.type -eq 'file') {
            Write-Host "\t" + $f.name 
            #Update file properties  --content-cache "no-cache, no-store, must-revalidate"
            az storage file update -p $f.name -s $foldername --account-name $account_name --account-key $account_key --content-cache "no-cache, no-store, must-revalidate"
        }
        elseif ($f.type -eq 'dir') {
            $newfolder = $foldername + '/' + $f.name
            Write-Host $newfolder          
            UpdateAllFileProperties $newfolder
        }
        else {
            Write-Host "Invalid type, coutinue ... "
        }    
    }
}

Write-Host "Start ... "
#Start to foreach all files & folders
UpdateAllFileProperties  $file_share_name
Write-Host "Complete ... "

 

执行结果展示动画:

【Azure 存储服务】访问Azure Blob File遇见400-Condition Headers not support错误的解决之路_Storage_05

 

 

参考资料

Error ConditionHeadersNotSupported from a Web Application using Azure Files from Browser : https://github.com/MicrosoftDocs/azure-docs/blob/main/includes/storage-files-condition-headers.md

Azure File Storage Error: Condition Headers Are Not Supported : https://stackoverflow.com/questions/43706605/azure-file-storage-error-condition-headers-are-not-supported

az storage file : https://learn.microsoft.com/en-us/cli/azure/storage/file?view=azure-cli-latest#az-storage-file-list()

Cache-Control : https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control

 

 


 

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

标签:account,name,headers,support,no,storage,Headers,file,Azure
From: https://blog.51cto.com/u_13773780/7528412

相关文章

  • 【Azure 存储服务】访问Azure Blob File遇见400-Condition Headers not support错误的
    问题描述在微软云存储账号的服务中,存储一些静态图片,然后通过AppService访问,但是遇见了400-conditionheadersnotsupport错误。在单独通过浏览器访问FileShare中的文件,发现第一次可以请求成功,但是第二次刷新后就遇见400错误,第三次刷新的时候又访问成功,如此循环下去。错......
  • npm does not support Node.js的解决办法
    原文链接:https://blog.csdn.net/UKilll/article/details/131589827 1、查看npm和nodejs的版本是否配套。2、因为我的使用了npminstall-gnpm把npm的版本升级到了9.几导致运行项目的时候提示npmv9.8.0doesnotsupportNode.jsv14.16.1,查阅了很多资料之后感觉太麻烦了,现......
  • Selenium启动chrome谷歌浏览器报错 session not created: This version of ChromeDriv
    问题Selenium启动chrome谷歌浏览器报错sessionnotcreated:ThisversionofChromeDriveronlysupportsChromeversion114参考https://www.cnblogs.com/interdrp/p/17650061.html解决使用指定版本(stable)的google浏览器和配套的chromedriver驱动。https://googlechrom......
  • 【Azure Batch】在中国区批处理服务(Mooncake Batch Account)上实验自动池(Auto Pool)
    问题描述在AzureBatch的介绍文档中,提出了自动池的概念,它可以在任务完成后,自动删除Pool资源,详细介绍:https://docs.azure.cn/zh-cn/batch/nodes-and-pools#autopools & https://learn.microsoft.com/zh-cn/rest/api/batchservice/job/add?tabs=HTTP#autopoolspecification自动池......
  • 改进了headers的爬虫(Cookies)
    importurllib.requestfromlxmlimportetreedefcreate_request(page):ifpage==1:url='http://www.chinaeol.net/hjxw/gnxw'else:url='http://www.chinaeol.net/hjxw/gnxw/index_'+str(page)+'.shtml�......
  • 【译】使用 ChatGPT 和 Azure Cosmos DB 构建智能应用程序
    原文|MarkBrown翻译|郑子铭随着对智能应用程序的需求不断增长,开发人员越来越多地转向人工智能(AI)和机器学习(ML),以增强其应用程序的功能。聊天机器人已经成为提供对话式人工智能的最流行方式之一。ChatGPT是OpenAI开发的大型语言模型(LLM),是构建能够理解自然语言并提供智能响应的聊......
  • WASI support in Go
    原文在这里。由JohanBrandhorst-Satzkorn,JulienFabre,DamianGryski,EvanPhoenix,andAchilleRoussel发布于2023年9月13日Go1.21添加了一个新的端口,通过新的GOOS值wasip1来定位WASI预览1系统调用API。该端口建立在Go1.11引入的现有WebAssembly端口的基础上。We......
  • 关于Azure-4层-负载均衡器的-Inbound NAT rules-入站NAT规则-通信的数据包抓取-分析
    关于Azure-4层-负载均衡器的-InboundNATrules-入站NAT规则-通信的数据包-分析先说一下客户端-负载均衡器-真实的后端主机,环境信息如下:客户端的IP地址:192.168.20.4入站NAT前端IP:192.168.10.100后端服务器的IP :192.168.10.5+++++++++++++++++++++++++++++++++++++++++++......
  • Azure Data Factory(八)数据集验证之服务主体(Service Principal)
    一,引言如下图所示,今天我们接着上一篇内容,继续讲解AzureDataFactory中的数据集连接服务的认证方式:ServicePrincipal关于ServicePrincipal的创建可以参考:AzureAD(四)知识补充-服务主体至于需要给ServicePrincipal分配什么样的角色和权限,大家可以自行参考实际项目......
  • Technical support website(URL)
    Thissoftwarerespectsandprotectsthepersonalprivacyofallusersusingtheservice.Inordertoprovideyouwithmoreaccurateandpersonalizedservices,thissoftwarewilluseanddiscloseyourpersonalinformationinaccordancewiththeprovisions......