私は、ovhサーバー上のSymfonyフレームワークを使用してウェブサイトを作っています。 ユーザーがページを変更すると、すべてのページをリロードしてユーザーエクスペリエンスを向上させるため、新しいXMLHttpRequest
を作成します。XMLHttpRequestの進捗状況の追跡とsymfony(CORS)
すべてうまくいきますが、次のページが非同期で読み込まれている間にローディングバーを追加したいと思います。残念ながらlengthComputable
パラメータはfalseです。この問題を通過する 、私は論文ラインと応答を送信する前にSymfony3のヘッダを設定しました:
$length = strlen($event->getResponse()->getContent());
$event->getResponse()->headers->set('Content-Length', $length);
$event->getResponse()->headers->set('Accept-Ranges', "bytes");
$event->getResponse()->sendHeaders();
このトリックは私のローカルの開発サーバーで動作し、lengthComputable
がtrueに設定されていると私は計算することができます現在の負荷率。しかし、リモートのdevサーバにすべてを置くと、lengthComputable
は再びfalseになります。ここで
は論文に4行使用してレスポンスヘッダーです:これは、元のヘッダーポリシーを横切るように関係している
Accept-Ranges:bytes
Accept-Ranges:bytes
Cache-Control:no-cache
Cache-Control:no-cache
Content-Encoding:gzip
Content-Length:3100
Content-Length:3100
Content-Type:text/html; charset=UTF-8
Date:Sat, 28 Jan 2017 12:34:08 GMT
Server:Apache
Set-Cookie:PHPSESSID=***; path=/; HttpOnly
Vary:Accept-Encoding
(そして、はい、いくつかのパラメータが存在している2回)
Iの事を、私はすることができます解決策が見つかりませんでした。
私は
$responseHeaders->set('Access-Control-Allow-Headers', 'content-type');
とさえ
$responseHeaders->set('Access-Control-Allow-Origin', '*');
のような他のパラメータを設定しようとした私が続くと論文を試してみました
Symfony2. I can't set Content-Length header
How can I access the Content-Length header from a cross domain Ajax request?
リンクEDIT
私はプロキシを使用していない、と私のサーバーはOVHでホストされています。ここで
が私のJavaScriptコード(例外なし)私のprogress(evt)
機能で
ajax_oReq = new XMLHttpRequest();
ajax_oReq.addEventListener("progress", progress, false);
ajax_oReq.addEventListener("load", complete, false);
ajax_oReq.addEventListener("error", error, false);
ajax_oReq.addEventListener("abort", error, false);
params = "ajax=1";
if(url.indexOf('?')!=-1){ params = "&"+params; }else{ params = "?"+params; }
ajax_oReq.open("GET", url+params, true);
ajax_oReq.send();
ですが、私はlengthComputable
がevt
パラメータをログに記録することにより、偽であることがわかります。
私のcomplete(evt)
の機能では、私は対応するdiv
にevt.target.response
を入れました。
私はこのコードを使用すると、ページの全長に等しい読み込まれた長さで約500ms後に最後の進捗イベントを受け取ります(したがって、ドキュメントの100%ですが、lengthComputable
はfalseです。 total
は0に等しいので、読み込みが終了したら私のヘッダーを見ているので分かります) しかし、complete
関数を呼び出すには約5秒もかかります。コンテンツの長さがわからないためです。とにかく、私は私の4行のコード(最初のもの)を削除すると、この問題は消えますが、私はいつもlengthComputable=true
がありません...
ありがとうございました!
あなたのjavascriptを投稿してください。同じブラウザでテストしていますか?あなたのdevサーバーはプロキシの背後にありますか? –
私は自分の投稿を編集したので、クローム、ファイアーフォックス、オペラ、サファリを試してみました。そして、いいえ、私はプロキシを使用していません、私のサーバーはOVH(プロ提供)によってホストされています –
ローカルの場合と同じContent-Encodingを使用していますか? GZIPがここで問題になる可能性があります –