2017-10-25 16 views
0

내 웹 API에서 POST 요청을 풍부하게하고 다른 URL로 전달하고 있습니다. 포스트맨은 포스트 요청을하는 데 사용됩니다.HttpRequest에서 호스트 헤더를 변경하면 서버 응답에 영향을 미칩니 까?

동작 : 요청이 지불 서버로 전달됩니다 http://private.store.internal/api/pay

에 POST. 테스트를 위해 내가 지정 "www.google.com"는 요청이 전달되어야하는 URL로

var newRequest = new HttpRequestMessage(HttpMethod.Post, request.DesiredDestination); 
var response = await httpClient.SendAsync(newRequest, cancellation); 

(물론 POST 요청에 아무것도 할 수없는) 나는 "newRequest"변수 헤더를 검사 할 때 컬렉션에는 URL의 값을 보유하고있는 "호스트"필드가 포함되어 있습니다.이 필드에는 내 API가 호스팅되는 fe

private.store.internal 

이것은 예상대로 구글 서버에서 반환 된 헤더는 다음과 같습니다

이제
"responseHeaders": [ 
     { 
      "key": "Referrer-Policy", 
      "value": [ "no-referrer" ] 
     }, 
     { 
      "key": "Alt-Svc", 
      "value": ["quic=\":443\"; ma=2592000; v=\"41,39,38,37,35\""] 
     }, 
     { 
      "key": "Date", 
      "value": ["Wed, 25 Oct 2017 12:15:57 GMT" ] 
     }, 
     { 
      "key": "Content-Length", 
      "value": ["1561"] 
     }, 
     { 
      "key": "Content-Type", 
      "value": ["text/html; charset=UTF-8"] 
     } 
    ], 
    "content": "<!DOCTYPE html>\n<html lang=en>\n <meta charset=utf-8>\n <meta name=viewport content=\"initial-scale=1, minimum-scale=1, width=device-width\">\n <title>Error 404 (Not Found)!!1</title>\n <style>\n... 

내가 API는 (실제) 지불 서버에 호스팅 된 정보를 전달하지 않으려는 그래서 간단히 "호스트"필드를 제거했습니다 :

newRequest.Headers.Remove("Host"); 

그러나 요청이 전달되는 서버의 동작이 변경됩니다. 이제 응답은

"responseHeaders": [ 
     { 
      "key": "X-XSS-Protection", 
      "value": ["1; mode=block"] 
     }, 
     { 
      "key": "X-Frame-Options", 
      "value": ["SAMEORIGIN"] 
     }, 
     { 
      "key": "Alt-Svc", 
      "value": ["quic=\":443\"; ma=2592000; v=\"41,39,38,37,35\""] 
     }, 
     { 
      "key": "Date", 
      "value": ["Wed, 25 Oct 2017 12:18:52 GMT"] 
     }, 
     { 
      "key": "Server", 
      "value": ["gws"] 
     }, 
     { 
      "key": "Content-Length", 
      "value": ["1589"] 
     }, 
     { 
      "key": "Allow", 
      "value": ["GET","HEAD"] 
     }, 
     { 
      "key": "Content-Type", 
      "value": ["text/html; charset=UTF-8"] 
     } 
    ], 
    "content": "<!DOCTYPE html>\n<html lang=en>\n <meta charset=utf-8>\n <meta name=viewport content=\"initial-scale=1, minimum-scale=1, width=device-width\">\n <title>Error 405 (Method Not Allowed)!!1 

입니다. 이는 완전히 다릅니다. 내 질문은 : 왜/내 API를 호출하는 호스트 속성을 변경/제거 웹 서버의 응답을 변경합니까?

+0

왜 'newRequest.Headers.Remove ("Host");'가 필요하다고 생각하는지 자세히 설명 할 수 있습니까? – mjwills

+0

결제 제공자 (제 3 자 API)가 전화가 어디서 왔는지 알고 싶지 않기 때문에. 내부 서버의 이름을 공개하고 싶지 않습니다. – HannesB

+0

제거하기 전에 Host 헤더의 값은 무엇입니까? – mjwills

답변

0

분명합니다. 요청한 웹 서버는 보낸 헤더, 방법 등에 따라 다릅니다. 예를 들어, 어떤 웹 서버는 취약점 일 수 있으므로 HOST 헤더없이 요청을 차단합니다.

+0

본인은 서버의 동작이 f. "Accept-Encoding"필드에 표시되지만 호스트 필드에 의존하는 이유는 무엇입니까? 내 응용 프로그램이 "www.server1.com"에서 호스팅하고 API 호출을 할 때 내 응용 프로그램이 서버 "www.anotherserver2"에서 호스팅 될 때 이것은 내 호스트입니다.com "인 경우이 주소가 호스트 필드에 표시되지만 요청을받는 서버의 동작에 어떻게 영향을 주어야합니까? – HannesB

+0

https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14 .23은 호스트가 일부 상황에서 필수적이라는 것을 의미합니다 .HhannesB. – mjwills

+0

재미있게도 필수적이지만 기본적으로 "asdfasdf.com"과 같은 모든 것을 포함 할 수 있습니다. 이상하게 보입니다. – HannesB