Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Некорректное поведение при редиректе 301 #137

Open
Fedos-git opened this issue Apr 2, 2024 · 5 comments

Comments

@Fedos-git
Copy link

При редиректе POST запроса по коду 301 происходит автоматическое перенаправление, но тело запроса и заголовки очищаются. В результате получается некорректный запрос, на который мы получаем малоинформативный, вводящий в заблуждение ответ (400, no body, no content-type и другие). Это сильно затрудняет анализ ошибок.
Предложение - либо не редиректить POST запросы по 301, возвращать код ответа и новый URL, либо редиректить с заголовками и телом.

@leemuar
Copy link
Collaborator

leemuar commented Oct 14, 2024

Это поведение соответствует стандарту, тут нет "некорректного" поведения.

Есть такой стандарт - https://fetch.spec.whatwg.org/#http-redirect-fetch
Там прямо написано: если на POST запрос приходит 301 - необходимо очистить тело и заголовки запроса. А следующий запрос перенаправить либо по POST либо по GET, это разрешено стандартом: https://www.rfc-editor.org/rfc/rfc9110#status.301
Чтобы такого не происходило - серверу надо отдавать 308, а не 301.

Я не уверен что в этом случае нужно менять поведение библиотеки. На каком кейсе вы это нашли? Какой сервис отдает вам 301 на POST запрос?

@Untru
Copy link

Untru commented Nov 21, 2024

у меня етсь запросы к сервисам, если есть расхождения в больших и маленьких буквах срабаотывает 301 при этом в постмене такие запросы отрабатывают корректно, тут - теряется тело запроса

@leemuar
Copy link
Collaborator

leemuar commented Nov 22, 2024

@Untru какие сервисы так делают?

@Untru
Copy link

Untru commented Nov 22, 2024

@leemuar ну просто есть 1с, которая на вход принимает тело запроса, а вторая 1с туда этот запрос кидает, опубликованны они в иис и вот если с первой во вторую я кидаю и не соответсвует регистр - через редирект приходит пустое тело. повторюсь, это же поведение но не с 1с а из postman тело запроса доставляет

@Fedos-git
Copy link
Author

Fedos-git commented Nov 23, 2024

Раз уж подняли тему. Мы периодически сталкиваемся с этой проблемой, когда сервисы переезжают с http на https.
Я не специалист в этом и не знаю, на сколько корректно в этом случае то, что сервер редиректит на https по 301. Но на практике происходит именно так.
В принципе, есть возможность отказаться от автоматического редиректа (ДополнительныеПараметры.РазрешитьПеренаправление), либо проверить, что Ответ.URL отличается от исходного. Но это не очень удобно.
Людей, которые не сталкивались с этой проблемой, такое поведение вводит в ступор. Вот рядом в Постмене все работает, а при вызове через библиотеку - 400.
Да и непонятно, зачем такой редирект POST без тела? Он практически никогда не сработает корректно.

А если уж хочется, чтобы работало по приведенному выше стандарту, то и метод нужно менять на GET:

If one of the following is true
internalResponse’s [status] is 301 or 302 and request’s [method] is POST
...
then:
Set request’s [method] to GET and request’s [body] to null.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants