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.php
Host 值由 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)
我在这里做错了什么?
for 的参数GET
应该只是资源路径本身,Host
头部应该是请求被发送到的机器的域/主机,如原始 URL 所指定的那样。
要 request http://www.wwe.com/index.php
,GET
请求将如下所示:
GET /index.php HTTP/1.1
Host: www.wwe.com
...
Run Code Online (Sandbox Code Playgroud)
要 request http://54.236.192.188/index.php
,GET
请求将如下所示:
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。