Debido a que los formularios HTML no permiten solicitudes HTTP como PUT o DELETE, solo GET y POST, estoy enviando la solicitud PUT utilizando la API de obtención. Y luego estoy redirigiendo la página usando location.assign() con el encabezado Ubicación de la respuesta del servidor 302.
const res = await fetch('https://example.org/test', { method: "PUT", headers: { "Content-Type": "application/json" }, body: JSON.stringify(data) }).catch(err => console.error(err)); if (res.status >= 300 && res.status < 400) { window.location.assign(res.headers.get("Location")); }El problema es que la nueva solicitud redirigida también es una solicitud PUT, mientras que me gustaría que window.location.assign usara una solicitud GET. ¿Por qué usa el verbo HTTP anterior de PUT y cómo puedo evitarlo?
Lo descubrí por mí mismo.
No es que window.location.assign() use el último verbo HTTP. Es que fetch() seguirá automáticamente las redirecciones. Tiene la opciónredirigir la cual tiene como opción por defecto "seguir". No existe una solución bonita para seguir los redireccionamientos con un verbo HTTP diferente, ya que el estado de redireccionamiento básicamente significa que se debe acceder al mismo recurso a través de una URL diferente. Por lo tanto, la mejor solución es dejar que el servidor responda con un estado de 200 Ok y dar instrucciones sobre cómo acceder a la página siguiente. (Acabo de configurar el encabezado de ubicación).