为什么Golang grpc-gateway的GET路由匹配POST请求?

时间:2017-08-27 03:18:19

标签: rest go

我发现“get”路由将匹配HTTP GET和HTTP POST请求。 例如:

DetailPage

它匹配rpc aaa(User) returns (User) { option (google.api.http) = { get: "/api/v1/aaa" }; curl -v -X GET -k https://127.0.0.1/api/v1/aaa

我想知道是否可以严格匹配所有路线,包括方法?

1 个答案:

答案 0 :(得分:1)

简短回答

这是因为您没有指定请求的内容类型。

长答案

根据规范,您可以使用GETPOST请求编码为Content-Type: application/x-www-url-encoded方法。

因此,当您的请求的内容类型为POST时,grpc-gateway中的请求路由表会尝试从GET方法回退到application/x-www-url-encoded

REF。 https://groups.google.com/d/msg/grpc-io/Xqx80hG0D44/1gwmwBcnNScJ

  

"(注意)URL有长度限制(go / more-urls)。它受到一些浏览器和代理的影响。如果您的GET请求超出限制,浏览器可能拒绝发送它们。您可以更改为使用内容类型为application / x-www-form-urlencoded的POST请求。如果POST + URL已经映射到另一个后端函数,您应该添加" X-HTTP-Method-Override:GET" header以覆盖HTTP方法并获取正确的映射。