Назад | Перейти на главную страницу

Принудительный HTTPS вызывает изменение запроса с POST на GET

Недавно я реализовал следующие настройки виртуального хоста в моем файле apache2.conf:

   # force HTTPS
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteCond %{REQUEST_URI} !^/path1.html
    RewriteCond %{REQUEST_URI} !^/path2.html
    #RewriteCond %{REQUEST_URI} ^/path3.html
    #RewriteCond ${REQUEST_URI} !^/index.html
    RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

Одна из служб, с которой я интегрируюсь, взаимодействует с моей службой с помощью HTTP POST. Однако они заметили, что после реализации этой конфигурации и вызова http: //, когда мой сервер вынуждает выполнять вызов через https, тип запроса изменяется с POST на GET, а сообщения POST отбрасываются. Мне было интересно, есть ли способ обновить этот код, чтобы сохранить исходный метод POST / GET без изменений.

Служба вызовов не работает, но вы мало что можете с этим поделать, если не исправите звонящего. Из RFC 2616:

Примечание. При автоматическом перенаправлении запроса POST после получения кода состояния 301 некоторые существующие пользовательские агенты HTTP / 1.0 по ошибке изменят его на запрос GET.

Ваши варианты:

  • Исправьте вызывающую службу, чтобы она правильно следовала за перенаправлениями.
  • Попросите вызывающую службу использовать URL-адрес https.
  • Не перенаправляйте http на https для этой службы.