概要
- jsonp(json with padding)により、クロスドメインのajaxコールが許可されており、さまざまなソースからのデータへのデータへのアクセスを制限する相同ポリシーを回避します。これは、ブラウザが解釈できる関数呼び出しを含むサーバーを返すJSONデータを返すことによって行われます。
- JSONPは、さまざまなソースからデータを取得し、さまざまなサービスのコンテンツにアクセスするのに役立ちますが、いくつかの制限もあります。 JSONPは、クロスドメインのGETリクエストのみを実行でき、サーバーによって明示的にサポートされる必要があります。また、クロスサイトスクリプティング(XSS)攻撃の可能性を開くため、セキュリティの問題が潜在的に問題を抱えています。
- 相同政策に対するその他のソリューションには、プロキシの使用またはクロスオリジンリソース共有(CORS)の実装が含まれます。プロキシを使用すると、サーバー側のコードがクロスオリジン要求を実行できますが、CORSでは、応答に新しいアクセス制御コントロールオリジンHTTPヘッダーを含めることにより、ブラウザがドメイン間で通信できます。ただし、各方法には独自の欠点と制限があります。
この記事は、品質の問題に対処するために2016年6月23日に更新されました。古い記事に関連するコメントは削除されています。 Webベースのアプリケーションを開発し、制御下にないドメインからデータをロードしようとしている場合、ブラウザのコンソールに次のメッセージが表示される可能性があります:XMLHTTPREQUESTはhttps://www.phpをロードできません.CN/LINK/0DF0DBFC4725C2259DC0BB045E9BF6D2 🎜> 'したがって、アクセスが許可されていません この記事では、jqueryとjsonpを使用して、このエラーの原因とこの問題を解決する方法を調べます。
同じ起源ポリシー一般的なWebページは、xmlhttprequestオブジェクトを使用してリモートサーバーにデータを送信および受信できますが、同じ発作ポリシーが実行できるものを制限します。これは、ブラウザセキュリティモデルの重要な概念であり、WebブラウザがページAのスクリプトがページBのデータにアクセスできるようにすることができると規定しています。ページのソースは、その
ポート番号で定義されます。たとえば、このページのソースは「https」、「www.sitepoint.com」、「80」です。ホモジーポリシーはセキュリティメカニズムです。スクリプトがドメインからデータを読み取り、サーバーに送信することを防ぎます。これがなければ、悪意のあるウェブサイトがセッション情報を別のサイト(GmailやTwitterなど)にクロールし、あなたに代わってアクションを実行するのは簡単です。残念ながら、それはまた、上に表示されるエラーを引き起こし、多くの場合、開発者が正当なタスクを完了しようとするのに問題を引き起こします。 障害の例
何が機能しないのか見てみましょう。これは別のドメインにあるJSONファイルであり、jQueryのGetJsonメソッドを使用してロードしたいと考えています。
$.getJSON( "http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-1.json", function(json) { console.log(json); } );
ブラウザでコンソールを開いて試してみると、上記のメッセージに似たメッセージが表示されます。それで、私たちは何ができますか?
可能な解決策幸いなことに、すべてが相同政策の影響を受けているわけではありません。たとえば、別のドメインから画像またはスクリプトをページにロードすることは完全に可能です。CDN(たとえば)からjQueryを含めるときにこれを行います。これは、
タグを作成し、その属性をJSONファイルに設定し、ページに挿入できることを意味します。 <script></script>
src
var script = $("<script>", { src: "http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-1.json", type: "application/json" } ); $("head").append(script);JSONP jsonp(パディング付きのJSONに代わって)は、この手法に基づいており、返されたデータにアクセスする方法を提供します。これは、ブラウザが解釈できる関数呼び出し(「人気」)を含むサーバーを返すJSONデータを提供することによって実装されます。この関数は、JSONP応答を評価するページで定義する必要があります。 前の例がどのように見えるか見てみましょう。これは、元のJSONデータをA関数でラップする更新されたJSONファイルです。
これにより、予想される結果がコンソールに記録されます。現在(かなり限られていますが)クロスドメインAjaxがあります。 jsonCallback
function jsonCallback(json){ console.log(json); } $.ajax({ url: "http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-2.json", dataType: "jsonp" });サードパーティapi
一部のサードパーティAPIでは、リクエストが返されたときに実行する必要があるコールバック関数の名前を指定できます。そのようなAPIの1つはGitHub APIです。 次の例では、John Resig(jQuery Creator)のユーザー情報を取得し、
コールバック関数を使用してコンソールへの応答をログに記録します。
これは次のように書くこともできます
logResults
URLの最後にある
function logResults(json){ console.log(json); } $.ajax({ url: "https://api.github.com/users/jeresig", dataType: "jsonp", jsonpCallback: "logResults" });jqueryに、jsonの代わりにJSONP要求を処理していることを伝えます。 jQueryは、リクエストが返されたときに呼び出すコールバック関数を自動的に登録します。
jqueryのgetjsonメソッドの詳細を知りたい場合は、ajax/jquery.getjsonの簡単な例
$.getJSON("https://api.github.com/users/jeresig?callback=?",function(json){ console.log(json); });をチェックしてください。
?
予防策
しかし、あなたが今までに気づいたかもしれないように、このアプローチにはいくつかの欠点があります。
たとえば、 JSONPはクロスドメインGETリクエストのみを実行でき、サーバーはそれを明示的にサポートする必要があります。 JSONPにはセキュリティの問題がないわけではないため、他のソリューションを簡単に紹介しましょう。 エージェントを使用して
サーバー側のコードは、同じオリジンポリシーの対象ではなく、問題なくクロスオリジンリクエストを実行できます。そのため、何らかのプロキシを作成し、必要なデータを取得するために使用できます。最初の例を参照してください:
クライアントの
:
しかし、この方法には欠点もあります。たとえば、サードパーティのサイトが認証にCookieを使用している場合、この方法は機能しません。
/* proxy.php */ $url = "http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-1.json"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = curl_exec ($ch); curl_close ($ch); echo $result;cors
クロスオリジンリソース共有(CORS)は、ブラウザがドメイン間で通信できるW3C仕様です。これは、応答に新しいアクセス制御コントロールオリジンHTTPヘッダーを含めることによって行われます。
最初の例を参照すると、.htaccessファイル(Apacheを仮定)に次のことを追加して、さまざまなソースからのリクエストを許可できます。
$.getJSON( "http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-1.json", function(json) { console.log(json); } );(apacheではないサーバーを実行している場合は、こちらで確認してください:
https://www.php.cn/link/819e2e55be8ef0957b56ea94356bfbb79)
最近のチュートリアルの1つでCORSの詳細をご覧ください。CORSの詳細
結論
JSONPを使用すると、相同ポリシーをバイパスし、ある程度クロスドメインAjaxの呼び出しを行うことができます。それは魔法の丸薬ではなく、もちろん問題がありますが、場合によっては、異なるソースからデータが取得されると非常に貴重であることが証明される可能性があります。JSONPでは、さまざまなサービスからさまざまなコンテンツを抽出することもできます。多くの有名なWebサイトは、事前定義されたAPIを介してコンテンツにアクセスできるJSONPサービス(Flickrなど)を提供しています。それらの完全なリストは、プログラム可能なWeb APIディレクトリにあります。
(以下はFAQパーツであり、複製情報を避けるために元のテキストに従って調整および簡素化されています) JSONP(FAQ)
についてのFAQ
-
JSONとJSONPの主な違いは何ですか? JSONとJSONPの両方は、サーバーとWebアプリケーション間のデータの処理に使用される形式です。主な違いは、クロスドメイン要求を処理する方法です。 JSONは、相同ポリシー(Webブラウザーに実装されたセキュリティ対策)のために、クロスドメイン要求をサポートできません。一方、JSONPは、人口測定方法を使用してこのポリシーをバイパスし、クライアントとは異なるドメインを持つサーバーからデータをリクエストできるようにします。
-
JSONPはどのようにして同じオリジンポリシーをバイパスしますか? jSonpは、パディングまたは「充填リクエスト」メソッドを使用して相同ポリシーをバイパスします。この方法では、クライアントは、URLにコールバック関数を追加することにより、異なるドメインのサーバーからデータを要求します。次に、サーバーはこの関数で要求されたデータをラップし、クライアントに送り返します。クライアントはこの関数を実行してデータにアクセスします。この方法により、JSONPは相同政策によって課されるクロスドメインの制限を克服することができます。
-
jsonpは安全ですか? JSONPは相同政策の解決策を提供していますが、独自のセキュリティリスクがあります。 JSONPはサーバーから受信したスクリプトを実行することを伴うため、サーバーが破損している場合、クロスサイトスクリプト(XSS)攻撃の可能性が開きます。したがって、信頼できるソースでのみJSONPを使用してください。
JSONPはエラー応答を処理できますか? JSONとは異なり、JSONPにはエラー処理が組み込まれていません。 JSONP要求が失敗した場合、ブラウザはエラーをスローせず、コールバック関数は実行されません。 JSONPのエラーを処理するために、指定された時間内にコールバック関数が実行されない場合、エラーをトリガーするタイムアウトメカニズムを実装できます。
-
jQueryを使用してJSONPリクエストを作成するにはどうすればよいですか? jQueryは、$ .ajax()メソッドを使用してJSONP要求を簡単に作成する方法を提供します。 $ .ajax()設定でデータ型を「jsonp」として指定する必要があります。
-
JSONPの制限は何ですか? jsonpにはいくつかの制限があります。 GETリクエストのみをサポートし、投稿またはその他のHTTPメソッドをサポートしていません。また、エラー処理機能もありません。さらに、JSONPは、相同政リをバイパスするためのアプローチにより、セキュリティリスクをもたらします。
-
JSONPは今でも使用されていますか? JSONPは過去のクロスドメイン要求の一般的なソリューションでしたが、CORSはCORS(オリジンクロスリソース共有)の出現により、使用頻度が低くなりましたが、CORSはより安全で強力なクロスドメインを提供します。リクエスト。
以上がjquery&#x27; s jsonpは例で説明しましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









