В новом приложении Phoenix присутствует по умолчанию Plug.Head
, и я был заинтригован его значением.Почему полезно преобразовывать запросы HEAD в GET-запросы?
Я знаю, что «the HEAD method is identical to GET except that the server MUST NOT send a message body in the response».
Я думаю, что official Phoenix guides являются первосортный, но это бросил меня в Routing guide:
Plug.Head - преобразует запросы ГОЛОВЫ, чтобы получить запросы и раздевает тело
ответа Если Запросы HEAD без тела, тогда зачем это нужно? Я подумал, что, возможно, обуздать искаженные запросы, но глядя на Plug.Head implementation, он просто переключает метод HEAD на GET.
def call(%Conn{method: "HEAD"} = conn, []), do: %{conn | method: "GET"}
def call(conn, []), do: conn
end
Ближайший вещь, которую я смог найти по этой теме является question on ServerFault, но это было связано с NGINX и порочной логики приложения, где запросы HEAD, необходимых для преобразования в GET и соответствующие ответы Вернись к HEAD.
Благодарим за подключение адаптеров! Хотя цитируемый комментарий является либо неточным, либо я еще далек от большой картины, потому что я как бы пропускаю слово «** body **» от «адаптер не должен отправлять ответ ** body ** клиенту». Ответ отправляется независимо от метода запроса, только тело исключается из ответа на HEAD. Но опять же я, возможно, неправильно истолковываю, как работают адаптеры. –
Правильный ответ. Серверы не должны отправлять тело в ** ответ ** на запрос HEAD ** **. Не имеет значения, имеет ли сам запрос HEAD ** ** тело. –