*
注: このトピックにはいくつかのリンクがありますが、うまくいきませんでした。新しいものをここに投稿する必要があります。
*
基本的に、UIProgressView を表示して、Web サービスからフェッチされているデータを表示しようとしています。ここでの問題は、アプリケーションから呼び出すほとんどすべてのサービスの expectedContentLength を取得していて、応答ヘッダーにContent-Lengthが含まれていることです。しかし、Web サービスの応答の 1 つで、expectedContentLength が返されず、代わりに常に -1 が返されます。
以下は、2 つの異なる Web サービス応答に対して取得する応答ヘッダーです。
- コンテンツの長さを取得する応答ヘッダー (サービスからのデータはそれほど大きくありません)
{
Connection = "Keep-Alive";
"Content-Length" = 2689;
"Content-Type" = "application/json";
Date = "Tue, 23 Jun 2015 08:19:04 GMT";
"Keep-Alive" = "timeout=5, max=98";
Server = "Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.5.15";
"X-Powered-By" = "PHP/5.5.15";
}
- コンテンツの長さを取得できない応答ヘッダー。(応答には膨大なデータが含まれており、 JSONデータのみをダウンロードするファイルはありません)
{
Connection = "Keep-Alive";
"Content-Type" = "application/json";
Date = "Tue, 23 Jun 2015 08:12:34 GMT";
"Keep-Alive" = "timeout=5, max=97";
Server = "Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.5.15";
"Transfer-Encoding" = Identity;
"X-Powered-By" = "PHP/5.5.15";
}
上記のサービス レスポンスには膨大なデータが含まれています。高度な残りのクライアントのクロムの拡張機能で応答をテストすると、「Transfer-Encoding」= chunked; の次の応答ヘッダーが得られます。
Date: Tue, 23 Jun 2015 12:01:20 GMT
Server: Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.5.15
X-Powered-By: PHP/5.5.15
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
次のリンクを使用しましたが、どれも役に立ちませんでした: Link1、 Link2、 Link3
私を助けてください。ありがとう!
更新されたコード: サーバー側で Content-Lenth ヘッダーを設定した後、Advanced rest client chrome's extension のContent-Length ヘッダーで有効な応答を得ました。
Date: Wed, 24 Jun 2015 05:25:48 GMT
Server: Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.5.15
X-Powered-By: PHP/5.5.15
Content-Length: 1272347
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json
しかし、クライアント側 (つまり、iOS アプリケーション) では、まだ Content-Length ヘッダーを取得していないため、expectedContentLength 値を取得できません。私はまだ "Transfer-Encoding" = Identity; を取得しています。私の側の応答ヘッダーに。次のように、リクエストに Accept-Encoding ヘッダーも設定しました。
[req setValue:@"identity;q=0" forHTTPHeaderField:@"Accept-Encoding"];
いずれかの側(サーバー/クライアント)で行うべきことは他にありますか?