2017-07-03 47 views
0

我在Openshift上运行的服务中添加了v1/health_check端点。端点接受所有http动词并返回请求中的内容。当在Openshift上调用时,Http DELETE端点丢失主体数据

例如,运行: 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运行服务的同一卷曲的要求,我得到:

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

有没有人有任何想法为什么DELETE方法的身体在Openshift中迷路?

其他说明:

  • 它使用gevent.wsgiWSGIServer
  • 我也有一些研究,这是不是最RESTful方法,经过确认的烧瓶服务尤其是阅读Is an entity body allowed for an HTTP DELETE request?
  • 当我的rsh到后Openshift pod和卷曲服务,端点按预期工作,这意味着实体正在通过。
+1

尝试来自应用程序内部的curl请求,以便您不需要通过路由图层。使用''oc rsh''获得一个交互式shell,或者使用web控制台来获取终端。 –

+0

好点!我在Openshift节点内尝试过,删除请求能够通过。 – NateW

+0

我认为http探测仅限于GET请求。也许可以尝试使用命令exec方法,在[docs](https://docs.openshift.org/latest/dev_guide/application_health.html#container-health-checks-using-probes)中演示。 – brennan

回答

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 
...