Solicitud POST no permitida – 405 No permitida – nginx, incluso con encabezados incluidos

Tengo un problema al intentar hacer una solicitud POST en mi aplicación y busqué mucho, pero no encontré la solución.

Entonces, tengo una aplicación nodeJS y un sitio web, y estoy tratando de hacer una solicitud POST usando un formulario de este sitio, pero siempre termino en esto:

enter image description here

y en la consola veo:

Uncaught TypeError: Cannot read property 'value' of null Post "http://name.github.io/APP-example/file.html " not allowed 

eso está en esta línea de código:

file.html:

 

file.js:

 function sendInvitation(){ var teammateEmail= document.getElementById("email").value; 

Leí muchas publicaciones y una documentación de dominio cruzado, pero no funcionó. fuente de investigación 1: http://enable-cors.org/server.html fuente de investigación 2: http://www.w3.org/TR/2013/CR-cors-20130129/#http-access-control-max- años

Lo que estoy haciendo ahora

Estoy intentando PUBLICAR desde un dominio diferente de mi servidor:

PETICIÓN POSTAL: http://name.github.io/APP-example/file.html , repository github

POST LISTENER: ” http: //xxx.xxx.x.xx: 9000 / email , servidor localhost (x-> mi dirección IP)

Entonces, tuve el mismo problema en otros archivos, pero lo arreglé poniendo este código al inicio de cada ruta:

 var express = require('express'); var sha1 = require('sha1'); var router = express.Router(); var sessionOBJ = require('./session'); var teams = {} var teamPlayers = [] router.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); res.header("Access-Control-Allow-Methods", "PUT, GET,POST"); next(); }); 

y lo arreglé haciéndolo.

Ahora, tengo el mismo problema, pero en este archivo la única diferencia es que trato con SMTP y correos electrónicos, así que publico un correo electrónico y envío un correo electrónico a este correo electrónico que recibí en la solicitud POST.

El código funciona perfectamente con POSTMAN, por lo tanto, cuando pruebo con POSTMAN, funciona y puedo publicar.

Incluí este código a continuación en lugar del primero que mostré, pero no funcionó tan bien:

 router.all('*', function(req, res, next){ res.header("Access-Control-Allow-Origin", "*") res.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS") res.header("Access-Control-Allow-Headers", "Origin, Content-Type, Accept") res.header("Access-Control-Max-Age", "1728000") next(); }); 

¿Alguien sabe cómo resolverlo?

Gracias.

Esta configuración para su nginx.conf debería ayudarlo.

https://gist.github.com/baskaran-md/e46cc25ccfac83f153bb

 server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 404 /404.html; error_page 403 /403.html; # To allow POST on static pages error_page 405 =200 $uri; # ... } 

Esta es la redirección de proxy real para el servidor deseado.

 server { listen 80; server_name localhost; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_pass http://xx.xxx.xxx.xxx/; proxy_redirect off; proxy_set_header Host $host; } } 

Me di cuenta de que esto no funcionaba con una configuración de proxy estático primero-luego-inverso. Esto es lo que parece:

 location @app { proxy_pass http://localhost:3000$request_uri; } location / { try_files $uri $uri/ @app; error_page 405 @app; } 

He intentado la solución que redirige 405 a 200, y en el entorno de producción (en mi caso, es Google Load Balancing con contenedor Nginx Docker), este truco provoca unos 502 errores (Código de error de Google Load Balancing: backend_early_response_with_non_error_status).

Al final, he hecho que esto funcione correctamente al reemplazar Nginx con OpenResty, que es completamente compatible con Nginx y tiene más complementos.

Con ngx_coolkit , Now Nginx (OpenResty) podría servir archivos estáticos con solicitud POST correctamente, aquí está el archivo de configuración en mi caso:

 server { listen 80; location / { override_method GET; proxy_pass http://127.0.0.1:8080; } } server { listen 8080; location / { root /var/www/web-static; index index.html; add_header Cache-Control no-cache; } } 

En la configuración anterior, utilizo override_method ofrecido por ngx_coolkit para anular el método HTTP para GET .