Posted at

HTTP Status 206(Partial Content)を抑制する

More than 1 year has passed since last update.

apacheでHTTP206を抑制する方法


発生した障害

SprintBootにて、apacheプロキシを経由し、以下で公開したpdfファイルがIE11で正常に開けない。

→apacheでHTTP Status 206(Partial Content)で返戻している場合は、「カラースペースが無効です。」エラーが発生する。

→apacheでHTTP Status 200で返戻している場合は、同一ファイルでも正常に開くことができる。


WebConfig.java

@Configuration

public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public ResourceUrlEncodingFilter resourceUrlEncodingFilter() {
return new ResourceUrlEncodingFilter();
}

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("classpath:/static/");
}
}



HTTP Status 206(Partial Content)が返戻される条件

RFC7233よりRange(If-Range)要請があった場合、206が応答されるよう


設定内容(httpd.conf)

以下を追加 ※本番適応時は、必要に応じFileディレクティブ等で適応範囲を絞ること


  • 最低限の設定


httpd.conf

RequestHeader unset Range



  • Example


httpd.conf

<Files *.pdf>

Header set Accept-Ranges none #クライアントへRangeアクセスは受け付けないよという応答
RequestHeader unset Range #Rangeアクセスを強制的に解除
</Files>


 検証


  • 検証に利用したファイル


index.html

[ec2-user@ip-172-31-1-128 ~]$ cat /var/www/html/index.html

01234567890123456789


  • 設定なし

[ec2-user@ip-172-31-1-128 ~]$ telnet localhost 80

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.1
Host: localhost
Range: bytes=0-10

HTTP/1.1 206 Partial Content
Date: Tue, 28 Feb 2017 01:26:57 GMT
Server: Apache/2.2.31 (Amazon)
Last-Modified: Tue, 28 Feb 2017 00:41:57 GMT
ETag: "606b7-15-5498c769f64c3"
Accept-Ranges: bytes
Content-Length: 11
Content-Range: bytes 0-10/21
Connection: close
Content-Type: text/html; charset=UTF-8

Connection closed by foreign host.


  • 設定あり

[ec2-user@ip-172-31-1-128 ~]$ telnet localhost 80

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.1
Host: localhost
Range: bytes=0-10

HTTP/1.1 200 OK
Date: Tue, 28 Feb 2017 01:27:28 GMT
Server: Apache/2.2.31 (Amazon)
Last-Modified: Tue, 28 Feb 2017 00:41:57 GMT
ETag: "606b7-15-5498c769f64c3"
Accept-Ranges: none
Content-Length: 21
Connection: close
Content-Type: text/html; charset=UTF-8