Когда вы можете иметь относительные URL в строке запроса GET http запросов? - PullRequest
0 голосов
/ 03 октября 2018

Я попробовал следующий запрос:

GET index.htm HTTP/1.1
connection: close
host: example.com
content-length: 0

, но получил 400 Bad Request.Зачем?Сервер должен иметь возможность собрать абсолютный URL: http://example.com/index.htm.Почему это жалуется?Нужен ли заголовок реферера для использования относительных URL в строке запроса?

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Я нашел ответ: если URL в строке запроса не является абсолютным, это должен быть абсолютный путь.Это означает, что вы можете опустить протокол и имя хоста, но не указывать ни одной части пути.Работали следующие:

GET /index.htm HTTP/1.1
connection: close
host: example.com
content-length: 0
0 голосов
/ 04 октября 2018

Короткий ответ

Нельзя использовать относительный путь, поскольку для спецификации HTTP ( RFC7230 ) необходимо использовать абсолютный путь.

Объяснение

Если вы просто ссылаетесь на HTTP-спецификацию, легко выяснить, почему ваш запрос получил 400 Bad Request ответ: он нарушает спецификацию. RFC7230 определяет, что в вашем сценарии цель запроса должна использовать так называемую origin-форму, которая требует абсолютного пути:

origin-form = absolute-path [ "?" query ]

Например, HTTP-запрос для http://example.org/where?q=now будетбыть:

GET /where?q=now HTTP/1.1
Host: example.org

Если путь пуст, например http://example.org, HTTP-запрос будет:

GET / HTTP/1.1
Host: example.org

Это связано с тем, что абсолютный путь требуется, как описано в Раздел 5.3.1 следующим образом (выделено мной):

При отправке запроса непосредственно на сервер источника, отличного от запроса OPNS CONNECT или общесерверного сервера (как подробно описано ниже),клиент ДОЛЖЕН отправить только абсолютный путь и компоненты запроса целевого URI в качестве запроса-цели.

0 голосов
/ 04 октября 2018

Я думаю, в этой строке GET index.htm HTTP/1.1 отсутствует 'l' на index.html.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...