CSB按照HTTP协议的规范实现了HTTP请求和响应内容的压缩传输。
使用约束
- 仅支持新版本服务(serviceModel version: 2.0)。
- 仅支持gzip压缩。
application/x-www-form-urlencoded请求压缩
- 修改CSB客户端代码
示例代码:
HttpParameters.Builder builder = new HttpParameters.Builder(); builder.requestURL("http://localhost:8086/CSB") // 设置CSB服务地址。CSB服务地址即创建该实例时绑定的SLB的地址。 .api("http2http1") // 设置服务名。 .version("1.0.0") // 设置版本号。 .method("post") // 设置调用方式, get或post。 .accessKey("ak").secretKey("sk"); // 设置AccessKey ID和AccessKey Secret。 try { builder.setContentEncoding(ContentEncoding.gzip);//设置请求消息压缩。 // 设置请求参数。 builder.putParamsMap("name", "name中文1").putParamsMap("times", "3"); HttpReturn ret = HttpCaller.invokeReturn(builder.build()); } catch (HttpCallerException e) { // error process }
HTTP请求示例如下:
- 业务服务端处理方式
根据
Content-Encoding: gzip
判断请求消息是否压缩,并正确解压,然后再使用URL解码参数。
Content-Type: application/json请求压缩
- 修改CSB客户端代码
示例代码:
HttpParameters.Builder builder = new HttpParameters.Builder(); builder.requestURL("http://localhost:8086/CSB") // 设置 CSB 服务地址。CSB服务地址即创建该实例时绑定的SLB的地址。 .api("http2http1") // 设置服务名。 .version("1.0.0") // 设置版本号。 .method("post") // 设置调用方式, get或post。 .accessKey("ak").secretKey("sk"); // 设置AccessKey ID和AccessKey Secret。 try { builder.setContentEncoding(ContentEncoding.gzip);//设置请求消息压缩。 // 设置请求参数。 builder.putParamsMap("name", "name1中文sdfs sdlkfsadfksdkfds").putParamsMap("times", "3"); Map<String, String> kvMap = new HashMap<String, String>(); for (int i = 0; i < 100; ++i) { kvMap.put(String.valueOf(i), "abc中文lksd" + i); } builder.contentBody(new ContentBody(JSON.toJSONString(kvMap))); } catch (HttpCallerException e) { // error process }
HTTP请求示例如下:
- 业务服务端处理方式
根据
Content-Encoding: gzip
判断请求消息是否压缩,并正确解压。
application/octet-stream请求压缩
- 修改CSB客户端代码
示例代码:
HttpParameters.Builder builder = new HttpParameters.Builder(); builder.requestURL("http://localhost:8086/CSB") // 设置 CSB 服务地址。CSB服务地址即创建该实例时绑定的SLB的地址。 .api("http2http1") // 设置服务名。 .version("1.0.0") // 设置版本号。 .method("post") // 设置调用方式, get或post。 .accessKey("ak").secretKey("sk"); // 设置AccessKey ID和AccessKey Secret。 try { builder.setContentEncoding(ContentEncoding.gzip);//设置请求消息压缩。 // 设置请求参数。 builder.putParamsMap("name", "name中文1").putParamsMap("times", "3"); builder.contentBody(new ContentBody(new File("文件名.xxx"))); HttpReturn ret = HttpCaller.invokeReturn(builder.build()); } catch (HttpCallerException e) { // error process }
HTTP请求示例如下:
- 业务服务端处理方式
根据
Content-Encoding: gzip
判断请求消息是否压缩,并正确解压。
multipart/form-data请求压缩
- 修改CSB客户端代码
示例代码:
HttpParameters.Builder builder = new HttpParameters.Builder(); builder.requestURL("http://localhost:8086/CSB") // 设置请求的URL。 .api("http2http1") // 设置服务名。 .version("1.0.0") // 设置版本号。 .method("post") // 设置调用方式, get或post。 .accessKey("ak").secretKey("sk"); // 设置AccessKey ID和AccessKey Secret。 try { builder.setContentEncoding(ContentEncoding.gzip);//设置请求消息压缩。 // 设置form请求参数。 builder.putParamsMap("times", "2").putParamsMap("name", "we中文wesdsfsfdsasdefds"); //设置上传附件。 builder.addAttachFile("file1", new File("文件名1.xxx")); //默认按请求消息的压缩标记来判断是否压缩。 builder.addAttachFile("file2", "fileName2", new FileInputStream(new File("文件名2.yyy")),ContentEncoding.none); //明确不压缩 HttpReturn ret = HttpCaller.invokeReturn(builder.build()); } catch (Exception e) { // error process }
HTTP请求示例如下:
- 业务服务端处理方式
根据
Content-Encoding: gzip
判断请求消息是否压缩,并正确解压。
响应压缩
HTTP SDK会自动解析HTTP响应,并根据HTTP Header的Content-Encoding: gzip
自动解压响应消息。