Кодировка Accept в залпе не отвечает с Content-Encoding

Я разрабатываю Restful Api. Я использую laravel в качестве бэкэнда (с apache), а для клиента я использую Android (с библиотекой залпа для сетевых коммуникаций).

В одном из моих звонков у меня есть следующее:

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;
}
};

Как вы можете видеть, я установил Accept-Encoding :gzip,deflate,

Когда laravel получает запрос, заголовки существуют:

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',
),
)

Но когда Android получает ответ, он не содержит Content-Encoding : gzip заголовок, заголовки, которые он содержит:

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

Когда я делаю тот же запрос через curl:

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

это возвращение:

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

Итак, подведя итоги, я установил Accept-Encoding:gzip,deflate, запрос принимается сервером с этими заголовками, но когда ответ получен Android Content-Encoding не существует Это не проблема моего сервера, потому что curl работает хорошо.

Любое предложение? Спасибо

РЕДАКТИРОВАТЬ:

Я смотрю данные, отправленные и полученные с помощью Wireshark между Android и моим сервером. Я смотрю другой запрос часть из этого. Этот другой запрос сделан с JsonObjectRequest вместо JsonArrayRequest и с wireshark я могу смотреть следующие заголовки.

Android -> Сервер

Content-Type: application/json\r\n
Host: 192.168.1.104\r\n
Connection: Keep-Alive\r\n
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.5)\r\n
[truncated] Cookie: laravel_session=
Cookie2: $Version=1\r\n
Accept-Encoding: gzip,deflate\r\n

Сервер -> Android

Date: Sun, 21 Sep 2014 18:59:15 GMT\r\n
Server: Apache/2.2.22 (Ubuntu)\r\n
X-Powered-By: PHP/5.4.9-4ubuntu2.4\r\n
Cache-Control: no-cache\r\n
[truncated] Set-Cookie: laravel_session=
Vary: Accept-Encoding\r\n
Content-Encoding: gzip\r\n
Connection: Keep-Alive\r\n
Transfer-Encoding: chunked\r\n
Content-Type: text/html; charset=UTF-8\r\n

В этом запросе ответ содержит Content-Encoding: gzip, Единственное различие между этим запросом и другим состоит в том, что этот запрос использует JsonObjectRequest вместо JsonArrayRequest, так что не может «JsonArrayRequest использовать Gzip кодировать?

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector