POST 方法在 npm http-server 上抛出错误 405

Posted

技术标签:

【中文标题】POST 方法在 npm http-server 上抛出错误 405【英文标题】:POST method throws error 405 on npm http-server 【发布时间】:2017-02-02 11:47:45 【问题描述】:

我正在尝试发出 Ajax 请求以在本地 http 服务器上运行 php 文件。我在浏览器控制台中收到Error 405: method not allowed

我尝试了一些类似问题的答案,但无济于事。我正在使用 npm http-server 来托管它。我已经尝试在 http-server 上启用 CORS,但这并不能解决问题。

我可以将我的问题缩小到以下代码(使用给出的答案here)。

/test.html:

<html>
    <head>
        <title>Button</title>
        <meta charset="utf-8">
        <!-- jQuery -->
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>  
    </head>
    <body>
        <button type="button">Click Me</button>
        <p></p>
        <script type="text/javascript">
            $(document).ready(function()
                $("button").click(function()
                    $.ajax(
                        method: 'POST',
                        url: 'echo.php',
                        success: function(data) 
                            alert(data);
                            $("p").text(data);

                        
                    );
                );
            );
        </script>
    </body>
</html>

/echo.php:

<?php
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
    header('Access-Control-Allow-Headers: Content-Type, Accept');
    echo "HELLO WORLD";
?>

我使用来自npmhttp-server 启动服务器。当我尝试发出 POST 请求(即单击按钮)时,我在服务器日志中收到以下错误:

[...] "POST /echo.php" Error (404): "Not found"

echo.php 文件肯定存在——我可以向同一个 url 发出 GET 请求。我还在浏览器控制台中看到以下错误:

POST http://127.0.0.1:8080/echo.php 405 (Method Not Allowed)
    send @ jquery.min.js:4
    ajax @ jquery.min.js:4
    (anonymous function) @ test.html:15
    dispatch @ jquery.min.js:3
    q.handle @ jquery.min.js:3

当我发出GET 请求时,没有出现任何错误,并且正如我所料,echo.php 的代码放在&lt;p&gt; 内。

这是我的服务器配置问题还是只是代码问题?

更新 1:

我无法从 http-server 获得太多信息。这是包含执行命令的完整日志:

$ http-server --cors -p 8080

Starting up http-server, serving ./
Available on:
  http://127.0.0.1:8080
Hit CTRL-C to stop the server
[Sat Sep 24 2016 16:47:14 GMT-0400 (EDT)] "GET /test.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36"
[Sat Sep 24 2016 16:47:19 GMT-0400 (EDT)] "POST /echo.php" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36"
[Sat Sep 24 2016 16:47:19 GMT-0400 (EDT)] "POST /echo.php" Error (404): "Not found"

更新 2

http-server 毕竟不支持POST 请求。答案见下文...

【问题讨论】:

当您尝试 Access-Control-Allow-Methods:* 时会发生什么? 我应该打印一些http-server的日志吗?我感觉是服务器配置问题。 是的,我认为这会有所帮助 当我将它设置为通配符时,我看到了同样的问题。 @HansGerber - 就日志而言,我无法从 http-server 中获得太多信息。 This page 概述了默认设置。我希望能提供更多信息。 【参考方案1】:

我想通了!有点愚蠢,但希望这对遇到此问题的其他人有所帮助。我正在查看http-server 回购并遇到以下GitHub issue。

npm http-server 不支持 POST 请求。它是一个只读服务器,因此没有代码来促进这种类型的请求。

我现在正在研究JSON-server,它确实支持POST 请求。

【讨论】:

我遇到了同样的问题。那谢谢啦!我现在尝试了 json-server,但是当我想POST 时得到 404。你有同样的问题吗? 非常感谢!我失去了昨天的一切,以为它在我身边!但是,在尝试 JSON 服务器时,我也会收到 404 Not Found。看起来我可能不得不使用成熟的 XAMPP,即使它完全满足我的需求。

以上是关于POST 方法在 npm http-server 上抛出错误 405的主要内容,如果未能解决你的问题,请参考以下文章

NPM搭建服静态务器 http-server

npm http-server 下载 index.html 而不是服务

通过终端提供 npm http-server 时出错。 (错误 404)

如何禁止与 http-server npm 的不安全连接?

完美解决http-server 不是内部或外部命令

node.js的安装以及http-server