似乎GET参数DeploymentContainerMsg
是AWS S3上的保留参数。假设我在S3存储桶上有一个资源,可以通过网络进行访问:
http://my-bucket.s3.amazonaws.com/index.html
...,然后将GET参数location
附加到它,就得到了HTTP 403:
http://my-bucket.s3.amazonaws.com/index.html?location=US
只要我将参数名称更改为其他名称,它就可以工作。例如:
http://my-bucket.s3.amazonaws.com/index.html?loc=US
很显然location
是AWS S3中的保留字。我的问题是:是否有我不应该尝试将所有保留字用作S3的GET参数的列表?
我搜索了文档,但找不到任何此类列表。
答案 0 :(得分:2)
location
告诉S3您正在询问存储区的位置。它是S3中通过查询字符串参数访问的几个“子资源”(不是对象的事物)之一。
您可以通过阅读整个API参考文档来编译几乎完整的列表,但这是一些较旧的文档(签名版本2)中发现的部分列表:
构造CanonicalizedResource元素时必须包括的子资源是acl,生命周期,位置,日志记录,通知,partNumber,策略,requestPayment,torrent,uploadId,上载,versionId,版本控制,版本和网站。
https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
他们会定期添加新的内容,例如select
和delete
和tagging
,因此详尽的列表并不适合未来。
您最安全的选择是使用以x-
开头的参数(而不是以x-amz
开头的参数,因为这些参数可能被保留或带有其他含义)。日志记录文档中提到了这一点:
您可以通过在请求的URL上添加自定义查询字符串参数来包括要存储在请求的访问日志记录中的自定义信息。 Amazon S3会忽略以“ x-”开头的查询字符串参数,但会将这些参数作为请求添加到请求的访问日志记录中,作为日志记录的Request-URI字段的一部分。
https://docs.aws.amazon.com/AmazonS3/latest/dev/LogFormat.html