From 6cda4ba8bd746f392b0ff978e0c69b8a4e5840bb Mon Sep 17 00:00:00 2001 From: Qian Sun Date: Fri, 6 Jan 2017 11:25:22 -0800 Subject: [PATCH 1/4] Handle HEAD request. --- contrib/endpoints/src/api_manager/context/service_context.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/contrib/endpoints/src/api_manager/context/service_context.cc b/contrib/endpoints/src/api_manager/context/service_context.cc index b9f753f0625..fbb0d85e0b9 100644 --- a/contrib/endpoints/src/api_manager/context/service_context.cc +++ b/contrib/endpoints/src/api_manager/context/service_context.cc @@ -74,6 +74,9 @@ MethodCallInfo ServiceContext::GetMethodCallInfo( if (config_ == nullptr) { return MethodCallInfo(); } + if (http_method == "HEAD") { + return config_->GetMethodCallInfo("GET", url, query_params); + } return config_->GetMethodCallInfo(http_method, url, query_params); } From 4d222d090e66fc7f10a7b7d2e634dc6668d9e50d Mon Sep 17 00:00:00 2001 From: Qian Sun Date: Thu, 12 Jan 2017 15:17:17 -0800 Subject: [PATCH 2/4] Try with GET if HEAD fails. --- .../endpoints/src/api_manager/context/service_context.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/contrib/endpoints/src/api_manager/context/service_context.cc b/contrib/endpoints/src/api_manager/context/service_context.cc index fbb0d85e0b9..8a9d1ef3ca6 100644 --- a/contrib/endpoints/src/api_manager/context/service_context.cc +++ b/contrib/endpoints/src/api_manager/context/service_context.cc @@ -74,10 +74,12 @@ MethodCallInfo ServiceContext::GetMethodCallInfo( if (config_ == nullptr) { return MethodCallInfo(); } - if (http_method == "HEAD") { - return config_->GetMethodCallInfo("GET", url, query_params); + MethodCallInfo method_call_info = + config_->GetMethodCallInfo(http_method, url, query_params); + if (method_call_info.method_info == nullptr && http_method == "HEAD") { + method_call_info = config_->GetMethodCallInfo("GET", url, query_params); } - return config_->GetMethodCallInfo(http_method, url, query_params); + return method_call_info; } const std::string& ServiceContext::project_id() const { From 4eb12089a7bb3e7bbfcff418eea627637d236f0d Mon Sep 17 00:00:00 2001 From: Qian Sun Date: Thu, 12 Jan 2017 16:07:21 -0800 Subject: [PATCH 3/4] Address comments. --- .../src/api_manager/context/service_context.cc | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/contrib/endpoints/src/api_manager/context/service_context.cc b/contrib/endpoints/src/api_manager/context/service_context.cc index 8a9d1ef3ca6..a8359e095e9 100644 --- a/contrib/endpoints/src/api_manager/context/service_context.cc +++ b/contrib/endpoints/src/api_manager/context/service_context.cc @@ -41,6 +41,10 @@ const double kDefaultTraceSampleQps = 0.1; // The time window to send intermediate report for Grpc streaming (second). // Default to 10s. const int kIntermediateReportInterval = 10; + +const char kHTTPHeadMethod[] = "HEAD"; +const char kHTTPGetMethod[] = "GET"; + } ServiceContext::ServiceContext(std::unique_ptr env, @@ -76,8 +80,11 @@ MethodCallInfo ServiceContext::GetMethodCallInfo( } MethodCallInfo method_call_info = config_->GetMethodCallInfo(http_method, url, query_params); - if (method_call_info.method_info == nullptr && http_method == "HEAD") { - method_call_info = config_->GetMethodCallInfo("GET", url, query_params); + // HEAD should be treated as GET unless it is specified from service_config. + if (method_call_info.method_info == nullptr && + http_method == kHTTPHeadMethod) { + method_call_info = + config_->GetMethodCallInfo(kHTTPGetMethod, url, query_params); } return method_call_info; } From 8a42df97d26d5bd370bc6c72d21fac506e7b85e7 Mon Sep 17 00:00:00 2001 From: Qian Sun Date: Thu, 12 Jan 2017 21:12:10 -0800 Subject: [PATCH 4/4] Format file. --- contrib/endpoints/src/api_manager/context/service_context.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/contrib/endpoints/src/api_manager/context/service_context.cc b/contrib/endpoints/src/api_manager/context/service_context.cc index a8359e095e9..d8fc9dfc409 100644 --- a/contrib/endpoints/src/api_manager/context/service_context.cc +++ b/contrib/endpoints/src/api_manager/context/service_context.cc @@ -44,7 +44,6 @@ const int kIntermediateReportInterval = 10; const char kHTTPHeadMethod[] = "HEAD"; const char kHTTPGetMethod[] = "GET"; - } ServiceContext::ServiceContext(std::unique_ptr env,