JP2023102637A - 電子機器、制御方法、及びプログラム - Google Patents
電子機器、制御方法、及びプログラム Download PDFInfo
- Publication number
- JP2023102637A JP2023102637A JP2022003253A JP2022003253A JP2023102637A JP 2023102637 A JP2023102637 A JP 2023102637A JP 2022003253 A JP2022003253 A JP 2022003253A JP 2022003253 A JP2022003253 A JP 2022003253A JP 2023102637 A JP2023102637 A JP 2023102637A
- Authority
- JP
- Japan
- Prior art keywords
- cors
- api
- request
- digital camera
- electronic device
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Studio Devices (AREA)
Abstract
【課題】電子機器におけるCross-Origin Resource Sharing(CORS)の設定における利便性を向上させること。【解決手段】電子機器は、Cross-Origin Resource Sharing(CORS)の有効化または無効化に関する設定を含んだCORSに関する設定のためのApplication Programming Interface(API)を公開し、そのAPIに対するHyper Text Transfer Protocol(HTTP)のリクエストを他の装置から受信した場合に、そのリクエストに基づいてCORSに関する設定を実行する。【選択図】図1
Description
本発明は、電子機器間でのオリジン間リソース共有(CORS)の設定技術に関する。
パーソナルコンピュータ、デジタルカメラ、ゲーム機、タブレット端末、携帯電話機など、多くの電子機器にカメラ機能および通信機能が搭載され、これらの電子機器間でデータを送受信することが一般的となっている。電子機器の中には、サーバ機能を搭載し、設定変更や内部データの取得などの機能をApplication Programming Interface(API)として公開しているものも存在する。その電子機器と異なる外部装置は、APIを用いて、そのような機能を外部から利用することができる。例えば、外部装置は、その公開されたAPIを用いて電子機器にリクエストを送信して、その電子機器の動作を制御し、又は、その電子機器からデバイス情報やコンテンツデータファイルを取得することができる。また、この仕組みを用いることにより、電子機器を遠隔操作するアプリケーションやシステムを構築することもできる。
アプリケーションの形態の1つとして、Webブラウザを用いたWebアプリケーションが存在する。Webアプリケーションは、Webサーバから取得したHyper Text Markup Language(HTML)やJavaScript(登録商標)等のファイルをWebブラウザ上で動作させることによって機能する。ここで、Webブラウザは、Webアプリケーションの実行中、同一オリジンポリシー(Same-Origin Policy)に従って、そのWebアプリケーションの発行元のオリジンと異なるオリジンへのアクセスをブロックする。一方で、Webアプリケーションを用いて電子機器を操作するようなシステムを構築する場合、Webアプリケーションを公開するWebサーバのオリジンと電子機器のオリジンとが異なりうる。このため、同一オリジンポリシーの制約により、Webアプリケーションを用いて電子機器へリクエストを送信することができない場合があることが想定される。
同一オリジンポリシーを一部解除するための仕組みとして、オリジン間リソース共有(Cross-Origin Resource Sharing、CORS)という仕組みが存在する。CORSでは、例えば、サーバが異なるオリジンのWebアプリケーションからリクエストを受信した際に、そのリクエストを許可するか否かを決定し、リクエストが許可された場合に、Webアプリケーションからそのサーバへのアクセスが可能となる。リクエスト先のサーバである電子機器がCORSに対応することにより、上述のようなWebアプリケーションを用いたシステムにおいて、Webブラウザから電子機器へリクエストを送信することができるようになる。特許文献1には、CORSを用いて、クロスドメイン通信を可能とする技術が記載されている。
CORSによる、異なるオリジン間の通信を行うためには、リクエスト先のサーバにおいて、CORSの設定を行う必要がある。一方で、サーバとして機能する電子機器が、ユーザによる操作入力を受け付ける能力が高くない場合にはその設定を行うことができない場合がある。このような電子機器は、固定のCORS設定を保持することによって、CORSによる処理を実行することができる。しかしながら、オリジンが定期的に変更され、CORSの設定を変更する必要がある場合への対処が容易ではなく、利便性が低い。
本発明は、電子機器におけるCORSの設定における利便性向上技術を提供する。
本発明の一態様による電子機器は、Cross-Origin Resource Sharing(CORS)の有効化または無効化に関する設定を含んだCORSに関する設定のためのApplication Programming Interface(API)を公開する公開手段と、前記APIに対するHyper Text Transfer Protocol(HTTP)のリクエストを他の装置から受信した場合に、当該リクエストに基づいて前記CORSに関する設定を実行する実行手段と、を有する。
本発明によれば、電子機器におけるCORSの設定における利便性を向上させることができる。
以下、添付図面を参照して実施形態を詳しく説明する。なお、以下の実施形態は特許請求の範囲に係る発明を限定するものではない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一若しくは同様の構成に同一の参照番号を付し、重複した説明は省略する。
<システム構成>
図1に、本実施形態に係るシステム構成例を示す。本実施形態のシステムは、デジタルカメラ100、スマートデバイス200、及び、Webサーバ300を含んで構成される。なお、これらは電子機器の一例であり、他の形態の電子機器が用いられてもよい。例えば、デジタルカメラ100は、ここでは、サーバとして機能可能であり、かつ、相対的にユーザからの情報入力能力の低い電子機器の例であり、例えばスキャナやプリンタなどの、その他の形態のデバイスであってもよい。また、スマートデバイス200は、Webブラウザを有し、Webアプリケーションを利用可能な電子機器の一例であり、例えばスマートフォンでありうるが、例えばパーソナルデジタルアシスタント(PDA)などの他の形態の電子機器であってもよい。また、デジタルカメラ100やスマートデバイス200は、例えば、携帯型のメディアプレーヤ、タブレットデバイス、パーソナルコンピュータ(PC)などの情報処理装置であってもよい。また、Webサーバ300は、Webアプリケーションを提供可能なサーバの一例であり、汎用のコンピュータなどによって実装されうるが、同様の機能を有する任意の形態の電子機器でありうる。
図1に、本実施形態に係るシステム構成例を示す。本実施形態のシステムは、デジタルカメラ100、スマートデバイス200、及び、Webサーバ300を含んで構成される。なお、これらは電子機器の一例であり、他の形態の電子機器が用いられてもよい。例えば、デジタルカメラ100は、ここでは、サーバとして機能可能であり、かつ、相対的にユーザからの情報入力能力の低い電子機器の例であり、例えばスキャナやプリンタなどの、その他の形態のデバイスであってもよい。また、スマートデバイス200は、Webブラウザを有し、Webアプリケーションを利用可能な電子機器の一例であり、例えばスマートフォンでありうるが、例えばパーソナルデジタルアシスタント(PDA)などの他の形態の電子機器であってもよい。また、デジタルカメラ100やスマートデバイス200は、例えば、携帯型のメディアプレーヤ、タブレットデバイス、パーソナルコンピュータ(PC)などの情報処理装置であってもよい。また、Webサーバ300は、Webアプリケーションを提供可能なサーバの一例であり、汎用のコンピュータなどによって実装されうるが、同様の機能を有する任意の形態の電子機器でありうる。
デジタルカメラ100とスマートデバイス200は、例えばネットワークを介して又は直接、通信可能に構成されているものとする。また、スマートデバイス200とWebサーバ300も、例えばネットワークを介して又は直接、通信可能に構成されているものとする。一例において、スマートデバイス200は、デジタルカメラ100と直接接続し、Webサーバ300とインターネット等のネットワークを介して接続しうる。また、スマートデバイス200は、Webサーバ300と直接接続し、デジタルカメラ100とインターネット等のネットワークを介して接続してもよい。また、スマートデバイス200は、デジタルカメラ100及びWebサーバ300との間の通信を、いずれも直接行ってもよいし、ネットワークを介して行ってもよい。また、スマートデバイス200は、デジタルカメラ100及びWebサーバ300とネットワークを介して接続する場合、共通のネットワークを介して接続してもよいし、個別の2つのネットワークを介してそれぞれ接続してもよい。なお、本実施形態では触れないが、デジタルカメラ100がWebサーバ300と接続してもよい。このように、デジタルカメラ100、スマートデバイス200及びWebサーバ300は、相互に通信可能な通信装置である。なお、これらの装置は、例えば、Web情報を送受信可能なプロトコルを用いて通信可能に構成され、本実施形態では、少なくともHTTP(Hyper Text Transfer Protocol)を使用可能であるものとする。
本実施形態では、一例として、デジタルカメラ100がサーバ機能を有し、API400を公開しているものとする。なお、APIは、Application Programming Interfaceの略である。そして、スマートデバイス200は、デジタルカメラ100のAPI400を操作するためのアプリケーション301を有する。ユーザは、このアプリケーション301を操作することによって、デジタルカメラ100のAPI400に対するリクエストを送信することができる。一方で、Webサーバ300は、デジタルカメラ100のAPI400を操作するためのWebアプリケーション302を保持しているものとする。Webアプリケーション302は、例えば、HTML(Hyper Text Markup Language)ファイルやJavaScript(登録商標)ファイルによって構成される。Webサーバ300は、クライアントからのリクエストに対して、応答として、Webアプリケーション302を構成するファイルをクライアントへ提供することができる。本実施形態では、スマートデバイス200がWebブラウザ303を有し、ユーザがWebブラウザ303を用いてWebサーバ300へアクセスすることにより、Webアプリケーション302を構成するファイルがWebブラウザ303に取り込まれる。ユーザは、取り込んだWebアプリケーション302を操作することにより、デジタルカメラ100のAPI400に対して、リクエストを送信することができる。
一方で、Webアプリケーション302の発行元がWebサーバ300であるため、Webブラウザ303は、同一オリジンポリシーの制約により、デジタルカメラ100に対してリクエストを送信できないことが想定される。オリジンは、例えば、http://example.com:80のような、スキーム(「http」)、ホスト(「example.com」)、及び、ポート番号(「80」)の組み合わせから構成される。2つのオリジンのそれぞれの要素を比較した際に、1つでも異なる要素がある場合には、その2つオリジンは異なるオリジンと判定される。
この同一オリジンポリシーの制約を解除するために、上述のように、オリジン間リソース共有(Cross-Origin Resource Sharing、CORS)が使用されうる。CORSが使用される場合、例えば、Webアプリケーション302が、HTTPヘッダに特定の情報を付加して、サーバ(デジタルカメラ100)のAPI400に対してリクエストを送信する。そして、リクエスト先のサーバ(デジタルカメラ100)は、Webアプリケーション302のオリジンからのアクセスを許可するための制御を行う。異なるオリジンからのリクエストには「Origin」ヘッダが付加され、このOriginヘッダの値にはリクエストの送信元のオリジン(Webアプリケーション302のオリジン)が設定される。例えば、Webブラウザ303のJavascriptエンジンによって、このヘッダが付加される。サーバ(デジタルカメラ100)は、リクエストを受信すると、このOriginヘッダを確認し、そのオリジンからのリクエストを許可するか否かを判定する。サーバは、例えば、許可するオリジンの情報(リスト)を保持しており、Originヘッダの値と保持しているオリジンの情報とを比較して、リクエストを許可するか否かを判定する。そして、サーバは、リクエストを許可する場合に、「Access-Control-Allow-Origin」ヘッダを付加して、リクエストの送信元(スマートデバイス200)へレスポンスを返す。このときの値には、Originヘッダの値が設定される。一方で、サーバは、リクエストを許可しない場合には「Access-Control-Allow-Origin」ヘッダを付加せずにレスポンスを返す。この場合、Status Codeを「403 Forbidden」に設定したレスポンスメッセージによって応答することが推奨されている。
また、異なるオリジンからのリクエストのうち、メソッドやヘッダの内容からサーバへの影響が高いと判定されるリクエストの場合、このリクエストは直ちに送信されず、まずプリフライトリクエストが送信されうる。プリフライトリクエストは、Webブラウザによって、OPTIONSメソッドでサーバへ送信される。プリフライトリクエストは、サーバがその異なるオリジンからのリクエストを許可するか否かを事前に確認するために行われる。プリフライトリクエストも、Originヘッダが付加されて送信され、サーバは、この値によってアクセスを許可するか否かを判定する。そして、サーバは、アクセスを許可する場合、「Access-Control-Allow-Origin」ヘッダを付加したレスポンスを返す。一方で、サーバは、アクセスを許可しない場合、「Access-Control-Allow-Origin」ヘッダが付加されていないレスポンスを返す。
CORSを用いる場合、サーバにおいて、事前にCORSの設定を行う必要がある。CORSの設定は、例えば、アクセスを許可するオリジンの指定、アクセスを許可するHTTPメソッドの設定、アクセスを許可するHTTPヘッダの設定などを含む。これらの設定は、一般に、コンソール等を用いて外部から入力される。
一方で、デジタルカメラ100などの一部の電子機器は、外部のコンソールを使用できない場合があり、また、情報を入力するインタフェースを有していても、その入力インタフェースが十分ではなく、設定作業が煩雑となりうる。このため、本実施形態では、このような入力インタフェースが十分でないサーバ(電子機器)におけるCORSの設定の利便性を向上させる技術を提供する。なお、本実施形態で説明する構成及び処理は、入力インタフェースを十分に有しない電子機器に対して非常に有用であるが、入力インタフェースが豊富でありユーザ操作の受け付け能力に優れている電子機器に対しても有用であることに留意されたい。
<デジタルカメラ100の構成>
図2に、デジタルカメラ100の構成例を示す。デジタルカメラ100は、例えば、制御部101、撮像部102、不揮発メモリ103、作業用メモリ104、操作部105、表示部106、記憶媒体110、接続部111、近距離無線通信部112、及び近接無線通信部113を含んで構成される。
図2に、デジタルカメラ100の構成例を示す。デジタルカメラ100は、例えば、制御部101、撮像部102、不揮発メモリ103、作業用メモリ104、操作部105、表示部106、記憶媒体110、接続部111、近距離無線通信部112、及び近接無線通信部113を含んで構成される。
制御部101は、例えば、CPUやMPUなどのプロセッサを含んで構成される。なお、CPUはCentral Processing Unitの、MPUはMicro Processing Unitの略である。また、マルチコアのプロセッサが使用されてもよく、制御部101は、1つ以上のプロセッサによって構成されうる。また、制御部101は、例えば、フィールドプログラマブルゲートアレイ(FPGA)、デジタルシグナルプロセッサ(DSP)、特定用途向け集積回路(ASIC)等を含んで構成されてもよい。制御部101は、例えば、入力された信号や、後述のプログラムに従って、デジタルカメラ100の各機能部を制御する。なお、制御部101が装置全体を制御するのに代えて、制御部101を含んだ又は制御部101の外部の、複数のハードウェアが処理を分担することによって、装置全体の制御が行われてもよい。
撮像部102は、例えば、光学レンズユニットと絞り・ズーム・フォーカスなど制御する光学系と、光学レンズユニットを経て導入された光(映像)を電気的な映像信号に変換するための撮像素子等を含んで構成される。撮像素子は、一般的には、CMOS(Complementary Metal Oxide Semiconductor)や、CCD(Charge Coupled Device)が利用される。撮像部102は、制御部101による制御の下で、レンズで結像された被写体光を、撮像素子により電気信号に変換し、ノイズ低減処理などを行いデジタルデータを画像データとして出力する。本実施形態のデジタルカメラ100は、例えば、画像データを、DCF(Design Rule for Camera File system)の規格に従って、記録媒体110に記録する。
不揮発性メモリ103は、電気的に消去・記録可能な不揮発性のメモリであり、制御部101で実行される後述のプログラム等が格納される。不揮発性メモリ103は、例えば、読み出し専用メモリ(ROM)によって構成されうる。作業用メモリ104は、撮像部102で撮像された画像データを一時的に保持するバッファメモリや、表示部106の画像表示用メモリ、制御部101の作業領域等として使用されるメモリである。作業用メモリ104は、例えば、ランダムアクセスメモリ(RAM)によって構成されうる。
操作部105は、デジタルカメラ100に対する操作や指示をユーザから受け付けるために用いられる。
操作部105は、例えば、ユーザがデジタルカメラ100の電源のON/OFFを指示するための電源ボタンや、撮影を指示するためのレリーズスイッチ、画像データの再生を指示するための再生ボタンを含む。また、操作部105は、例えば、接続部111を介して外部機器との通信を開始するための専用の接続ボタンなどの操作部材を含んでもよい。なお、レリーズスイッチは、SW1およびSW2を有する。レリーズスイッチが、いわゆる半押し状態となることにより、SW1がONとなる。これにより、AF(オートフォーカス)処理、AE(自動露出)処理、AWB(オートホワイトバランス)処理、EF(フラッシュプリ発光)処理等の撮影準備を行うための指示が受け付けられる。また、レリーズスイッチが、いわゆる全押し状態となることにより、SW2がONとなる。これにより、撮影を行うための指示が受け付けられる。表示部106は、例えば液晶モニタにより構成され、撮影の際のビューファインダー画像の表示、撮影した画像データの表示、対話的な操作のための文字表示などを行う。なお、デジタルカメラ100は、必ずしも表示部106を内蔵していなくてもよい。すなわち、デジタルカメラ100は、内蔵された表示部106に代えて又はこれに加えて、外部ディスプレイなどの表示部106と接続することができ、表示部106における画面表示を制御する表示制御機能を有しうる。なお、操作部105と表示部106は、タッチパネルディスプレイ等を用いて、一体に構成されてもよい。
記録媒体110は、撮像部102から出力された画像データを記録することができる。記録媒体110は、デジタルカメラ100に着脱可能なように構成されてもよいし、デジタルカメラ100に内蔵されていてもよい。すなわち、記録媒体110は、例えばSDカードメモリやUSBメモリなどの外部メモリであってもよく、この場合、デジタルカメラ100は、そのような外部メモリを接続するためのインタフェースとその制御のための機能を含みうる。また、記録媒体110は、例えば、内蔵のSSD(ソリッドステートドライブ)、HDD(ハードディスクドライブ)、メモリなどの記憶デバイスによって構成されてもよい。
接続部111は、外部装置をデジタルカメラ100に接続するためのインタフェースとその制御のための機能を含んで構成される。デジタルカメラ100は、例えば、接続部111を介して外部装置とデータの受け渡しを行うことができる。例えば、撮像部102において生成された画像データが、接続部111を介して外部装置に送信されうる。一例において、接続部111は、Institute of Electrical and Electronics Engineers(IEEE)802.11規格シリーズに準拠した無線LANの通信インタフェースを含みうる。この場合、制御部101は、接続部111を制御することによって、外部装置との無線接続を確立して無線通信を実行しうる。なお、無線LANは一例であり、接続部111は、例えば赤外線通信やEthernet(登録商標)などの有線方式による接続機能を有してもよい。
近距離無線通信部112は、例えば無線通信のためのアンテナと、無線信号を処理するための変復調回路や通信コントローラとを含んで構成される。近距離無線通信部112は、変調した無線信号をアンテナから出力し、またアンテナで受信した無線信号を復調することにより、例えば、IEEE802.15の規格(いわゆるBluetooth(登録商標))に準拠する無線通信を行う。近距離無線通信部112は、一例において、低消費電力の無線通信規格であるBluetooth Low Energy(BLE)のバージョン4.0を使用しうる。Bluetoothを用いた通信は、無線LANを用いた通信と比べて、通信可能な距離が短く、通信可能な範囲が狭い。また、Bluetoothを用いた通信は、無線LANを用いた通信と比べて通信速度が遅い。その一方で、Bluetoothを用いた通信は、無線LANを用いた通信と比べて消費電力が少ない。デジタルカメラ100は、近距離無線通信部112を介して、外部装置とデータを送受信することができる。一例において、デジタルカメラ100は、外部装置から撮影の命令を受信した場合に撮像部102を制御して撮影動作を行い、無線LANを用いた通信によるデータの送受信のための命令を受信した場合に接続部111を制御して無線LANの通信を実行する。
近接無線通信部113は、例えば無線通信のためのアンテナと、無線信号を処理するための変復調回路や通信コントローラとを含んで構成される。近接無線通信部113は、変調した無線信号をアンテナから出力し、またアンテナで受信した無線信号を復調する。これにより、近接無線通信部113は、例えば、ISO/IEC 18092の規格(いわゆるNFC:Near Field Communication)に準拠する非接触近接通信を行う。なお、これは一例であり、近接無線通信部113は、NFC以外の他の無線通信規格に準拠した通信を行うように構成されてもよい。例えば、近接無線通信部113は、ISO/IEC 14443の規格に準拠した非接触近接通信を実行するように構成されてもよい。近接無線通信部113は、例えば、デジタルカメラ100の側部に配置される。近接無線通信部113は、例えば、外部装置との間で、互いの近接無線通信部を近接させることにより接続を確立して通信を実行する。なお、近接無線通信部113を用いた接続では、外部装置の近接無線通信部を近接無線通信部113に接触させる必要はない。すなわち、NFCなどの近接無線規格による通信は、一定の距離だけ離れていても通信を実行可能である。このため、接続の確立のためには、近接無線通信を行う2つの通信装置を通信を実行可能な範囲まで近接させるのみで足りる。以下の説明では、近接無線通信が可能な範囲まで通信装置同士を近付けることを「近接させる」と言う。なお、2つの通信装置が共に近接無線通信部を有していても、その2つの通信装置の近接無線通信部の間の距離が近接無線通信が可能でない程度に離間している場合には通信は開始されない。また、2つの通信装置の近接無線通信部の間の距離が十分に近く、接続が確立されている間に、それらの近接無線通信部が、近接無線通信を実行可能でない程度に離間した場合には、その接続は切断される。
なお、デジタルカメラ100の複数の通信機能は、1つまたは少数のアンテナを共用するように構成されてもよいし、個別のアンテナがそれぞれの通信機能のために用意されてもよい。
接続部111が無線LANの通信を提供するとすると、一般に、接続部111を用いた通信の通信速度が、近接無線通信部113を用いた通信の通信速度よりも速い。また、接続部111の通信可能範囲が、近接無線通信部113の通信可能範囲より広い。一方で、近接無線通信部113は、通信可能範囲の狭さによって通信相手を限定することができるため、接続部111を用いた通信で必要な暗号鍵の交換等の処理を必要としない。すなわち、近接無線通信部113は、接続部111を用いる場合と比して、処理負荷の低い通信を行うことができる。なお、接続部111は、無線LANの通信において、インフラストラクチャモードにおけるアクセスポイント(AP)として動作するAPモードと、インフラストラクチャモードにおけるクライアント(CL)として動作するCLモードとで動作可能でありうる。デジタルカメラ100は、接続部111をCLモードで動作させることにより、インフラストラクチャモードにおけるCL機器として動作することができる。デジタルカメラ100は、CL機器として動作する場合、周辺のAP機器に接続することにより、そのAP機器が形成するネットワークに参加することができる。また、デジタルカメラ100は、接続部111をAPモードで動作させることにより、ネットワークを形成し、デジタルカメラ100の周辺の装置をそのネットワークへ参加させうる。なお、デジタルカメラ100は、この場合、APの一種ではあるが、より機能が限定された簡易的なAPとして動作しうる。簡易的なAPは、例えば、CL機器から受信したデータをインターネットプロバイダなどに転送するゲートウェイ機能を有しないAPである。この場合、簡易的なAPは、自装置が形成したネットワークに参加している他の装置からデータを受信しても、それをインターネットなどのネットワークに転送することはできない。ただし、デジタルカメラ100は、例えばネットワークに有線接続されている場合などにおいて、簡易的なAPではなく、ゲートウェイ機能を有する通常のAPとして機能することが可能に構成されてもよい。
<スマートデバイス200の内部構成>
図3に、スマートデバイス200の構成例を示す。スマートデバイス200は、例えば、制御部201、撮像部202、不揮発メモリ203、作業用メモリ204、操作部205、表示部206、記憶媒体210、接続部211、近距離無線通信部212、近接無線通信部213を含んで構成される。なお、これらの機能部は、デジタルカメラ100において同じ名称が付された各機能部と同様であるため、説明については省略する。スマートデバイス200は、一例において、さらに、公衆網通信部214、マイク215、及びスピーカ216を含んで構成される。
図3に、スマートデバイス200の構成例を示す。スマートデバイス200は、例えば、制御部201、撮像部202、不揮発メモリ203、作業用メモリ204、操作部205、表示部206、記憶媒体210、接続部211、近距離無線通信部212、近接無線通信部213を含んで構成される。なお、これらの機能部は、デジタルカメラ100において同じ名称が付された各機能部と同様であるため、説明については省略する。スマートデバイス200は、一例において、さらに、公衆網通信部214、マイク215、及びスピーカ216を含んで構成される。
公衆網通信部214は、例えば無線通信のためのアンテナと、無線信号を処理するための変復調回路や通信コントローラとを含んで構成される。公衆網通信部214は、例えばセルラ通信システムの基地局や他の端末と接続を確立して公衆網による無線通信を行うための通信インタフェースを提供する。マイク215は、音声入力を受け付けるインタフェースであり、スピーカ216は音声出力のためのインタフェースである。スマートデバイス200は、例えば、制御部201による制御の下で、公衆網通信部214を介して公衆網の基地局へ接続すると共に、マイク215およびスピーカ216を介して音声信号の入力と出力を行うことにより、通話機能を提供しうる。なお、スマートデバイス200の複数の通信機能は、1つまたは少数のアンテナを共用するように構成されてもよいし、個別のアンテナがそれぞれの通信機能のために用意されてもよい。
<デジタルカメラを外部装置から制御するAPIの構成>
本実施形態では、デジタルカメラ100が、外部装置によって自装置を制御するためのAPIを提供する。特に、本実施形態では、デジタルカメラ100のCORSの設定を行うことを可能とするAPIが提供される。デジタルカメラ100と異なる外部装置(例えばスマートデバイス200)は、そのAPIを利用して、デジタルカメラ100に要求を送信することにより、デジタルカメラ100の動作制御を行うことができる。また、外部装置は、このAPIを利用して、デジタルカメラ100からのデバイス情報やコンテンツデータファイルの取得を実現できる。このAPIについて、図4を用いて説明する。
本実施形態では、デジタルカメラ100が、外部装置によって自装置を制御するためのAPIを提供する。特に、本実施形態では、デジタルカメラ100のCORSの設定を行うことを可能とするAPIが提供される。デジタルカメラ100と異なる外部装置(例えばスマートデバイス200)は、そのAPIを利用して、デジタルカメラ100に要求を送信することにより、デジタルカメラ100の動作制御を行うことができる。また、外部装置は、このAPIを利用して、デジタルカメラ100からのデバイス情報やコンテンツデータファイルの取得を実現できる。このAPIについて、図4を用いて説明する。
デジタルカメラ100の不揮発性メモリ103には、APIがプログラムとして予め保存される。そして、デジタルカメラ100では、通信部111を介して外部装置との通信が確立すると、制御部101によってAPIが作業用メモリ104に展開され、外部装置からのAPIのリクエストが待ち受けられる。そして、制御部101は、外部装置からのAPIのリクエストを検出すると、リクエストされたAPIの種類に応じた処理を実行し、その結果をレスポンスとして外部装置に返す。なお、APIは、デジタルカメラ100が規定した通信プロトコル上で実行され、外部装置は、その規定された通信プロトコルを用いてデジタルカメラ100と通信を行い、APIをリクエストする。なお、本実施形態では、HTTPを用いてAPIのリクエストおよび応答が実行されるものとして説明するが、他の通信プロトコルが用いられてもよい。なお、HTTPについては、周知の通りであるため、ここでは説明しない。HTTPを用いたAPIのリクエストは、外部装置が利用するAPIのURLに対して、HTTPリクエストボディにJSONの形式で必要な引数が記述されて、GET、PUT、POSTメソッドを用いて送信されることにより行われる。なお、URLは、Uniform Resource Locatorの略であり、JSONは、Javascript Object Notationの略である。リクエストされたAPIに関する処理の結果の返送は、HTTPレスポンスボディに付加されて、外部装置に返送される。
図4のAPIリスト400は、デジタルカメラ100が公開するAPIの種類とその内容とを示している。なお、図4では、便宜上、6つのAPIを示しているが、公開APIの数は6つに限定されず、また、この6つのAPIが必ず使用されなければならないわけではない。すなわち、ここで説明するAPIは、デジタルカメラ100が公開するAPIの一例であり、以下に示す6つのAPI以外のAPIが公開されてもよいし、以下に示す6つのAPIのうちの1つ以上が公開されなくてもよい。
API401は、デジタルカメラ100が公開するAPIのURL一覧を返すAPIである。外部装置は、引数無しでこのAPIをデジタルカメラ100にリクエストすることにより、デジタルカメラ100が公開する全APIのURLを、JSON形式で記述された配列として取得することができる。
API402(/cors/corssetting)は、デジタルカメラ100が行うCORS処理を有効とするか無効とするかを切り替えるためのAPIである。外部装置は、CORS処理を有効化することを示す情報(「enable」)またはCORS処理を無効化することを示す情報(「disable」)をリクエストボディに付加し、PUTメソッドでリクエストを送信する。デジタルカメラ100は、リクエストされた情報を作業用メモリ104に保持し、以降のリクエスト受信時にCORS処理を行うか否かの判定を行う際にこの情報を用いる。デジタルカメラ100は、情報の保持を正常に完了した場合、変更されたCORS処理の状態を示す情報をレスポンスボディに付加し、Status Codeを「200 OK」として外部装置へ返送する。
API403(/cors/origin)は、CORS処理時に異なるオリジンからのリクエストに対するレスポンスを許可するか否かを判定する際に用いられる「許可するオリジン」を指定するためのAPIである。外部装置は、許可すべきオリジンを示す情報をリクエストボディに付加し、PUTメソッドでリクエストを送信する。デジタルカメラ100は、リクエストされた情報を作業用メモリ104に保持し、以降のリクエスト受信時のCORS処理でレスポンスを許可するか否かの判定を行う際にこの情報を用いる。デジタルカメラ100は、情報の保持が正常に完了した場合、変更された許可されるべきオリジンを示す情報をレスポンスボディに付加し、Status Codeを「200 OK」として外部装置へ返送する。
API404(/cors/header)は、CORS処理時に異なるオリジンからのリクエストに対するレスポンスを許可するか否かを判定する際に用いられる「許可するヘッダ」を追加するためのAPIである。外部装置は、許可すべきヘッダのキーとバリューをリクエストボディに付加し、PUTメソッドでリクエストを送信する。デジタルカメラ100は、リクエストされた情報を作業用メモリ104で保持し、以降のリクエスト受信時のCORS処理において、レスポンスを許可するか否かの判定を行う際にこの情報を用いる。デジタルカメラ100は、情報の保持が正常に完了した場合、許可されるべきヘッダとして追加されたヘッダを示す情報をレスポンスボディに付加し、Status Codeを「200 OK」として外部装置へ返送する。
API405(/control/shutter)は、デジタルカメラ100のシャッターボタンの操作を行うためのAPIである。このAPIによれば、シャッターボタンの操作として、例えば、全押し(「full_press」)、半押し(「half_press」)、離す(「release」)が指定されうる。外部装置は、シャッターボタンの操作を示す情報をリクエストボディに付加し、POSTメソッドでリクエストを送信する。デジタルカメラ100は、リクエストされた情報に従ってシャッターボタンの操作を行う。例えば、デジタルカメラ100は、全押しの指示を受信した場合に写真撮影を行う。デジタルカメラ100は、正常にシャッターボタンの操作が完了した場合、レスポンスボディを含まずに操作結果を外部装置へ返送する。
API406は、デジタルカメラ100が公開している各APIの対応状況を取得するためのAPIである。外部装置は、各APIをOPTIONSメソッドでリクエストしうる。デジタルカメラ100は、CORS処理が無効化されている場合、またはリクエストヘッダにOriginヘッダがない場合、「Allow」ヘッダにそのAPIがサポートするメソッドを付加したレスポンスを外部装置へ返送する。なお、この場合に、Status Codeは「204 No Content」とされる。デジタルカメラ100は、CORS処理が有効であり、かつ、レスポンスを許可すると判定した場合、作業用メモリ104に保持する「許可するオリジン」や「許可するヘッダ」の情報に基づくレスポンスを返信する。例えば、「Access-Control-Allow-Origin」ヘッダに情報が付加され、Status Codeが「204 No Content」とされたレスポンスが外部装置へ返送される。また、例えば、「Access-Control-Allow-Header」ヘッダに情報が付加され、Status Codeが「204 No Content」とされたレスポンスが外部装置へ返送されてもよい。Webブラウザが異なるオリジンへのリクエストの実行時に送信するプリフライトリクエストへの応答は、このAPI406を用いて行われる。
なお、デジタルカメラ100とスマートデバイス200の通信がHTTPによって行われる場合、引数の受け渡しはクエリ・ストリングによって行われてもよい。クエリ・ストリングは、URLにデータを付加することを可能とする手法であり、この手法を用いて、引数のデータが、URLの末尾に「?」及び「変数=パラメータ」によって記述されてもよい。
<リクエスト受信時の処理>
続いて、図5を用いて、API400に対するリクエストを受信したときの、デジタルカメラ100の処理の流れの例について説明する。本処理は、デジタルカメラ100が、サーバ機能を起動したことに応じて開始される。なお、本処理は、例えばデジタルカメラ100の制御部101が、不揮発メモリ103に記憶されたプログラムを実行することにより実現されうる。ただし、以下に示す処理の一部または全部が専用のハードウェアによって実行されてもよい。
続いて、図5を用いて、API400に対するリクエストを受信したときの、デジタルカメラ100の処理の流れの例について説明する。本処理は、デジタルカメラ100が、サーバ機能を起動したことに応じて開始される。なお、本処理は、例えばデジタルカメラ100の制御部101が、不揮発メモリ103に記憶されたプログラムを実行することにより実現されうる。ただし、以下に示す処理の一部または全部が専用のハードウェアによって実行されてもよい。
デジタルカメラ100は、処理の開始後、外部装置からのリクエストを待ち受ける(S501)。デジタルカメラ100は、外部装置からのリクエストを受信すると(S501でYES)、リクエストを処理する(S502)。デジタルカメラ100は、リクエストの処理において、まず、自装置においてCORS処理が有効とされているか否かを判定する(S503)。デジタルカメラ100は、例えば、作業用メモリ104を参照し、CORS処理が有効であることを示す設定値が作業用メモリ104に格納されているかを確認することにより、この判定を行う。デジタルカメラ100は、CORS処理が有効であることを示す設定値が作業用メモリ104に格納されている場合に、CORS処理が有効であると判定する。一方で、デジタルカメラ100は、CORS処理が有効であることを示す設定値が作業用メモリ104に格納されていない場合に、CORS処理が無効であると判定する。なお、デジタルカメラ100は、CORS処理が無効であることを示す設定値が作業用メモリ104に格納されている場合にCORS処理が無効であると判定してもよい。また、デジタルカメラ100は、CORS処理が無効であることを示す設定値が作業用メモリ104に格納されていない場合にCORS処理が有効であると判定してもよい。なお、CORS処理の有効化又は無効化は、API402を用いて外部装置によって設定されうる。
デジタルカメラ100は、CORS処理が無効であると判定した場合(S503でNO)、リクエストに応じた処理を行う(S504)。デジタルカメラ100は、例えばAPI401に対するリクエストに対して、自装置が公開するAPIのURLを用いて、JSON形式のレスポンスメッセージを生成する。また、デジタルカメラ100は、例えばAPI405に対するリクエストに対して、リクエストボディを解析して、リクエストに応じたシャッター操作処理を実行する。そして、デジタルカメラ100は、シャッター操作結果に応じたJSON形式のレスポンスメッセージを生成する。このように、デジタルカメラ100は、レスポンス送信直前までの処理を実行する。そして、デジタルカメラ100は、生成したレスポンスメッセージを送信して(S511)、処理を終了する。
デジタルカメラ100は、CORS処理が有効であると判定した場合(S503でYES)、リクエストがOriginヘッダを含むか否かを判定する(S505)。デジタルカメラ100は、リクエストがOriginヘッダを含まないと判定した場合(S505でNO)、このリクエストは異なるオリジンからのリクエストではないため、CORS処理を行わずに、リクエストに応じた処理を実行する(S504)。そして、デジタルカメラ100は、その処理において生成したレスポンスメッセージを送信して(S511)、処理を終了する。
デジタルカメラ100は、リクエストがOriginヘッダを含むと判定した場合(S505でYES)、そのOriginヘッダの値と、作業用メモリ104において保持されている、許可するオリジンの設定値とを比較する(S506)。そして、デジタルカメラ100は、その比較の結果に基づいて、レスポンスを許可するか否かを判定する(S507)。なお、許可するオリジンは、API403を用いて外部装置によって設定されうる。なお、許可するオリジンの設定値が「*」である場合、すべてのオリジンへのレスポンスが許可される。「*」以外の値が設定されている場合は、各オリジンを、スキーム、ホスト、及び、ポート番号に分け、それぞれを比較し、全てが同じ場合にレスポンスが許可される。
デジタルカメラ100は、レスポンスを許可すると判定した場合(S507でYES)、リクエストに応じた処理を行う(S508)。なお、ここでの処理の内容はS504と同様であるため、説明は省略する。デジタルカメラ100は、処理を終了すると、レスポンスメッセージのヘッダに「Access-Control-Allow-Origin」ヘッダを追加する(S509)。なお、レスポンスメッセージでは、ヘッダの値として、リクエストのOriginヘッダの値が使用される。そして、デジタルカメラ100は、生成したレスポンスメッセージを送信して(S511)、処理を終了する。
デジタルカメラ100は、レスポンスを許可しないと判定した場合(S507でNO)、リクエストに応じた処理を行わず、レスポンスのヘッダへの「Access-Control-Allow-Origin」ヘッダの付加も行わない。そして、デジタルカメラ100は、Status Codeを「403 Forbidden」に設定したレスポンスメッセージを生成し(S510)、そのレスポンスメッセージを送信して(S511)、処理を終了する。
<Webアプリケーション実行時の通信シーケンス>
続いて、図6を用いて、図1のシステムにおいて、スマートデバイス200からWebアプリケーション302を用いてデジタルカメラ100を操作する処理の流れについて説明する。なお、デジタルカメラ100とスマートデバイス200との間、および、スマートデバイス200とWebサーバ300との間において、事前に接続が確立されているものとする。一例において、スマートデバイス200は、公衆網等を介してインターネット等のネットワークに接続して、そのネットワークを介してWebサーバ300と接続し、一方で、デジタルカメラ100と近距離又は近接無線通信により直接接続しうる。デジタルカメラ100は、スマートデバイス200からリクエストを受信すると、図5を用いて説明した処理を実行し、スマートデバイス200へレスポンスを送信する。
続いて、図6を用いて、図1のシステムにおいて、スマートデバイス200からWebアプリケーション302を用いてデジタルカメラ100を操作する処理の流れについて説明する。なお、デジタルカメラ100とスマートデバイス200との間、および、スマートデバイス200とWebサーバ300との間において、事前に接続が確立されているものとする。一例において、スマートデバイス200は、公衆網等を介してインターネット等のネットワークに接続して、そのネットワークを介してWebサーバ300と接続し、一方で、デジタルカメラ100と近距離又は近接無線通信により直接接続しうる。デジタルカメラ100は、スマートデバイス200からリクエストを受信すると、図5を用いて説明した処理を実行し、スマートデバイス200へレスポンスを送信する。
図6において、まず、スマートデバイス200が、デジタルカメラ100へ、API401に対するリクエストを送信する(S601)。本実施形態では、このリクエストが、アプリケーション301において生成される。このリクエストは、CORS設定を行うためには必須ではないが、スマートデバイス200がデジタルカメラ100との間で通信を実行可能であることの確認や、APIのサポートの状況を確認するために行われうる。デジタルカメラ100は、このリクエストを受信すると、この時点においてCORS処理が有効ではないことに基づいて、図5のS504においてリクエストを処理し、スマートデバイス200へレスポンスを返送する(S602)。
続いて、スマートデバイス200が、デジタルカメラ100へ、API403に対するリクエストを送信する(S603)。このリクエストも、アプリケーション301によって生成される。このリクエストでは、Webサーバ300のオリジンを、許可するオリジンとして指定する。一例において、ワイルドカード「*」を用いてオリジンを指定してもよい。Webサーバ300のオリジンは、事前にアプリケーション301に組み込まれていてもよいし、アプリケーション301においてオリジンを入力する仕組みを用意し、その仕組みを用いて指定されてもよい。デジタルカメラ100は、このリクエストを受信すると、この時点においてCORS処理が有効ではないことに基づいて、図5のS504においてリクエストを処理し、スマートデバイス200へレスポンスを返送する(S604)。なお、S603及びS604の手続きが正常に処理された場合、CORS処理の設定値が、デジタルカメラ100の作業用メモリ104に保持される。
スマートデバイス200は、デジタルカメラ100へ、API402に対するリクエストを送信する(S605)。このリクエストも、アプリケーション301によって生成される。このリクエストは、スマートデバイス200からデジタルカメラ100のCORS処理を有効化又は無効化するために送信される。ここでは、デジタルカメラ100のCORS処理が有効化されるものとする。デジタルカメラ100は、スマートデバイス200からこのリクエストを受信すると、この時点ではCORS処理が有効でないことに基づいて、S504においてリクエストを処理し、スマートデバイス200へレスポンスを返送する(S606)。S605及びS606の手続きが正常に処理された場合、デジタルカメラ100は、CORS処理の有効又は無効を示す情報を作業用メモリ104に保持し、以降のリクエスト受信時に、この情報を用いてCORS処理を行うか否かを判定する。
スマートデバイス200は、Webサーバ300へ、Webアプリケーションの取得リクエストを送信する(S607)。このリクエストは、Webブラウザ303によって生成される。Webサーバ300は、リクエストを受信すると、必要なファイルをレスポンスで返送する(S608)。Webブラウザ303は、取得したファイルをレンダリングエンジン等で解析して画面に表示する。
次に、スマートデバイス200が、デジタルカメラ100へ、API405に対するリクエストを送信する。このリクエストは、Webサーバ300から取得されたWebアプリケーション302に基づいて生成される。なお、このリクエストが特定の条件を満たしていない場合、このリクエストは直ちに送信されず、Webブラウザ303によってプリフライトリクエストが送信されるこことなる。図6の例では、Webブラウザ303が、このプリフライトリクエストを送信するものとする。すなわち、スマートデバイス200は、デジタルカメラ100へ、API405に関するプリフライトリクエストを送信する(S609)。このリクエストは、Webブラウザ303によって生成され、「Origin」ヘッダが付加される。ヘッダの値はWebサーバ300のオリジン(http://example.com)が設定される。デジタルカメラ100は、リクエストを受信すると、図5に従って、そのリクエストを処理する。ここでは、CORS処理が有効化されており、かつ、Originヘッダが付されたリクエストであるため、デジタルカメラ100は、そのOriginヘッダの値と、許可するオリジンの設定値とを比較し、レスポンスを許可するかを決定する。ここで、デジタルカメラ100は、S603において受信したリクエストに基づいて、許可するオリジンの設定値として、Webサーバ300のオリジンを保持している。このため、デジタルカメラ100は、S509に従って、「Access-Control-Allow-Origin」ヘッダを付加したレスポンスを返送する(S610)。なお、ここでのヘッダの値は、リクエストに含まれるOriginヘッダの値(http://example.com)が設定される。
Webブラウザ303は、S610において、「Access-Control-Allow-Origin」ヘッダを含んだレスポンスを受信すると、デジタルカメラ100へ、API405に対するリクエストを送信する(S611)。このリクエストには、Webブラウザ303によってOriginヘッダが付加される。ヘッダの値は、Webサーバ300のオリジン(http://example.com)が設定される。デジタルカメラ100は、このリクエストを受信すると、図5に従って、受信したリクエストを処理する。ここでは、CORS処理が有効化されており、かつ、Originヘッダが付されたリクエストであるため、デジタルカメラ100は、そのOriginヘッダの値と、許可するオリジンの設定値とを比較し、レスポンスを許可するかを決定する。デジタルカメラ100は、S508に従って、シャッター全押し等の処理を実行し、「Access-Control-Allow-Origin」ヘッダを付加したレスポンスを返送する(S612)。なお、ここでのヘッダの値は、リクエストに含まれるOriginヘッダの値(http://example.com)が設定される。
以上のように、本実施形態では、デジタルカメラ100が有するHTTPサーバ機能のCORS設定を、自装置が公開するAPIを介して他の装置によって行うことができるようにする。これにより、例えば、コンソール等の入力部材を使用するのが容易でない電子機器におけるCORS設定を容易に行うことが可能となる。
(変形例1)
外部の電子機器がデジタルカメラ100におけるHTTPサーバ機能のCORS設定を行う際に、認証を行うようにしてもよい。例えば、認証に成功した電子機器に対してのみ、CORS設定のAPIを使用することを許可してもよい。認証は、例えば、Basic認証、Digest認証等によって行われうる。一例において、デジタルカメラ100は、自装置の認証機能が有効でない場合に、CORS設定のAPIを使用できないようにし、自装置の認証機能が有効である場合に限って、CORS設定のAPIの使用が許容されるようにしうる。すなわち、デジタルカメラ100は、自装置(HTTPサーバ機能)の認証機能が無効である場合には上述のようなAPIの使用を許容せず、認証機能が有効な場合に、APIの使用を許容して、認証に成功した外部装置がそのAPIを使用できるようにしうる。図7を用いて、この場合のデジタルカメラ100の処理の流れの例について説明する。
外部の電子機器がデジタルカメラ100におけるHTTPサーバ機能のCORS設定を行う際に、認証を行うようにしてもよい。例えば、認証に成功した電子機器に対してのみ、CORS設定のAPIを使用することを許可してもよい。認証は、例えば、Basic認証、Digest認証等によって行われうる。一例において、デジタルカメラ100は、自装置の認証機能が有効でない場合に、CORS設定のAPIを使用できないようにし、自装置の認証機能が有効である場合に限って、CORS設定のAPIの使用が許容されるようにしうる。すなわち、デジタルカメラ100は、自装置(HTTPサーバ機能)の認証機能が無効である場合には上述のようなAPIの使用を許容せず、認証機能が有効な場合に、APIの使用を許容して、認証に成功した外部装置がそのAPIを使用できるようにしうる。図7を用いて、この場合のデジタルカメラ100の処理の流れの例について説明する。
デジタルカメラ100は、外部装置からのリクエストの受信を待ち受け(S701)、リクエストを受信した場合(S701でYES)、リクエストされたAPIが、CORS関連のAPIであるか否かを確認する(S702)。CORS関連のAPIは、例えば、図4に示されるAPI402、API403、及びAPI404などの、CORS処理の設定を行うためのAPIである。デジタルカメラ100は、リクエストされたAPIがCORS関連のAPIでないと判定した場合(S702でNO)、S502と同様の処理を実行する(S703)。一方で、デジタルカメラ100は、リクエストされたAPIがCORS関連のAPIであると判定した場合(S702でYES)、自装置の認証機能が有効か否かを確認する(S704)。なお、デジタルカメラ100は、このときに、例えばリクエスト元のスマートデバイス200の認証機能が有効であるか否かをも確認しうる。デジタルカメラ100は、認証機能が有効であることを確認した場合(S704でYES)、S502と同様の処理を実行する(S703)。一方で、デジタルカメラ100は、認証機能が有効でないことを確認した場合(S704でNO)、サービスが利用できないことを示すために、Status Codeを「503」に設定したレスポンスを送信して処理を終了する(S705、S706)。
このように、デジタルカメラ100は、自装置のサーバ機能の認証機能が有効であることを条件として、CORS設定のAPIを実行可能としうる。これにより、CORS設定を行うために認証が必要となり、認証されていない外部装置からCORS設定が変更されることを防ぐことが可能となる。
(変形例2)
上述の実施形態では、CORS設定がデジタルカメラ100によって公開されるAPIのすべてに共通となっている。すなわち、例えば、許可されるオリジンとして設定されたオリジンは、デジタルカメラ100によって公開されるAPIのすべてについて、許可されるオリジンとして扱われる。一方で、例えば、一部のAPIについては、異なるオリジンからのリクエストが許可されるべきでない場合がありうる。このため、APIごとにCORS処理を行う対象であるか否かを示す情報が用意されてもよい。デジタルカメラ100は、この情報に基づいて、リクエストされたAPIがCORS処理を行う対象であるか否かを確認しうる。そして、デジタルカメラ100は、CORS処理を行う対象のAPIについてのみ、上述のようなCORS処理を行う。また、APIごとに許可するオリジンやメソッドが変更されるようにしてもよい。このために、例えば、HTTPサーバ全体のCORS設定とは別に、各APIに個別のCORS設定が用意されうる。デジタルカメラ100は、リクエストされたAPIについて個別のCORS設定が行われていた場合、サーバ全体のCORS設定は使用せずに、API個別のCORS設定を使用して処理を行いうる。
上述の実施形態では、CORS設定がデジタルカメラ100によって公開されるAPIのすべてに共通となっている。すなわち、例えば、許可されるオリジンとして設定されたオリジンは、デジタルカメラ100によって公開されるAPIのすべてについて、許可されるオリジンとして扱われる。一方で、例えば、一部のAPIについては、異なるオリジンからのリクエストが許可されるべきでない場合がありうる。このため、APIごとにCORS処理を行う対象であるか否かを示す情報が用意されてもよい。デジタルカメラ100は、この情報に基づいて、リクエストされたAPIがCORS処理を行う対象であるか否かを確認しうる。そして、デジタルカメラ100は、CORS処理を行う対象のAPIについてのみ、上述のようなCORS処理を行う。また、APIごとに許可するオリジンやメソッドが変更されるようにしてもよい。このために、例えば、HTTPサーバ全体のCORS設定とは別に、各APIに個別のCORS設定が用意されうる。デジタルカメラ100は、リクエストされたAPIについて個別のCORS設定が行われていた場合、サーバ全体のCORS設定は使用せずに、API個別のCORS設定を使用して処理を行いうる。
図8に、この場合のAPIの例を示す。図8において、API801(/cors/api/corssetting)は、指定したAPIについてデジタルカメラ100がCORS処理を有効化するか無効化するかを指定するために使用されうる。外部装置は、対象となるAPIと、CORS処理を有効化又は無効化することを示す情報とをリクエストボディに付加し、PUTメソッドによって、API801に対するリクエストを送信する。デジタルカメラ100は、リクエストされた情報を作業用メモリ104に保持する。この情報は、以降のリクエストの受信時のCORS処理が行われるべきか否かをデジタルカメラ100が判定するために用いられる。デジタルカメラ100は、情報の保持を正常に完了すると、変更されたCORS処理の状態をレスポンスボディに付加して、Status Codeを「200 OK」としたレスポンスを外部装置へ返送する。
API802(/cors/api/origin)は、指定したAPIについて、CORS処理時に異なるオリジンからのリクエストに対するレスポンスを許可するか否かを指定するために使用される。API802では、許可するオリジンが指定される。外部装置は、対象となるAPIと、そのAPIについて許可するオリジンとをリクエストボディに付加し、PUTメソッドによって、API802に対するリクエストを送信する。デジタルカメラ100は、リクエストされた情報を作業用メモリ104に保持する。この情報は、以降のリクエスト受信時のCORS処理においてレスポンスを許可するか否かをデジタルカメラ100が判定する際に用いられる。デジタルカメラ100は、情報の保持を正常に完了すると、変更された許可するオリジンをレスポンスボディに付加し、Status Codeを「200 OK」としたレスポンスを外部装置へ返送する。
API803(/cors/api/header)は、指定したAPIにおいて、CORS処理時に異なるオリジンからのリクエストに対するレスポンスを許可するか否かを指定するために使用される。API803では、許可するヘッダが指定される。外部装置は、対象となるAPIと、許可するヘッダのキー及びバリューとをリクエストボディに付加し、PUTメソッドによって、API803に対するリクエストを送信する。デジタルカメラ100は、リクエストされた情報を作業用メモリ104に保持する。この情報は、以降のリクエスト受信時のCORS処理においてレスポンスを許可するか否かをデジタルカメラ100が判定する際に用いられる。デジタルカメラ100は、情報の保持を正常に完了すると、追加された許可するヘッダをレスポンスボディに付加し、Status Codeを「200 OK」としたレスポンスを外部装置へ返送する。
この場合のデジタルカメラ100の処理の流れの例について、図9を用いて説明する。デジタルカメラ100は、リクエストが到来するのを待ち受け(S901)、リクエストを受信した場合に(S901でYES)、リクエストされたAPIについて、個別のCORS設定が行われているかを確認する(S902)。デジタルカメラ100は、例えば、API802において設定が行われるAPI個別の「許可するオリジン」の設定値が、初期値(NULL)から変更されている場合に、API個別のCORS設定が変更されていると判定する。また、デジタルカメラ100は、例えば、API803において設定が行われるAPI個別の「許可するヘッダ」の設定値が、初期値(NULL)から変更されている場合に、API個別のCORS設定が変更されていると判定する。デジタルカメラ100は、API個別のCORS設定が行われていないと判定した場合(S903でYES)、サーバ全体のCORS設定を用いてリクエストを処理する(S904)。この処理は、図5のS502と同様にして行われる。一方、デジタルカメラ100は、API個別のCORS設定が行われていると判定した場合(S903でYES)、そのAPI個別のCORS設定を用いてリクエストを処理する(S905)。なお、この処理は、処理中の判定に使用される情報が、サーバ全体の情報からAPI個別の情報に置き換えられるのみであり、処理の内容は図5の502の処理と同様である。
このようにして、デジタルカメラ100は、APIごとに異なるCORS処理の設定を行うことができる。なお、上述の処理例では、サーバ全体のCORS設定よりも、API個別のCORS設定を優先することにより、API個別のCORS設定が使用されるようにしている。一方で、例えば、サーバ全体のCORS設定とAPI個別のCORS設定とを組み合わせて使用するようにしてもよい。一例において、デジタルカメラ100は、サーバ全体のCORS設定及びAPI個別のCORS設定の両方において指定されているオリジンやヘッダについてのみ、レスポンスを許可するようにしてもよい。また、デジタルカメラ100は、サーバ全体のCORS設定とAPI個別のCORS設定とのいずれかにおいて指定されているオリジンやヘッダについて、レスポンスを許可するようにしてもよい。
(変形例3)
上述の実施形態では、APIによって設定されたCORS設定が、デジタルカメラ100の作業用メモリ104に保持され、CORS処理時に参照されると説明した。この設定値は、デジタルカメラ100の不揮発メモリ103に保存されてもよく、これによれば、デジタルカメラ100本体が再起動された際にも同じ設定値を使い続けることができる。一方で、このような構成とすると、必要のないCORS設定が維持されてしまいうる。このため、一例において、デジタルカメラ100は、サーバ機能の起動時にCORS設定を初期化するようにしてもよい。この場合、デジタルカメラ100は、再びCORS設定を使用すべき場合に、上述の実施形態で説明したような手順を用いて、改めてCORS設定のAPIを実行する。
上述の実施形態では、APIによって設定されたCORS設定が、デジタルカメラ100の作業用メモリ104に保持され、CORS処理時に参照されると説明した。この設定値は、デジタルカメラ100の不揮発メモリ103に保存されてもよく、これによれば、デジタルカメラ100本体が再起動された際にも同じ設定値を使い続けることができる。一方で、このような構成とすると、必要のないCORS設定が維持されてしまいうる。このため、一例において、デジタルカメラ100は、サーバ機能の起動時にCORS設定を初期化するようにしてもよい。この場合、デジタルカメラ100は、再びCORS設定を使用すべき場合に、上述の実施形態で説明したような手順を用いて、改めてCORS設定のAPIを実行する。
図10を用いて、このような初期化を行う場合のデジタルカメラ100が実行する処理の流れの例について説明する。デジタルカメラ100は、HTTPサーバ機能を起動すると(S1001)、不揮発メモリ103に保存されているCORS設定値を初期化する(S1002)。なお、API402によって設定されるCORS設定の有効又は無効を示す情報は、初期値として値を「無効」に設定する。API403又はAPI404によって設定されるCORS処理で異なるオリジンからのリクエストを許可するか否かを判定する際に使用する情報は、例えば、NULLを初期値とする。デジタルカメラ100は、設定値を初期化した後、リクエストの受信を待機し(S1003)、リクエストを受信した場合に(S1003でYES)、例えばS502と同様にしてリクエストを処理する(S1004)。なお、HTTPサーバ機能の起動時にCORS設定値を初期化してもよいし、HTTPサーバ機能の終了時にCORS設定値を初期化してもよい。なお、ここでのHTTPサーバ機能は、CORS設定に関連するAPIに関連付けられた所定の機能を指す。また、HTTPサーバ機能の起動又は終了は、デジタルカメラ100の起動又は終了時に行われるが、例えばユーザ操作による起動又は終了の指示などの他の要因によって行われてもよい。また、例えば、CORS設定値に基づく処理が一定期間行われていない場合に初期化が行われてもよい。すなわち、CORS設定が不必要に維持されないように、一定のタイミングで初期化が行われるようにしうる。また、例えばユーザが明示的に初期化の操作を行った場合にCORS設定の初期化が行われてもよいし、ユーザが明示的に初期化処理が行われないようにする設定を行った場合には、自動で初期化が行われないようにしてもよい。
このように、デジタルカメラ100がサーバ機能を起動した際にCORS設定を初期化することにより、不必要なCORS設定が維持され続けてしまうことを防ぐことができる。
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
発明は上記実施形態に制限されるものではなく、発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、発明の範囲を公にするために請求項を添付する。
100:デジタルカメラ、200:スマートデバイス、300:Webサーバ、301:アプリケーション、302:Webアプリケーション、303:Webブラウザ
Claims (10)
- 電子機器であって、
Cross-Origin Resource Sharing(CORS)の有効化または無効化に関する設定を含んだCORSに関する設定のためのApplication Programming Interface(API)を公開する公開手段と、
前記APIに対するHyper Text Transfer Protocol(HTTP)のリクエストを他の装置から受信した場合に、当該リクエストに基づいて前記CORSに関する設定を実行する実行手段と、
を有することを特徴とする電子機器。 - 前記公開手段は、CORSの有効化または無効化の設定を受け付ける第1のAPIを公開し、
前記実行手段は、当該第1のAPIに対するHTTPのリクエストを受信した場合、当該リクエストに従ってCORSを有効化または無効化する、
ことを特徴とする請求項1に記載の電子機器。 - 前記公開手段は、CORSによって許可するオリジンを指定する情報を受け付けるための第2のAPIを公開し、
前記実行手段は、当該第2のAPIに対するHTTPのリクエストを受信した場合、当該リクエストによって指定されるオリジンからのHTTPのリクエストに対するレスポンスを許可する設定を行う、
ことを特徴とする請求項1又は2に記載の電子機器。 - 前記公開手段は、CORSによって許可するヘッダを指定する情報を受け付けるための第3のAPIを公開し、
前記実行手段は、当該第3のAPIに対するHTTPのリクエストを受信した場合、当該リクエストによって指定されるヘッダを有するHTTPのリクエストに対するレスポンスを許可する設定を行う、
ことを特徴とする請求項1から3のいずれか1項に記載の電子機器。 - 前記実行手段は、前記公開手段によって公開される複数のAPIのそれぞれについて、前記CORSに関する設定を当該複数のAPIについてまとめて実行する第1の設定と、前記CORSに関する設定を当該複数のAPIについて個別に実行する第2の設定とを行うことが可能であり、
前記第2の設定が行われているAPIについては当該第2の設定に基づいてCORSの処理が行われ、前記第2の設定が行われていないAPIについては前記第1の設定に基づいてCORSの処理が行われる、
ことを特徴とする請求項1から4のいずれか1項に記載の電子機器。 - 前記実行手段は、前記電子機器において認証機能が有効である場合に、前記リクエストに基づいて前記CORSに関する設定を実行することを許容し、前記電子機器において前記認証機能が有効でない場合に、前記リクエストに基づいて前記CORSに関する設定を実行することを許容しない、ことを特徴とする請求項1から5のいずれか1項に記載の電子機器。
- 前記CORSに関する設定を初期化する初期化手段をさらに有する、ことを特徴とする請求項1から6のいずれか1項に記載の電子機器。
- 前記初期化手段は、前記CORSに関する設定と関連付けられた所定の機能が起動された場合または当該所定の機能が終了された場合に、当該CORSに関する設定を初期化する、ことを特徴とする請求項7に記載の電子機器。
- 電子機器によって実行される制御方法であって、
Cross-Origin Resource Sharing(CORS)の有効化または無効化に関する設定を含んだCORSに関する設定のためのApplication Programming Interface(API)を公開することと、
前記APIに対するHyper Text Transfer Protocol(HTTP)のリクエストを他の装置から受信した場合に、当該リクエストに基づいて前記CORSに関する設定を実行することと、
を含むことを特徴とする制御方法。 - コンピュータを請求項1から8のいずれか1項に記載の電子機器として機能させるためのプログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022003253A JP2023102637A (ja) | 2022-01-12 | 2022-01-12 | 電子機器、制御方法、及びプログラム |
US18/151,055 US20230222022A1 (en) | 2022-01-12 | 2023-01-06 | Electronic device, control method, and storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022003253A JP2023102637A (ja) | 2022-01-12 | 2022-01-12 | 電子機器、制御方法、及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023102637A true JP2023102637A (ja) | 2023-07-25 |
Family
ID=87069632
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022003253A Pending JP2023102637A (ja) | 2022-01-12 | 2022-01-12 | 電子機器、制御方法、及びプログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US20230222022A1 (ja) |
JP (1) | JP2023102637A (ja) |
-
2022
- 2022-01-12 JP JP2022003253A patent/JP2023102637A/ja active Pending
-
2023
- 2023-01-06 US US18/151,055 patent/US20230222022A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230222022A1 (en) | 2023-07-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6282046B2 (ja) | 情報処理装置、情報処理装置の制御方法、プログラム | |
JP6576082B2 (ja) | 通信装置、通信装置の制御方法、プログラム | |
WO2020054365A1 (ja) | 通信装置、通信方法及びプログラム | |
JP2017046231A (ja) | 通信装置およびその制御方法並びにプログラム | |
JP6415175B2 (ja) | 通信装置、通信装置の制御方法、プログラム | |
JP2018191134A (ja) | 画像供給装置及び情報処理装置及びそれらの制御方法とプログラム | |
JP2016103703A (ja) | 情報処理装置、電子機器およびそれらの制御方法、プログラム並びに記憶媒体 | |
JP6415232B2 (ja) | 通信装置、通信装置の制御方法、プログラム | |
JP7262191B2 (ja) | 電子機器及びその制御方法及びプログラム及び情報処理システム | |
US9560476B2 (en) | Wireless communication apparatus capable of communicating with external apparatus, controlling method for wireless communication apparatus, and storage medium | |
JP2016042655A (ja) | 通信装置、通信装置の制御方法、プログラム | |
JP2018136630A (ja) | 通信装置、撮像装置、制御方法、及びプログラム | |
JP2023102637A (ja) | 電子機器、制御方法、及びプログラム | |
JP6433231B2 (ja) | 通信装置、通信装置の制御方法、プログラム | |
JP6650793B2 (ja) | 通信装置、通信装置の制御方法、プログラム | |
JP7218164B2 (ja) | 通信装置およびその制御方法 | |
JP7319777B2 (ja) | 認証を行う情報処理装置およびその制御方法ならびにプログラム | |
WO2020054364A1 (ja) | 通信装置、通信方法及びプログラム | |
JP6877999B2 (ja) | 通信装置、通信装置の制御方法、プログラム | |
JP6386862B2 (ja) | 通信装置、通信装置の制御方法、プログラム | |
JP6918463B2 (ja) | 通信装置、その制御方法、およびプログラム | |
JP2016058970A (ja) | 無線通信装置、無線通信装置の制御方法及びプログラム | |
JP7155000B2 (ja) | 通信装置、通信装置の制御方法、プログラム | |
JP7196209B2 (ja) | 通信装置、制御方法、およびプログラム | |
JP2022169123A (ja) | 通信装置、制御方法、およびプログラム |