【问题标题】:Getting 403 Forbidden on VueJS PUT requests在 VueJS PUT 请求上获得 403 Forbidden
【发布时间】:2019-10-03 22:37:57
【问题描述】:

为什么我只在来自 CentOS 7 vps 服务器的 put 请求 API 上收到 403 禁止错误(而 get/post 运行良好)?

同一部分在共享托管服务器上和本地主机上都可以正常工作。

我正在使用“Nginx + Varnish + Apache”

每当我尝试执行任何 PUT 请求时,都会得到以下响应:

禁止 您无权访问此服务器上的 /api/path/to/my/api。

【问题讨论】:

  • PUT、PATCH 等请求在默认情况下不受支持 - 尝试使用 POST/GET(您几乎可以用这些来做同样的事情)。
  • 您可以从您的路线文件中添加一条不起作用的路线吗?
  • 为什么要同时使用3个反向代理?
  • @Namoshek 从 VPS 获得最佳性能。这三者的组合可以提供总服务器的 65%,而 Apache 仅提供 35%。
  • 亲爱的@JCode,您能告诉我为什么默认不支持 PUT、PATCH 吗?不过,我通过 POST 请求调用它们暂时解决了问题。

标签: laravel apache nginx


【解决方案1】:

与 GET 和 POST 不同,您必须明确允许对端点的 PUT 请求。您应该查看您的 .htaccess 设置。 This question addresses the same concernthis also

【讨论】:

  • 谢谢。我也做过,没用。不得不用 POST 解决它!
【解决方案2】:

您必须使用 POST 方法以及 _method= PUT 作为表单数据:

                let editUrl ="";                     
                 if (this.id) {
                        this.data._method = 'PUT';
                        this.data.id = this.id;
                        editUrl = editUrl + "/" + this.id;
                    }

                  axios.post(editUrl, this.data)
                    .then(resp => {

                    })
                    .catch(() => {

                    });
            }

【讨论】:

  • 这是错误的,它只考虑 HTML 表单,因为它们不支持 PUTPATCH。 Ajax 请求和 Laravel do 支持这些 HTTP 方法。
  • 如果你使用 Laravel 资源控制器则不支持。
  • 您是否尝试过从 VueJs 使用它们?我尝试过并遇到了这个问题。从前端你会调用 Post 但实际上它会在后端执行 PUT 方法。 _method=PUT 可以解决问题。
  • @Rakib,我以前做过,效果很好。但是,我想实际调用一个 PUT 方法并想执行它!
【解决方案3】:

通过以下条件配置您的 apache 虚拟主机:

<Limit GET POST PUT OPTIONS>
    Require all granted
</Limit>
<LimitExcept GET POST PUT OPTIONS>
    Require all denied
</LimitExcept>

也许你的问题解决了。

【讨论】:

  • 告诉我你的脚本是由 Apache 还是 Nginx 处理的?
  • 您的 Web 服务器的版本是多少?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 2019-07-17
  • 2018-07-15
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多