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)
我在这里做错了什么?
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。
| 归档时间: |
|
| 查看次数: |
9521 次 |
| 最近记录: |