Различное поведение при перенаправлении на локальном и производственном Astro + Django + Nginx
Я развернул веб-приложение, используя Astro, Django и Nginx. Я тестирую интеграцию со Stripe с помощью Stripe Checkout.
Итак, я создал html-форму:
<form method="post" action=`${baseDomain}users/signup`>
...
</form>
где baseDomain = http://localhost:8000/api/
если в режиме dev и baseDomain = https://example.com/api/
в режиме production.
Конечная точка /users/signup
обрабатывается представлением, которое в итоге вызывает функцию для перенаправления на stripe, подобно примеру в Stripe Checkout.
При тестировании в моей локальной среде он работает отлично, я могу получить доступ к тестовой форме оформления заказа, оплатить товар и быть перенаправленным на мою пользовательскую страницу успеха.
Вот скриншот вкладки Network в моем браузере DevTools:
Однако в производстве я получаю следующую ошибку:
Несмотря на статус OK для страницы Stripe Checkout, браузер выдает GET-запрос обратно к конечной точке формы, что, естественно, приводит к ошибке method not allowed.
Что я могу заметить, так это то, что тип запроса изменился с document на fetch, а цепочка инициаторов не совсем та же.
Вот цепочка инициаторов в моей локальной среде
Это цепочка инициаторов в prod:
Я пробовал перенаправлять только на «https://google.com» и получал ошибку CORS. Это заставляет меня думать, что тип «fetch» отвечает за ошибку при перенаправлении, но я не понимаю, почему это происходит на производстве, а не в моей локальной среде. Более того, Astro развернут в статическом режиме.
Вот моя конфигурация nginx:
root /myproject/frontend/dist;
# Add index.php to the list if you are using PHP
index index.html;
server_name example.com; # managed by Certbot
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location /api {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
После удаления <ViewTransitions />
с затронутой страницы все работает. Я думаю, что это связано с https://github.com/withastro/astro/issues/11301.