在Openshift上调用时,Http DELETE端点丢失正文数据

时间:2017-07-03 23:16:30

标签: http flask openshift http-delete

我在Openshift上运行的服务中添加了v1/health_check个端点。端点接受所有http谓词并返回请求中的内容。

例如,运行: curl -X DELETE -G 'http://localhost:8080/v1/health_check' -F "user_id=1" -F "build_category_id=14" -F "notification_type=slack" 在本地运行时对服务返回:

{
  "endpoint": "/v1/health_check", 
  "form_data": {
    "build_category_id": "14", 
    "notification_type": "slack", 
    "user_id": "1"
  }, 
  "http_method": "DELETE", 
  "request_data": {}
}

当我在Openshift上运行时对服务使用相同的curl请求时,我得到:

{
  "endpoint": "/v1/health_check", 
  "form_data": {}, 
  "http_method": "DELETE", 
  "request_data": {}
}

有没有人有任何想法为什么DELETE方法的主体在Openshift中迷失了?

其他说明:

  • 这是使用gevent.wsgi WSGIServer
  • 的烧瓶服务
  • 经过一些研究后我也承认这不是最RESTful的方法,特别是在阅读Is an entity body allowed for an HTTP DELETE request?之后
  • 当我踩到Openshift pod并卷曲服务时,端点按预期工作,这意味着实体正在通过。

1 个答案:

答案 0 :(得分:1)

不要同时使用-X DELETE-G选项。 -G选项表示使用HTTP GET。 -X DELETE表示使用DELETE作为HTTP方法。

我在MacOS X上的测试表明,使用两种混淆curl,导致它实际上没有发送请求内容。

$ curl -v --request DELETE -G --data xxx http://.../
*   Trying 52.87.56.37...
* Connected to ... (52.87.56.37) port 80 (#0)
> DELETE /?xxx HTTP/1.1
> Host: ...
> User-Agent: curl/7.43.0
> Accept: */*
>
< HTTP/1.1 200 OK
...