【问题标题】:http 1.1 GET command issuehttp 1.1 GET 命令问题
【发布时间】:2015-02-21 21:16:15
【问题描述】:

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

GET /TestFolder/test.pdf HTTP/1.1\r\n 主机:www.xyz.com\r\n\r\n 文件:test.pdf 位于文件夹:TestFolder at Host: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 访问该文件。

【问题讨论】:

    标签: amazon-s3 get chunked transfer-encoding


    【解决方案1】:

    在请求结束时你需要\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
    

    【讨论】:

    • 谢谢迈克尔。我的存储桶的名称是 TestFolder,由于某种原因它仍然无法正常工作。 GET /TestFolder/test.pdf HTTP/1.1\r\n 主机:s3-us-west-2.amazonaws.com\r\n\r\n
    • 我得到如下命令响应:响应错误:HTTP/1.1 400 Bad Request Transfer-Encoding: chunked
    猜你喜欢
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 2017-07-04
    • 2013-04-20
    • 2020-03-03
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多