ジオロケーションを要求・送信する HTTP Geolocationヘッダの提案仕様

GoogleのLuis Barguno Jane氏より、HTTPヘッダでジオロケーション情報の要求・送信を可能にする「Geolocation Header for HTTP over a Secure Context」という仕様が出ています。

背景

ユーザエージェントにおいてジオロケーションの取得は「Geolocation API」で取得可能でした。

しかし、この方法はHTMLを読み込んで、JavaScriptを実行して、サーバに送信する流れになります。サーバは、最初に読み込まれるHTMLを生成時はどうしても位置情報が使えないという事情があります。

また、スマートでバイスやIoT機器でJavaScriptの実行をサポートしてない環境においては、ジオロケーションの要求・送信に仕様はないのが現状です。

Secure Contexts下でジオロケーションの要求・送信が出来る仕組みを定義したのがこの仕様です。

HTTPレスポンスでGeolocation-Requestヘッダを受け取ったクライアントは、次回から指定されたPathにアクセスした時はGeolocationヘッダでジオロケーションを送信するようになります。

example

Geolocation-Requestヘッダ

サーバから、HTTPレスポンスにおいてジオロケーションを要求するGeolocation-Requestヘッダ

Geolocation-Request: Path="/localService"; Type=IfAlreadyGranted;
       Expires=Thu, 18 Dec 2017 12:00:00 UTC

(#本当は1行)

  • Path: ジオロケーションを送信するスコープとなるPath
  • Type:
    • IfAlreadyGranted: 既にそのオリジンにおいて、ジオロケーションの取得が許可されていた場合のみジオロケーションを送信する
    • MayPrompt: ジオロケーション取得のパーミッション要求プロンプトを表示してもよい(ユーザエージェント次第)
  • Expires: 有効期限
Geolocationヘッダ

クライアントから、HTTPリクエストにおいてジオロケーションを送信するGeolocationヘッダ

Geolocation: Position=[47.368684, 8.535741, 345]; Accuracy=10;
         Timestamp=1495804846156; AltitudeAccuracy=20; Speed=1.5;
         Heading=27.53;

(#本当は1行)

  • Position:RFC7946 GeoJSON形式の位置情報 (必須)
  • Accuracy: メートル単位の精度 (必須)
  • Timestamp: 取得時のタイムスタンプ (必須)
  • AltitudeAccuracy: メートル単位の高度精度
  • Speed: 速度(m/sec)
  • Heading: 方位(0~360)