当我在C中使用下面的GET HTTP请求时,我不断得到400 Bad Request
,但是当我使用字符串字符IP地址时它会起作用(例如:www.wwe.com/index.php):
GET %s HTTP/1.0\r\nHost: %s\r\nConnection: Keep-Alive\r\n\r\n
GET之后的%s被替换为这样的内容:http://54.236.192.188/index.php
,主机值由hostent struct的h_name字符串值提供。
所以请求看起来像这样:
GET http://54.236.192.188/index.php HTTP/1.0
Host: ec2-54-236-192-188.compute-1.amazonaws.com
Connection: Keep-Alive
我在这里做错了什么?
答案 0 :(得分:4)
GET
的参数应该只是资源路径本身,Host
标头应该是发送请求的计算机的域/主机,由原始指定URL。
要请求http://www.wwe.com/index.php
,GET
请求将如下所示:
GET /index.php HTTP/1.1
Host: www.wwe.com
...
要请求http://54.236.192.188/index.php
,GET
请求将如下所示:
GET /index.php HTTP/1.1
Host: 54.236.192.188
...
但是,如果服务器在同一IP地址上运行多个网站,则无法在rquest中提供IP地址。 Host
标题告诉服务器要访问哪个特定网站。
除非需要,否则应使用HTTP/1.1
代替HTTP/1.0
。例如,Keep-Alive
默认情况下不支持HTTP/1.0
。 HTTP 1.1需要Host
标头。