• ベストアンサー

JSONファイルをダウンロードさせない方法

サーバー上にxxxx.jsonというJSONファイルを置き、jQueryの$.getJSON()で読み込んでパースしてHTML内にデータを表示させています。 このxxxx.jsonをブラウザで直接開くとファイルの中身が表示されてしまい、ブラウザ経由やダウンロードソフトなどでダウンロードできてしまうと思いますが、これをさせないようにする方法はないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

必ずしもダウンロードを防ぐわけではありませんが, jQueryによるアクセスであれば X-Requested-with: XMLHttpRequest というヘッダが送られるので (大抵のライブラリでも送られますが), これを条件に.htaccessで制限をかける,という方法があります。 ref) http://api.jquery.com/jQuery.ajax/ (jQueryのajaxメソッドのマニュアル) https://www.google.co.jp/search?q=X-Requested-with+.htaccess&lr=lang_ja (X-Requested-with .htaccessによるgoogle検索結果) クロスドメインでのアクセスの場合,これでは対応できないのですが, Originあたりのチェックをすればよい気はします。

elektrikeel
質問者

お礼

求めていたものはこれでした。 jQueryからのリクエストヘッダについては調べて分かったのですが、それでアクセス制限を掛ける方法が分かりませんでした。 これで対応できます。ありがとうございました。

その他の回答 (4)

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.5

お好きにダウンロードしてくださいという物しかWebで公開することはできません

  • wmin-2014
  • ベストアンサー率80% (8/10)
回答No.3

.htaccessファイルで指定したファイルの閲覧を制御する方法があるようです。 参考: 「特定のファイルだけ守る」 http://www.futomi.com/lecture/htaccess/files.html 「.htaccess活用法(5)」 http://www.shtml.jp/htaccess/data.html 試してませんので、jsonファイルの本来の動作を阻害しないかどうかはわかりませんが。

  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.2

理論的には不可能です。 されにくい方法、ならば * JSON ファイルを Base64 化する * JSON ファイルを暗号化して $.get() した後に復号化する * JSON を動的生成する仕組みにして、パスワード付の $.post() でなければ出力させない * 取得前に擬似的な「3ウェイ・ハンドシェイク」を必要とするように実装する * 画像ファイルにデータを埋め込む「電子透かし」をがんばって実装する

回答No.1

公開しているものを非公開にするのは理論的に不可能だと思います。 スカイツリーを建ててみんなにご覧いただくが、写真は撮らせたくない てのと一緒だと思います。

関連するQ&A

  • $.getJSONにJSON.stringifyを

    $.getJSONに、JSON.stringifyした結果を指定したいのですが、どうすればよいでしょうか? ■現状 ・コンソールにJSONは出力されているのですが、$.getJSONでこのファイルを指定しても、画面真っ白です ▼index.html <script type="text/javascript" src="hoge.json"></script> <script type="text/javascript"> $.getJSON('hoge.json', function(data) { ▼hoge.json var obj =([ [略], ]); var json_text = JSON.stringify(obj); // テスト出力 console.log(json_text); ■質問 ・$.getJSONにこの出力結果(json_text)を指定するためには、どうすれば良いでしょうか? ・一旦ファイル出力しなければいけないのでしょうか? ・どうやるのでしょうか? ・AJAXでサーバ側へデータを渡してファイル出力した後、$.getJSONでその出力したファイルを指定するしかない?

  • JQueryを用いたJsonとの非同期通信について

    下のソース //画面構築完了後 $(function() { //ボタンのクリックイベントで $("#btn_1").click(function(){ //data/sample.jsonのデータを取得し、jsonというオブジェクトに入れる $.getJSON("fdas.json", function(json){ var rows = ""; //テーブルとして表示するため、htmlを構築 //for (i = 0; i < json.length; i++) { rows += "<tr>"; rows += "<td>"; for (var kaey in json) { rows += (json[kaey]); } rows += "</td>"; rows += "</tr>"; //} //テーブルに作成したhtmlを追加する $("#tbl").append(rows); }); }); }); このソースに <input id="btn_1" type="button" value="データ取得" /> を使ってボタンを押しているのですが、FirefoxだとJsonのデータを更新してから押してもデータが変更されず、ChromeだとF5とかを幼くても更新されます。 ブラウザによって挙動が違うのはソースが間違っているからですか? それともJsにもHTML5やCSS3のように、対応ブラウザなどがあるのでしょうか??? また自分はまだよくわかっていないのですが、prototype.jsを用いた場合のほうが簡単だということがありましたらそちらも教えていただけると幸いです 教えてください!!!

  • フォームからjQuery,jQuery.jsonを使ってJSONを作っ

    フォームからjQuery,jQuery.jsonを使ってJSONを作ってPHPで表示したい。 こんばんは。2、3日ずっと悩んでて解決しないので助けてください。 jQuery,jQuery.jsonを使ってJSONを作成しています。 クリックイベントに var form = $("#sform"); var json = $(form.serializeArray()); var strJson = $.toJSON(json); という形をとって $.ajax({ url : "request.php", type : "post", data : strJson, success: function(request){ $('#result').html(request); } }); で送っています。 ただPHP側で var_dump($_POST); を行ってもArray ( ) と表示されます。 firebugで見たところpostに入っているデータは以下の通りです。 {"0":{"name":"date","value":"2010/09/15"},"1":{"name":"type","value":"new"},"2":{"name":"bin[]","value":"2"},"3":{"name":"bin[]","value":"3"},"length":4} var_dumpで表示できないのはなぜでしょうか? 上記で変数json のまま送るとオブジェクトとして送れてvar_dump でも表示できます。 ただ今はjson の勉強をしているので、できればなぜこうなっているのかを理解したいです。 基本的なところで勉強不足かもしれませんが、何かアドバイスなど頂けると嬉しいです。 よろしくお願いします。

  • jQueryの$.getJSONでデータを渡したい

    jQueryの$.getJSONでデータを渡したいのですが、 うまくいきません。 test.js {  "users": [   {    "name": "aoki",    "code": "0001"   },   {    "name": "ueno",    "code": "0002"   }  ] } 読み込む側 $.getJSON("test.js", { "name": "John", "code": "0003" }, function(json){  alert("JSON Data: " + json.users[0].name);  alert("JSON Data: " + json.users[1].name);  alert("JSON Data: " + json.users[2].name); }); { "name": "John", "code": "0003" }を渡しているのだから、 json.users[2].nameで、"John"が取得できると思ったのですが、 「'users.2.name' は Null またはオブジェクトではありません。」エラーになります

  • javascriptでJSONデータの生成方法

    現在PerlのフレームワークであるMojoliciousとJavascriptのjQueryを使ってAjaxを利用したアプリケーションを作ろうとしているのですが、クライアント側で、サーバに送信するためのJSON形式のデータがうまく作れません。 例えば、ブラウザ上の表のセルをダブルクリックしたときにそのデータを書き換えられるようにし、その更新データをJSONでサーバ側に送りたいのですが、 <table> <tr><th>name</th><th>email</th></tr> <tr><td class="name">山田</td><td class="email">yamada**@gmail.com</td></tr> </table> とある表のセルの山田のアドレスをyamada**@gmail.com -> yamada**@yahoo.co.jpと変更した場合、javascript(jQuery)で次のようなJSONデータを作りたいです。 { "email" : "yamada**@yahoo.co.jp"} 左側のemailは動的にセルのclass属性から取得したいのですが、方法が分かりません。 実際にはemail以外にも多数の列がありますので、なるべく動的にclass属性を取得したいのですが、良いJSONの生成方法やJSONを用いた他のデータ構造があれば教えていただきたいです。

  • Jquery JSON形式で読みだした後

    http://kolber.github.com/audiojs/demos/test6.html ここのサイトのaudio.jsの再生リストを表示するjqueryを使用しています。 このjqueryに多少手を加えて、Jsonデータから再生リストのパスを取得して、<li>タグに自動生成しています。 ですが、このaudio.jsのサンプルは、HTMLに直接書いたリストしか識別してくれません。 (直接HTMLに書いたものだと、リストからaudio再生してくれます) JSONからパスを取得して自動生成したリストだとaudio再生が機能しません。 error loading undefinedが表示されます。 (HTMLソースの方にはパスファイルが正しく表示されています。(直接打ち込んだ時と同じパス)) この原因と解決法を教えていただけないでしょうか。

  • dxfファイルの強制ダウンロード

    サーバー(アパッチ)においてあるdxfファイルを強制的にダウンロードさせたいのですが、設定はサーバー側で行うのでしょうか? 現在は各クライアントマシンの環境によってダウンロードできるのもあるのですが、ブラウザ(IE5.5)上にdxfファイルの中身のテキストが表示されてしまうのもあります。 強制的にダウンロードさせたいのですが・・・ よろしくお願いします。

  • jQueryの略記について

    HTTP通信でJSON形式のデータを読み込むメソッドがあります。 サンプルなどをみると下記のように書かれています。これは略記で書かれているのでしょうか??? $.getJSON() ※引数は省略しています。 上記のコードを略記で書くと $.getJSON() 略記で書かないと jQuery.getJSON() という事で合っていますか。 すみませんが宜しくお願いします。 では、失礼します。

  • このJSONデータをjQueryでどう処理すれば?

    質問させてください。 JSONデータの扱い方に悩んでおります。 以下の2つのコードはここでは見にくいため次のサイトに載せておきます。 http://codepad.org/CSN6X94T http://codepad.org/aPiIzcOR data.json [ { "pk": 1, "model": "ac.ni", "fields": { "kamoku_alpha": "SUUGAKU", "kamoku": "数学", "hissu": 0, "kamoku_hira": "すうがく" } }, { "pk": 2, "model": "ac.ni", "fields": { "kamoku_alpha": "EIGO", "kamoku": "英語", "hissu": 0, "kamoku_hira": "えいご" } }, { "pk": 3, "model": "ac.ni", "fields": { "kamoku_alpha": "KOKUGO", "kamoku": "国語", "hissu": 1, "kamoku_hira": "こくご" } } ] のようなJSONデータがあります。 この中でそれぞれのfields内のkamoku、kamoku_hira、kamoku_alphaを取得したいと考えています。 jQueryにてどのように書けば宜しいのでしょうか? $(function(){ $.getJSON('./data.json', function(data){ $.each(data, function(){ $.each(data.filter, function(){ alert(this.kamoku); }); }); }); }); の型で考えたのですが良く分かりませんでした。 アドバイス頂けたら幸いです。 jQueryは1.11.1です。

  • getJSONで受け取れるよう出力するには?

    ■前提 ・$.getJSONでAPIからデータ取得するサンプルがあります ・この時、第1引数のURLを叩くと、データが表示されます $.getJSON('http://hoge … &callback=?') .error( ajaxError ) .success(function( data ){ ・動作確認のため、「第1引数のURLで表示されたデータ」を取得(コピペ)して、「piyo.php」としてアップロードしてみました ■質問 ・$.getJSON第1引数を「piyo.php」へ変更すると、同じようにデータ取得できると思ったのですが、うまくいきません ・何故でしょうか? ・「json値」をサーバが返すようにすれば良いのでしょうか? ・それはどうやるのでしょうか? ・「echo json_encode?」「header('Content-Type:?」それとも、拡張子がjsonじゃないといけないのでしょうか?

    • ベストアンサー
    • AJAX

専門家に質問してみよう