web-dev-qa-db-ja.com

クライアントサイトでブラウザの国を検出する方法は?

次のWebサイトは、プライベートモードでも国と通貨を検出できることがわかりました

http://www.innisfreeworld.com/

クッキーに記録しますが、どうすればいいですか?

enter image description here

それはクライアントサイトで実現可能ですか?ナビゲーター?

6
KevinHu

ロケールを決定するための複数のオプションがあります。有用性の降順で、これらは次のとおりです。

  1. IPアドレスIPジオロケーションサービスを使用Maxmind GeoIP のように検索します。これは、リクエストの発信元の場所です。つまり、アメリカ人がイタリアで休暇を取り、スウェーデンのVPNを使用している場合、Swedenを返します。

サーバーの助けを借りてのみ実行できます。主な利点は、非常に信頼性が高いことです。精度は、無料サービスの国または地域、有料サービスの都市または地域になります。

  1. geolocation API を使用して、ブラウザからEarthの正確な位置を検索します。スウェーデンのVPNを使用してイタリアで休暇を過ごすアメリカ人は、イタリアとして登録されます。

答えは非常に正確で、通常は10m以内です。原則として、クライアント側で機能しますが、サーバーで座標->国のルックアップを実行することもできます。主な欠点は、すべてのデバイスにGPSまたはWiFiの位置があるわけではなく、一般に明示的なユーザーの同意が必要なことです。

  1. サーバー上の Accept-Language ヘッダーを見て(またはサーバーの助けを借りて)、ロケール情報。スウェーデンのVPNを使用してイタリアで休暇を過ごすアメリカ人は、米国として登録されます。

欠点は、これが非常に簡単に変更できる設定であるということです。たとえば、世界中の英語を話す人は、機械翻訳されたテキストを避けるためにen-US設定を好むかもしれません。最新のブラウザ(執筆時点ではIE/Edgeではなく、Safari 11以降のみ)では、 navigator.languages をリクエストすることもできます。

  1. navigator.language は、navigator.languagesヘッダーの最初の要素です。 navigator.languagesのすべての考慮事項が適用されます。さらに、この情報は、ロケールのない言語だけである場合もあります(つまり、en-USの代わりにen)。

  2. 別のサードパーティサービスを使用します。たとえば、ユーザーがFacebook接続などのシングルサインオンシステムを介してサインインする場合、ユーザーの出身地をリクエストできます。通常、この情報は非常に信頼性が低く、サードパーティが必要です。

13
phihag