我发现“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
。
我想知道是否可以严格匹配所有路线,包括方法?
答案 0 :(得分:1)
这是因为您没有指定请求的内容类型。
根据规范,您可以使用GET
将POST
请求编码为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方法并获取正确的映射。