Help us understand the problem. What is going on with this article?

RestTemplateでHostヘッダが無視される

More than 1 year has passed since last update.

現象

以下のようにRestTemplateにURLのホストとは異なるHostヘッダを指定するとそのヘッダが無視される。

        HttpHeaders headers = new HttpHeaders();
        headers.set("Host", "www.example.com");

        RestTemplate restTemplate = new RestTemplate();

        ResponseEntity<String> responseEntity = restTemplate.exchange(
                "http://httpbin.org/headers", HttpMethod.GET,
                new HttpEntity<String>(null, headers), String.class);

原因

https://stackoverflow.com/questions/43223261/setting-host-header-for-spring-resttemplate-doesnt-work に書いてあるが、RestTemplateの基底実装がHttpUrlConnectionの場合はこの挙動になる。詳しい事はリンク先に書いてあるが、セキュリティ上の理由というかRFC準拠でこうなっている(らしい)

対策

System.setProperty("sun.net.http.allowRestrictedHeaders", "true")

あるいは

-Dsun.net.http.allowRestrictedHeaders=true

もしくは基底実装にApache HttpComponentsを使用する。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away