Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

POST request not allowed - 405 Not Allowed - nginx, even with headers included

I have a problem in trying to do a POST request in my application and I searched a lot, but I did not find the solution.

So, I have a nodeJS application and a website, and I am trying to do a POST request using a form from this site, but I always end up in this:

enter image description here

and in the console I see :

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

that is in this line of code :

file.html:

<form id="add_Emails" method ="POST" action="">      <textarea rows="5" cols="50" name="email">Put the emails here...     </textarea>          <p>         <INPUT type="submit" onclick="sendInvitation()" name='sendInvitationButton' value ='Send Invitation'/>         </p>   </form>  <script src="scripts/file.js"></script> 

file.js:

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

I read many post and a documentation of cross domain but it did not work. research source 1:http://enable-cors.org/server.html research source 2: http://www.w3.org/TR/2013/CR-cors-20130129/#http-access-control-max-age

What I am doing now:

I am trying to POST from a different domain of my server :

POST REQUEST : http://name.github.io/APP-example/file.html , github repository

POST LISTENER : "http://xxx.xxx.x.xx:9000/email , server localhost ( x-> my ip address)

So, I had the same problem in other files, but I fixed it putting this code in the begginning of each route:

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();  }); 

and I fixed it doing it.

Now, I am having the same problem, but in this file the only difference is that I deal with SMTP and emails, so I post an email and send an Email to this email I received in the POST request.

THe code is working totally fine with POSTMAN, so, when I test with POSTMAN it works and I can post.

I included this code below instead of the first one I showed but it did not work as well:

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();         }); 

Does someone know how to solve it?

Thank you.

like image 665
AndBecaPine Avatar asked Jun 25 '14 17:06

AndBecaPine


People also ask

What is 405 not allowed Nginx?

The HyperText Transfer Protocol (HTTP) 405 Method Not Allowed response status code indicates that the server knows the request method, but the target resource doesn't support this method.

Where is Nginx config file located?

By default, the configuration file is named nginx. conf and placed in the directory /usr/local/nginx/conf , /etc/nginx , or /usr/local/etc/nginx .

Where is Nginx config Linux?

Every NGINX configuration file will be found in the /etc/nginx/ directory, with the main configuration file located in /etc/nginx/nginx.


1 Answers

This configuration to your nginx.conf should help you.

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;      # ... } 
like image 100
Baskar Avatar answered Sep 22 '22 09:09

Baskar