如何使用 IP 地址形成 GET HTTP 请求

Vim*_*mzy 2 c sockets networking http http-get

当我在 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
Run Code Online (Sandbox Code Playgroud)

GET 之后的 %s 被替换为如下内容:http://54.236.192.188/index.phpHost 值由 hostent 结构的 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
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

Dan*_*_ds 5

for 的参数GET应该只是资源路径本身,Host头部应该是请求被发送到的机器的域/主机,如原始 URL 所指定的那样。

要 request http://www.wwe.com/index.phpGET请求将如下所示:

GET /index.php HTTP/1.1
Host: www.wwe.com
...
Run Code Online (Sandbox Code Playgroud)

要 request http://54.236.192.188/index.phpGET请求将如下所示:

GET /index.php HTTP/1.1
Host: 54.236.192.188
...
Run Code Online (Sandbox Code Playgroud)

但是,如果服务器在同一 IP 地址上运行多个网站,则无法在请求中提供 IP 地址。该Host头告诉服务器哪些特定网站的访问。

除非需要,否则HTTP/1.1应使用HTTP/1.0. 例如,默认情况下Keep-Alive不支持HTTP/1.0。和Host报头所需的HTTP 1.1。