来自REST控制台的POST被服务器视为GET

时间:2015-09-15 08:40:30

标签: symfony nginx

我使用chrome REST API控制台和Postman向我的服务器发送帖子请求(运行nginx和symfony2)

这是一个非常简单的请求,只需发布​​到一个空主体的URL。如果此请求通过HTTP请求从另一台服务器运行,它将注册为POST。尝试从api控制台POST注册为我的nginx访问日志中的GET,并返回不允许的405方法。

如果我使用curl,我最初会获得301 Moved Permanently,所以我必须使用-L来跟踪重定向。我不确定这是标准的Symfony还是影响请求。

我发现curl请求存在一些问题,但我不确定如何解决这些问题。

$ curl -v -L -d "1EepG1a63X" xxx.io/api/convert_mov/
*   Trying xx.76.9.82...
* Connected to xxx.io (xx.76.9.82) port 80 (#0)
> POST /api/convert_mov/ HTTP/1.1
> Host: xxx.io
> User-Agent: curl/7.43.0
> Accept: */*
> Content-Length: 10
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 10 out of 10 bytes
< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.6.2
< Date: Tue, 15 Sep 2015 09:00:43 GMT
< Content-Type: text/html
< Content-Length: 184
< Connection: keep-alive
< Location: https://xxx.io/api/convert_mov/
<
* Ignoring the response-body
* Connection #0 to host xxx.io left intact
* Issue another request to this URL: 'https://xxx.io/api/convert_mov/'
* Switch from POST to GET
* Found bundle for host xxx.io: 0x7fcad9c14e70
*   Trying xx.76.9.82...
* Connected to xxx.io (xx.76.9.82) port 443 (#1)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
* Server certificate: xxx.io
* Server certificate: DigiCert SHA2 Secure Server CA
* Server certificate: DigiCert Global Root CA
> GET /api/convert_mov/ HTTP/1.1
> Host: xxx.io
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Server: nginx/1.6.2
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< X-Powered-By: PHP/5.5.25
< Cache-Control: no-cache
< Date: Tue, 15 Sep 2015 09:00:43 GMT

2 个答案:

答案 0 :(得分:2)

如果您仔细观察,您会看到您的请求是使用HTTP。然后,您的服务器会将重定向发送到您的HTTPS站点。并且301重定向不保留请求方法。您必须正确地针对HTTPS发出所有请求。

答案 1 :(得分:-1)

看起来这可以通过some extra curl options修复,但对控制台没有帮助。

curl -L -XPOST http://example.com/some-form-handler
  

诀窍是-X参数告诉curl总是使用   指定的HTTP方法。要让curl从POST切换到GET,你   需要使curl隐式执行POST,例如使用-d标志。

所以我的最终请求使用-L来跟踪重定向,-d用于数据,-XPOST强制POST通过重定向:

curl -L -d "1EepG1a63X" -XPOST xxx.io/api/convert_mov