Saltar al contenido

App Script envía una respuesta 405 cuando intenta enviar una solicitud POST

Solución:

Te perdiste la parte importante:

Respuesta para verificación previa tiene un código de estado HTTP no válido 405.

Su navegador está realizando una solicitud de verificación previa, que utiliza el OPTIONS Método HTTP. Esto es para comprobar si el servidor permitirá POST solicitud – el 405 El código de estado se envía en respuesta al OPTIONS solicitud, no tu POST solicitud.

Una solicitud de verificación previa de CORS es una solicitud de CORS que verifica si se entiende el protocolo CORS. Fuente


Además, para los métodos de solicitud HTTP que pueden causar efectos secundarios en los datos del servidor (en particular, para los métodos HTTP distintos de GET, o por POST uso con ciertos tipos MIME), la especificación exige que los navegadores realicen una “verificación previa” de la solicitud, solicitando métodos admitidos del servidor con un HTTP OPTIONS método de solicitud y luego, tras la “aprobación” del servidor, enviar la solicitud real con el método de solicitud HTTP real. Fuente


Algunas solicitudes no activan una verificación previa de CORS. En este artículo, se denominan “solicitudes simples”. […] Fuente
Esta sección de artículo detalla las condiciones que debe cumplir una solicitud para ser considerada una “solicitud simple”.


[…] Las solicitudes “preflight” envían primero una solicitud HTTP por el OPTIONS método al recurso en el otro dominio, para determinar si la solicitud real es segura para enviar. Las solicitudes entre sitios se revisan previamente de esta manera, ya que pueden tener implicaciones en los datos del usuario. Fuente
Esta sección de artículo detalla las condiciones que hacen que una solicitud tenga una verificación previa.

En este caso, lo siguiente está causando que la solicitud tenga una verificación previa:

[…] si los Content-Type El encabezado tiene un valor diferente al siguiente:

  • application/x-www-form-urlencoded
  • multipart/form-data
  • text/plain

El valor de la Content-Type el encabezado está configurado en application/json;charset=utf-8 por axios. Utilizando text/plain;charset=utf-8 o text/plain soluciona el problema:

axios({
    method: 'post',
    url: 'https://script.google.com/macros/s/AKfycbzyc2CG9xLM-igL3zuslSmNY2GewL5seTWpMpDIQr_5eCod7_U/exec',
    data: {
        title: 'Fred',
        lastName: 'Flintstone',
    },
    headers: {
        'Content-Type': 'text/plain;charset=utf-8',
    },
}).then(function (response) {
    console.log(response);
}).catch(function (error) {
    console.log(error);
});

Creo que necesitas devolver datos JSON. Es posible que necesite devolver JSONP a una solicitud desde un navegador, pero esto es lo que creo que debe hacer:

return ContentService.createTextOutput(JSON.stringify({message: MyResponse})).setMimeType(ContentService.MimeType.JSON);

Si eso no funciona, es probable que deba devolver JSONP para que se ejecute en el navegador. Aquí hay algo de documentación para ayudarlo: https://developers.google.com/apps-script/guides/content#serving_jsonp_in_web_pages

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *