0

我可以使用下面的 get 命令下载一个 test.pdf 文件,其中包含我在 C 中用于微控制器与服务器通信的代码:

GET /TestFolder/test.pdf HTTP/1.1\r\n 主机:www.xyz.com\r\n\r\n 文件:test.pdf 位于文件夹:TestFolder 在主机:xyz.com

我想在 Amazon S3 上测试该程序;所以我创建了一个帐户并上传了数据并将文件和文件夹公开,将策略添加到 S3 存储桶以便可以访问对象。当我将上面的 GET 命令发送到 S3 主机时:s3-us-west-2.amazonaws.com 在连接套接字并获得服务器的 IP 后出现错误,来自 S3 的错误消息显示:

响应错误:HTTP/1.1 400 错误请求
传输编码:分块
日期:星期一,.. 2015 04:15:02 GMT
连接:关闭
服务器:AmazonS3

我想从 get 命令中删除额外的 \r\n,并将此命令发送到 s3 GET /TestFolder/test.pdf HTTP/1.1\r\n 主机:s3-us-west-2.amazonaws.com\r\ n

这一次,请求挂起而没有响应。我没有收到任何错误消息,套接字像往常一样连接,我看到了服务器的 IP。

我将不胜感激任何可能出现问题的建议或意见。显然,当文件在其他站点公开时,GET 命令适用于文件下载,有没有人遇到过这种 http/1.1 GET 命令的问题?我可以通过在浏览器中键入链​​接从 AWS S3 访问该文件。

4

1 回答 1

0

您需要\r\n在请求结束时两次,否则服务器认为它正在等待更多标头。这里的问题是您没有指定存储桶,您可以在路径或Host:标题中执行此操作……您必须在一个或另一个中执行此操作,但不能同时执行。

GET /your-bucket-name/TestFolder/test.pdf HTTP/1.1\r\n
Host: s3-us-west-2.amazonaws.com\r\n\r\n

...或者...

GET /TestFolder/test.pdf HTTP/1.1\r\n
Host: your-bucket-name.s3-us-west-2.amazonaws.com\r\n\r\n
于 2015-02-22T00:34:36.870 回答