dourong9253 2014-09-21 15:34
浏览 261

凌空中的Accept-Encoding不响应Content-Encoding

I am developing a Restful Api. I am using laravel as backend (with apache) and for client I am using Android (with volley library for network communications).

In one of my call I have the following:

JsonArrayRequest jsonObjReq = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {

@Override
public void onResponse(JSONArray response) {
    Log.d("Response", response.toString());
    //PARSE JSON RESPONSE
    }
}, new Response.ErrorListener() {

    @Override
    public void onErrorResponse(VolleyError error) {
    }
}){

    @Override
    protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
        for (Map.Entry<String, String> e: response.headers.entrySet()){
            Log.d(e.getKey(), e.getValue());
        }
        return super.parseNetworkResponse(response);
        }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String, String> map = new HashMap<String, String>();
        map.put("Accept-Encoding","gzip,deflate");
        return map;
    }
};

As you can see I set Accept-Encoding :gzip,deflate.

When laravel receive the request, the headers exist:

array (
  'accept-encoding' => 
  array (
    0 => 'gzip,deflate',
  ),
  'host' => 
  array (
    0 => '192.168.1.104',
  ),
  'connection' => 
  array (
    0 => 'Keep-Alive',
  ),
  'user-agent' => 
  array (
    0 => 'Apache-HttpClient/UNAVAILABLE (java 1.5)',
  ),
  'cookie' => 
  array (
    0 => 'laravel_session=,
  ),
  'cookie2' => 
  array (
    0 => '$Version=1',
  ),
)

But when android receive the response it doesn't contains Content-Encoding : gzip header, the headers that it contains are:

Transfer-Encoding﹕ chunked
Date﹕ Sun, 21 Sep 2014 15:15:37 GMT
Keep-Alive﹕ timeout=5, max=99
Set-Cookie﹕ laravel_session=
Content-Type﹕ application/json
Connection﹕ Keep-Alive
X-Powered-By﹕ PHP/5.4.9-4ubuntu2.4
Server﹕ Apache/2.2.22 (Ubuntu)
Cache-Control﹕ no-cache

When I do the same request via curl:

curl -I -H 'Accept-Encoding: gzip' url

it return:

HTTP/1.1 200 OK
Date: Sun, 21 Sep 2014 14:46:12 GMT
Server: Apache/2.2.22 (Ubuntu)
X-Powered-By: PHP/5.4.9-4ubuntu2.4
Cache-Control: no-cache
Set-Cookie: laravel_session=
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8

So, summarizing, I set Accept-Encoding:gzip,deflate, the request is receiveb by server with that headers but when response is received by android Content-Encoding doesn't exist. It is not problem of my server because curl works good.

Any suggestion? thanks

EDIT:

I am watching data sent and received using Wireshark between android and my server. I am watching other request a part from that. This other request is made with JsonObjectRequest instead of JsonArrayRequest and with wireshark I can watch the following headers.

Android -> Server

Content-Type: application/json

Host: 192.168.1.104

Connection: Keep-Alive

User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.5)

[truncated] Cookie: laravel_session=
Cookie2: $Version=1

Accept-Encoding: gzip,deflate

Server -> android

Date: Sun, 21 Sep 2014 18:59:15 GMT

Server: Apache/2.2.22 (Ubuntu)

X-Powered-By: PHP/5.4.9-4ubuntu2.4

Cache-Control: no-cache

[truncated] Set-Cookie: laravel_session=
Vary: Accept-Encoding

Content-Encoding: gzip

Connection: Keep-Alive

Transfer-Encoding: chunked

Content-Type: text/html; charset=UTF-8

In this request the response contains Content-Encoding: gzip. The only different between this request and the other is that this request uses JsonObjectRequest instead JsonArrayRequest, so cant ´JsonArrayRequest use Gzip encode?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 交替优化波束形成和ris反射角使保密速率最大化
    • ¥15 树莓派与pix飞控通信
    • ¥15 自动转发微信群信息到另外一个微信群
    • ¥15 outlook无法配置成功
    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程