対話動作を行うことができます。サーバーが最初のページをブラウザーに送信すると、ブラウザーはサーバーに対してコールバックをして、更新されたコンテンツを要求します。HTML、区切りテキストなど、他のデータ・フォーマットも一般的に使われます。アプリケーションです。方法を使って表示します。サーバーが最初のページをブラウザーに送信すると、ブラウザーは更新されたコンテンツを取得するための呼び出しを行います。これらの呼び出しは、ブラウザーからサードパーティーのソースに対して直接行われるか、あるいはサードパーティーのコンテンツのプロキシーとして動作する、送信元のサーバーに対して行われます。マッシュアップなど想定していませんでした。ブラウザーが複数のソースからセキュアかつ確実に、非同期でコンテンツを取得するという動作を明確に考慮して設計された機能は何も組み込まれていませんでした。マッシュアップに使われていたかもしれませんが、大部分のブラウザーでは完全には実装されていないか、あるいはまったく実装されていませんでした。当初は動的に取得されたコンテンツと組み合わせて使われることはありませんでした。ページの表示要素とデータ要素は両方とも、それらを操作するためのスクリプトと一緒に送信されました。スクリプトは文書オブジェクトを表示したり、隠したり、移動したり、作成したり、破棄したりして動的効果を作成しますが、サーバーからのデータがさらに必要な場合には、そのページは新しいページと置き換えられました。データのフローはページのリロードと同期していました。アプリケーションを作成しようとする場合には、入手可能な技術の中から要求に合いそうなものを見つけ、強引に拡張する必要がありました。つの方法が採用されました。外部トランスポート機構を組み込む方法と、ブラウザー独自のオブジェクトを使ってトランスポートを行わせる方法です。アプレットを使います。セキュリティー・モデルの違いなどから、すぐに困難になりました。オブジェクトを作成しました。使われるものと想定していました。採用されるまで、広く使われることはありませんでした。オブジェクトでしたが、現在ではブラウザー内のネイティブ・オブジェクトです。限らず、任意のフォーマットでデータを転送することができます。通信機能を使っています。構文解析機能を持っています。内部機能による方法外部トランスポート機構にはさまざまな問題や依存関係が付随するため、インターネット開発コミュニティーはブラウザー固有のリモート呼び出し方法を発見し、開発するために協力してきました。した方法としては次のようなものがあります。使って外部コンテンツをロードする方法。ロードした文書からコンテンツを抽出します。ターゲットとして動的に作成することができます。この方法は、現在のブラウザーでも古いブラウザーでも、広範囲な種類のブラウザーで使用することができます。要素を使ってコンテンツに対するリクエストを送信する方法。パラメーターを使って動作を行い、そしてクッキーの中にエンコードされたコンテンツを返します。この方法は、容易に通信できるデータの量が限定されます。クッキーもサイズが限定されているためです。中にスクリプト要素を動的に作成する方法。サーバーが提供するコードは、ロードされると即座に実行されます。パラメーターを使います。したツールや方法に関する詳細については、「参考文献」を参照してください。セキュリティー・モデルから継承します。これによってスクリプトは、そのスクリプトが含まれているページがあるサーバーから送られる要素のみと対話動作を行います。あり、すべてのブラウザーはこれを実装しています。ページがサードパーティーのソースからコンテンツを取得するためには、同一生成元ポリシーを回避する必要があります。見つかるコードをロードして実行します。タグを使って複数のサイトにあるスクリプトを実行する方法は、関係するすべてのサイトの間に高度の信頼関係があることを前提としています。したスクリプトはすべて同じ実行コンテキストと同じセキュリティー・コンテキストで実行され、従って他のサイトからの情報やクッキーにアクセスできてしまう可能性があるためです。マッシュアップを実現するために現在広く使われている回避策には、どれも代償を伴います。ブラウザー用に当初意図された制限を強引に広げると、アプリケーション全体としての動作の、他の側面が影響を受けます。通常は、アプリケーションがセキュアでなくなるか、あるいはスケーラブルでなくなります。確かにセキュアですが、スケーラブルでしょうかブラウザーの同一生成元ポリシーに制限される場合、アプリケーションをホストする同じサーバーは、サードパーティーのコンテンツを取得してクライアントに送信する動作を行います。サーバーは、通常のサーバー機能の他に、サードパーティーのサービスへのクライアントとして動作します。サーバーをすべてのクライアント・トランザクション用のプロキシーとして使うということは、多数のユーザーを処理するために過度の負荷がサーバーにかかることを意味します。この方法を使うアプリケーションは、要求負荷を処理するために、複数の協調サーバー群を使ってサーバー・サイドがスケーラブルになるように設計されている必要があります。タグを使って同一生成元ポリシーを回避する方法では、クライアントはサードパーティーからコンテンツを取得することができます。この方法では、追加される各クライアントが、それぞれ独自にコンテンツ収集動作を行うため、スケーラビリティーに関するサーバーのボトルネックがなくなります。タグによりスケーラビリティーを向上する方法の利点は、同一生成元ポリシーのセキュリティー・モデルを外れるという代償を伴い、潜在的な攻撃に対して次のような脆弱性が発生します。あるサイトのスクリプトが別のサイトのクッキーにアクセスできてしまいます。コードはロードされると即座に実行されていまいます。上に戻る潜在的なソリューション上記の説明から明らかなように、マッシュアップのために現在ブラウザーが提供しているツールは、スケーラブルかつセキュアなアプリケーションを作成するためには不十分です。開発者は、現在、そして今後長期にわたり有効なソリューションを見つけなければなりません。使って通信を行います。それぞれ送信元は別ですが、お互いのフラグメント識別子を設定します。タイマーが周期的に起動することで、スクリプト同士の間で維持されます。スクリプトはお互いのアドレスを認識している必要があり、両者は協調してプロトコルに合意する必要があるため、信頼関係が保証されます。サーバーとの対話動作は各コンポーネントのローカル動作であり、スクリプト間の通信とは別であるため、クッキーが公開されることはありません。(例えば、設計された動作とは異なる変則性に依存していること、またポーリングで変更を調べる方式は、変更に対応してイベントが起動される方法よりも劣っていること、など)。他のどの方法よりも、ブラウザー固有でセキュア、そしてページ内動作、クロス・ドメインの通信を提供するという目標に近づいています。ライブラリーの最新リリースに組み込みました。マッシュアップ専用にブラウザー環境の要素を変更できないか、いくつかの方法の可能性を議論しています。呼ばれる機構を提案しています。ブラウザーは既にこの機能を実装しています。オブジェクト同士が協調して通信する方法を規定しています。この方法では、メッセージの受信者が、どのメッセージに応答するかを、メッセージのソースに応じて選択することができます。オブジェクトに対するクロス・サイトの拡張機能を提案しています。言語に関する知識が最も豊富なエキスパートです。高度な手法に関する彼の数多くのプレゼンテーションや記事を見ることができます。冗長ではないためです。つの提案を行っています。未解決の提案この困った状況に対応するための提案が、いくつか未解決のままになっています。ブラウザーが新しいオブジェクトを実装する。オブジェクトとほとんど同じように動作しますが、下記の点が変更されています。同一生成元ポリシーから除外する。ヘッダーのみを使用し、リクエスト全体としてのサイズを削減する。クッキーを転送しないことによって、クロスサイトのクッキーの問題を確実に回避する。テキストのみを受け付ける。そのため、生の実行可能コードが送られて実行されることがなくなる。通信に失敗した後、リトライ前にランダムな遅延を挿入し、一定種類の攻撃を受けにくくする。返すようにし、非同期レスポンスを元々のリクエストと容易に関連付けられるようにする。特別に二重接続をサポートすることによって、サーバーは開いている通信チャネルを使って非同期に通信を開始する。タグによって、ページをモジュールの集合に分割する。これらのモジュールは互いにセキュアでありながら、次のような方法で安全に通信することができます。サードパーティーのリソースにアクセスできる。ページとモジュールの間の協調した通信は、特定のインターフェースを通してのみ可能とする。モジュール同士は通信を行えず、モジュールはページとのみ通信することができます。ページはモジュール同士を通信させる選択をすることができます。テキストのみを使って行う。オブジェクトによる通信では、添付されたコードによってセキュリティー・リークを起こす可能性があります)。モジュールとページが互いに表示を妨害してセキュリティー問題を引き起こさないようにするための制限が提案されています。コンテンツ制限ヘッダーの仕様を提案しています。この仕様では、コンテンツの作成者が、他のサイトのコンテンツとの対話動作に関する作成者の意図を完全に表現することができます。これに準拠した実装は、ポリシーを示す文字列を含んだコンテンツ制限ヘッダーを送信します。提供されるリソースへのアクセスの制御に使用することができます。呼ばれるファイルを探します。このファイルは、そのサーバーが提供するサービスにアクセスするアプリケーションを、どのサイトがホストするかを指定します。サービス・プロバイダーが既にこのファイルを実装しています。これらの提案についての詳細は、「参考文献」を参照してください。上に戻る今後の改善に協力するために開発者としての私達は、誰もがこうした議論の結果に影響を受けます。皆さんもこうした議論に参加することで、ブラウザーを最も柔軟かつセキュアに改善するための設計に協力することができます。アプリケーションを誰もが構築できるようになります。皆さんもブラウザーの進歩を推進するブラウザー・ベンダーや組織を探し出し、そして、業界の協議会やワーキング・グループに参加してください。ニュースグループやフォーラムでブラウザー・ベンダーやツール・ベンダーと議論してください。業界のキー・プレーヤーを探し出し、彼らに参加を呼びかけてください。そのための出発点へのリンクは、この記事の「参考文献」にあります。すべてを学ぶことができます。