質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1394閲覧

JavaScriptで2GBを超えるバイナリを読み込むとコケル

salud

総合スコア215

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2019/08/07 02:03

以下のスクリプトで、URLにアクセスした際
サーバ側で動的にzipファイルを生成しダウンロードするシステムを運用しています。

今回、2GBを超えるファイルを圧縮しダウンロードしようとした結果、エラーが起きてしまいました。

サーバ側では、Completed 200 OK in 180425ms と出力されており、
zipファイルも問題なく生成されておりました。

一方で、ブラウザのデベロッパーツールで確認すると504のエラーが発生し、
ダウンロードに失敗しているようです。

原因の分かる方、おられませんでしょうか?

ブラウザは、Google Chromeで確認しています。
XX分以上のリクエストは、504エラーを出すといったような仕様があるのでしょうか?)

JavaScript

1$(function () { 2 var download_flag; 3 $('.zip_download').on('click', function() { 4 if (download_flag) { 5 return; 6 } 7 modal_open('#loader_downloading'); 8 /* ダブルクリック対策 */ 9 download_flag = true; 10 let filename = $(this).data('name')+'.zip'; 11 var xhr = new XMLHttpRequest(); 12 xhr.responseType = 'blob'; 13 xhr.open('GET', $(this).data('url'), true); 14 xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 15 xhr.onload = function() { 16 /* モーダルを閉じる */ 17 modal_closeAll(); 18 if (xhr.status == 200) { 19 //let downloadData = this.response; 20 let downloadData = new Blob([this.response], {type: 'application/zip'}); 21 if (window.navigator.msSaveBlob) { 22 window.navigator.msSaveBlob(downloadData, filename); // IE用 23 } else { 24 let downloadUrl = (window.URL || window.webkitURL).createObjectURL(downloadData); 25 let link = document.createElement('a'); 26 link.href = downloadUrl; 27 link.download = filename; 28 link.click(); 29 (window.URL || window.webkitURL).revokeObjectURL(downloadUrl); 30 } 31 } else if (xhr.status == 401) { 32 /* 認証エラーのアラートを表示 */ 33 modal_open('#modal_alert_unauthorizedError'); 34 } else { 35 /* 不明なエラーのアラートを表示 */ 36 modal_open('#modal_alert_anythingError'); 37 } 38 /* ダブルクリック対策 */ 39 download_flag = false; 40 } 41 xhr.onerror = function() { 42 /* モーダルを閉じる */ 43 modal_closeAll(); 44 /* 不明なエラーのアラートを表示 */ 45 modal_open('#modal_alert_anythingError'); 46 /* ダブルクリック対策 */ 47 download_flag = false; 48 } 49 xhr.send(null); 50 }); 51});

以上です。
よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/08/07 02:10

>サーバ側 これはどのような仕組みなのでしょうか。
salud

2019/08/07 02:46 編集

サーバーは Nginx & puma & Rails です
退会済みユーザー

退会済みユーザー

2019/08/07 03:02

JavaScriptで・・・と言うことは、XMLHttpRequest を使ってダウンロードした時だけの問題で、普通に、例えばブラウザのアドレスバーに要求先の url を入力してダウンロードした時は問題ないということですか?
guest

回答1

0

ベストアンサー

HTTP504(Gateway Timeout)とは「応答待ったけど時間かかりすぎたから諦めたよ」という意味です。テレビに出たお店のサーバーに大勢のユーザーがアクセスしてエラーが帰って来る時もHTTP504(Gateway Timeout)です。(一部例外あり)

Chromeの504判定の基準については見つけられませんでしたがサーバー側が200なら時間のかかりすぎでは?

投稿2019/08/07 02:18

編集2019/08/07 02:25
kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問