2017-10-25 9 views
0

私のWeb 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); 

(もちろんポスト要求に何を行うことができない)私は、「newRequest」変数ヘッダを検査する場合コレクションには、「API」がホストされているURLの値を保持する「ホスト」フィールドが含まれています。

private.store.internal 

予想通りこれは、Googleのサーバから返されたヘッダは、次のとおりです。

"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は、(実際の)支払サーバにホストされている情報を転送しませんので、私は単に "ホスト"フィールドを削除しました:

しかし、これは要求が転送されるサーバーの動作を変更します。 応答は

"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が呼び出しているホストプロパティを変更/削除するとWebサーバーの応答が変わるのですか?

+0

「newRequest.Headers.Remove( "Host"); 'を実行する必要があると思われる理由をさらに詳しく説明できますか? – mjwills

+0

私は決済プロバイダ(サードパーティのAPI)がどこからコールされているのか知りたくありません。私は内部サーバーの名前を公開したくありません。 – HannesB

+0

削除する前にHostヘッダーの値は何ですか? – mjwills

答えて

0

明らかです。リクエストしたWebサーバーは、送信するヘッダー、メソッドなどに依存します。たとえば、一部のWebサーバーは、脆弱性がある可能性があるため、HOSTヘッダーのない要求をブロックします。

+0

私は、サーバーの動作がf。 「Accept-Encoding」フィールドに表示されますが、なぜHostフィールドに依存していますか?私のアプリケーションが "www.server1.com"でホストされていてAPIを呼び出すとき、これは私のホストです - 私のアプリケーションがサーバー "www.anotherserver2"でホストされているときです。com "の場合、このアドレスはホストフィールドに表示されますが、これがリクエストを受信するサーバーの動作にどのように影響するのですか? – HannesB

+0

https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14 .23は、ホストがいくつかの文脈で必須であることを意味しています@HannesB。 – mjwills

+0

興味深いことに、それは必須ですが、 "asdfasdf.com"のようなものを基本的に含んでいます。 – HannesB

関連する問題