我可以使用下面的get命令下载一个test.pdf文件,其中包含我在C中用于微控制器与服务器通信的代码:
GET /TestFolder/test.pdf HTTP / 1.1 \ r \ n主持人:www.xyz.com \ r \ n \ r \ n 文件:test.pdf位于Host:xyz.com
的文件夹:TestFolder中我想在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访问该文件。
答案 0 :(得分:0)
请求结束时需要\r\n
两次,否则服务器会认为它正在等待更多标头。这里的问题是你没有指定存储桶,你可以在路径或Host:
标题中进行操作......你必须在一个或另一个中,但不是两个都这样做。< / p>
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