|
1 |
| -use http::{header::HeaderValue, StatusCode}; |
| 1 | +use http::{header::HeaderValue, StatusCode, version::Version}; |
2 | 2 | use linkerd_errno::Errno;
|
3 | 3 | use linkerd_error::Error;
|
4 | 4 | use linkerd_error_metrics as metrics;
|
@@ -174,13 +174,29 @@ impl<RspB: Default + hyper::body::HttpBody> respond::Respond<http::Response<RspB
|
174 | 174 |
|
175 | 175 | fn respond(&self, res: Result<http::Response<RspB>, Error>) -> Result<Self::Response, Error> {
|
176 | 176 | match res {
|
177 |
| - Ok(response) => Ok(response.map(|b| match *self { |
178 |
| - Respond { is_grpc: true, .. } => ResponseBody::Grpc { |
179 |
| - inner: b, |
180 |
| - trailers: None, |
181 |
| - }, |
182 |
| - _ => ResponseBody::NonGrpc(b), |
183 |
| - })), |
| 177 | + Ok(mut response) => { |
| 178 | + let pseudonym = "linkerd-proxy"; |
| 179 | + let version = match self.version { |
| 180 | + Version::HTTP_10 => "HTTP/1.0", |
| 181 | + Version::HTTP_11 => "HTTP/1.1", |
| 182 | + Version::HTTP_2 => "HTTP/2", |
| 183 | + _ => "" |
| 184 | + }; |
| 185 | + let via_header = HeaderValue::from_str(format!("{} {}", version, pseudonym).as_str()); |
| 186 | + if let Ok(val) = via_header { |
| 187 | + debug!(?val, "via"); |
| 188 | + response.headers_mut().insert(http::header::VIA, val); |
| 189 | + let headers = response.headers(); |
| 190 | + debug!(?headers, "response_headers"); |
| 191 | + } |
| 192 | + Ok(response.map(|b| match *self { |
| 193 | + Respond { is_grpc: true, .. } => ResponseBody::Grpc { |
| 194 | + inner: b, |
| 195 | + trailers: None, |
| 196 | + }, |
| 197 | + _ => ResponseBody::NonGrpc(b), |
| 198 | + })) |
| 199 | + } |
184 | 200 | Err(error) => {
|
185 | 201 | let addr = self
|
186 | 202 | .client
|
@@ -218,11 +234,13 @@ impl<RspB: Default + hyper::body::HttpBody> respond::Respond<http::Response<RspB
|
218 | 234 | }
|
219 | 235 |
|
220 | 236 | let status = http_status(&*error);
|
| 237 | + const SERVER_HEADER: &'static str = concat!("linkerd-proxy/", env!("CARGO_PKG_VERSION")); |
221 | 238 | debug!(%status, version = ?self.version, "Handling error with HTTP response");
|
222 | 239 | Ok(http::Response::builder()
|
223 | 240 | .version(self.version)
|
224 | 241 | .status(status)
|
225 | 242 | .header(http::header::CONTENT_LENGTH, "0")
|
| 243 | + .header(http::header::SERVER, SERVER_HEADER) |
226 | 244 | .body(ResponseBody::default())
|
227 | 245 | .expect("error response must be valid"))
|
228 | 246 | }
|
|
0 commit comments