Требуется ли `Host` в запросе HTTP GET?
Следующий пример показывает, что Host:
должен быть указан. Это продиктовано протоколом HTTP для запроса GET или это просто нестандартная функция с http://httpbin.org/? Благодарю.
$ netcat --version
netcat (The GNU Netcat) 0.7.1
Copyright (C) 2002 - 2003 Giovanni Giacobbi
This program comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of this program under the terms of
the GNU General Public License.
For more information about these matters, see the file named COPYING.
Original idea and design by Avian Research <hobbit@avian.org>,
Written by Giovanni Giacobbi <giovanni@giacobbi.net>.
$ sed 's/$/\r/g' <<EOF | netcat -v httpbin.org 80
GET /get HTTP/1.1
Host:httpbin.org
EOF
httpbin.org [23.23.241.244] 80 (http) open
HTTP/1.1 200 OK
Connection: keep-alive
Server: meinheld/0.6.1
Date: Fri, 09 Feb 2018 14:41:39 GMT
Content-Type: application/json
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
X-Powered-By: Flask
X-Processed-Time: 0.000858068466187
Content-Length: 157
Via: 1.1 vegur
{
"args": {},
"headers": {
"Connection": "close",
"Host": "httpbin.org"
},
"origin": "165.91.87.88",
"url": "http://httpbin.org/get"
}
$ sed 's/$/\r/g' <<EOF | netcat -v httpbin.org 80
GET /get HTTP/1.1
EOF
httpbin.org [54.225.64.197] 80 (http) open
HTTP/1.1 400 Bad Request
Connection: close
Server: Cowboy
Date: Fri, 09 Feb 2018 14:42:33 GMT
Content-Length: 0
1 ответ
Краткий ответ, зависит от протокола.
На практике, если вы не укажете "HOST", что может произойти (в зависимости от того, настроен ли веб-сервер nginx/apache/hiawatha и т. Д.), Вы можете либо получить содержимое с хоста по умолчанию, либо с хоста, настроенного для приема / отправки запроса от IP.
Вы можете проверить с помощью:
echo -en "GET / HTTP/1.0\n\n\n" | nc stackru.com 80
Вот это может быть вывод:
HTTP/1.1 500 Domain Not Found
Server: Varnish
Retry-After: 0
content-type: text/html
Cache-Control: private, no-cache
connection: keep-alive
X-Served-By: cache-hhn1546-HHN
Content-Length: 220
Accept-Ranges: bytes
Date: Sat, 07 Apr 2018 20:45:56 GMT
Via: 1.1 varnish
Connection: close
<html>
<head>
<title>Fastly error: unknown domain </title>
</head>
<body>
<p>Fastly error: unknown domain: . Please check that this domain has been added to a service.</p>
А теперь добавив хост:
echo -en "GET / HTTP/1.0\nHost: stackru.com\n\n" | nc stackru.com 80
или используя HTTP/1.1
(который требует указывать хост)
echo -en "GET / HTTP/1.1\nHost: stackru.com\n\n" | nc stackru.com 80
Вы увидите / получите ответ:
HTTP/1.1 301 Moved Permanently
...