我无法在Jersey服务中激活gzip-encoding.这就是我尝试过的:
与开始了jersey-quickstart-grizzly2从原型入门指南.
添加 rc.register(org.glassfish.grizzly.http.GZipContentEncoding.class);
(也尝试过rc.register(org.glassfish.jersey.message.GZipEncoder.class);)
开始于 mvn exec:java
经过测试 curl --compressed -v -o - http://localhost:8080/myapp/myresource
结果如下:
> GET /myapp/myresource HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 zlib/1.2.3.4 ...
> Host: localhost:8080
> Accept: */*
> Accept-Encoding: deflate, gzip
>
< HTTP/1.1 200 OK
< Content-Type: text/plain
< Date: Sun, 03 Nov 2013 08:07:10 GMT
< Content-Length: 7
<
* Connection #0 to host localhost left intact
* Closing connection #0
Got it!
Run Code Online (Sandbox Code Playgroud)
也就是说,尽管Accept-Encoding: deflate, …
为什么以下示例在请求中吞下我的HTTP-Header以进行"Content-Encoding".我正在编写一个应用程序,我需要解码自定义编码格式.但是,我永远无法从请求中获取"Content-Encoding"标头.既不在实际资源中也不在ReaderInterceptor中.在响应中,不吞下此编码头.
在以下(可运行)示例中可以很容易地观察到此行为:
public class Demo extends JerseyTest {
@Override
protected Application configure() {
enable(TestProperties.DUMP_ENTITY);
enable(TestProperties.LOG_TRAFFIC);
return new ResourceConfig(MyResource.class, MyInterceptor.class);
}
public static final String PATH = "path";
public static final String ENCODING = "my-encoding";
public static final String CUSTOM_HEADER = "X-Content-Encoding";
public static final String QUESTION = "question", ANSWER = "answer";
@Path(PATH)
public static class MyResource {
@POST
public Response handle(String value, @Context HttpHeaders httpHeaders) {
assertEquals(ENCODING, httpHeaders.getHeaderString(CUSTOM_HEADER));
// Here, the "Content-Encoding" header mysteriously disappeared.
assertEquals(ENCODING, httpHeaders.getHeaderString(HttpHeaders.CONTENT_ENCODING));
return Response
.ok(ANSWER) …Run Code Online (Sandbox Code Playgroud)