-
Notifications
You must be signed in to change notification settings - Fork 4
/
835.txt
106 lines (84 loc) · 6.12 KB
/
835.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
[13] [[Webブラウザー]]などの[[クライアント]]は、[[プラットフォーム]]によって提供される[[ネットワーク]]を利用し、
適当な[[転送プロトコル]]を使って [[Webサーバー]]と通信します。
[[クライアント]]の[[ハードウェア]]により、あるいは直接接続する[[ネットワーク]]の構成や管理方針により、
利用する[[ネットワーク]]の設定は色々ですから、[[クライアント]]は相応の配慮を行わねばなりません。
* 設定
[2] [[プラットフォーム]]により、または[[利用者エージェント]]自身により、
次の設定を保持する必要があります。
[FIG(list)[
- [[名前解決]]の方法
-- 利用する[[プロトコル]]と順序の指定
-- [[サーバー]]の指定
- 利用する[[ネットワークインターフェイス]]や[[経路制御]]、[[プロトコル]]の情報
-- [[IPv4]] or [[IPv6]]
-- [[IPアドレス]]から[[ネットワークインターフェイス]]への[[写像]]
- [[プロキシ設定]]
]FIG]
[4] [[プラットフォーム]]がどこまで透過的に面倒を見てくれるかは、それぞれに異なります。
薄い[[プラットフォーム]]で動作する[[アプリケーション]]は、色々と自前で実装する必要があります。
[9] [[プラットフォーム]]といっても [[OS]] 自体に機能が組み込まれていることもあれば、
[[ネットワーク]]接続の設定を一括で管理する追加のソフトウェアが使われることもあります。
そうした[[ソフトウェア]]の中には、特定の[[クライアント]]ソフトウェアの設定も合わせて切り替えられるものがあります。
[EG[
[10] 例えば利用できる [[WiFi]] [[アクセスポイント]]に応じて接続先ネットワークを切り替え、
[[OS]] の [[DNSサーバー]]の設定や [[Webブラウザー]]の[[プロキシ]]などの設定も合わせて変更するものがあります。
]EG]
[EG[
[21] [[socksify]] や [[tsocks]] のような半ば強引な方法で[[プラットフォーム]]と一体となって特定の[[アプリケーション]]の[[ネットワーク設定]]に介入する[[ソフトウェア]]が使われることもあります。
[[プロキシ]]を設定できない[[アプリケーション]]の場合や、
設定できない[[アプリケーション]]が混在する場合に使われます。
]EG]
* 変化
[5] 次のような理由で[[ネットワーク]]接続の状態が変化することがあります。
[FIG(list)[
- [6] [[プラットフォーム]]の[[ネットワーク]]設定の変更
-- [[利用者]]により、あるいは[[管理者]]により
- [7] [[ネットワークインターフェイス]]の追加や削除
-- 物理的に、あるいは[[ドライバー]]の追加や論理デバイスの作成など
-- [[機内モード]]
-- [[省電力モード]]
- [8] 接続先[[ネットワーク]]の変更
-- [[WiFi]] [[アクセスポイント]]の変更、[[有線]]と[[無線]]の切り替えなど
-- [[アクセスポイント]]の消失、発見
-- [[VPN]] の有効、無効
- [11] [[ネットワーク]]の外部接続の変化
-- [[captive portal]] での[[ログイン]]操作
-- 外部[[ネットワーク]]との境界にある[[ルーター]]の外部接続有効化・無効化、接続先ネットワーク切り替えなど
]FIG]
[1] [[プラットフォーム]]からそうした[[ネットワーク]]接続の状態の変化が通知されたら、
次の処理を行う必要があります。
[FIG(list middle)[
- [[オンライン判定]]/[[captive portal]] 検出
- [CODE(JS)@en[navigator.onLine]] の変更処理
- [[WPAD]] の処理
- [[PAC]] の [[fetch]]
- [[代替サービス]]の[[キャッシュ]]処理
- [[DNSキャッシュ]]の消去
]FIG]
[22] [CODE[watchPosition]] の処理に[[ネットワークの変化]]の情報を使うこともできます。
[16] 更に、実行中の [[HTTP]] などの[[下位層の接続]]があれば、
それも継続不能となって (通常は[[プラットフォーム]]により) 終了させられる可能性があります。
;; 接続性に影響しない簡単な設定変更など、切断の必要がない場合もあります。
[20] [[IE]] は[[従量制課金]]のネットワーク接続の時、[[事前レンダリング]]を無効化します。
[12] [[WPAD]] により、または手動で指定された [[PAC]] は、
随時更新される可能性がありますから、
適当なタイミングで最新のものを取得し直す必要があります。
* Web アプリケーションとの関係
[14] [[ネットワーク]]の接続性はそもそも[[クライアント]]と[[サーバー]]が通信できるかどうかの大前提ですから、
[[Webアプリケーション]]にとっての介入の余地もそれほど大きくはありません。
[15] [CODE(JS)@en[navigator.onLine]] や [[Service Workers]] のような機能を使うことで、
[[ネットワーク]]接続が得られない状況でもある程度動作する
[[Webアプリケーション]]を制作することは可能ですが、それほど一般的ではありません。
* 歴史
[3] [CITE@en[draft-cooper-webi-wpad-00 - Web Proxy Auto-Discovery Protocol]]
([TIME[2016-05-23 03:01:30 +09:00]])
<https://tools.ietf.org/html/draft-cooper-webi-wpad-00#section-5.2>
[17] [CITE@en[939318 – NetworkLinkService should be enabled so Necko can respond to network changes (not offline auto-detection)]]
( ([TIME[2016-06-16 18:53:10 +09:00]]))
<https://bugzilla.mozilla.org/show_bug.cgi?id=939318>
[18] [CITE@en[Issue 566492 - chromium - Security: Previous DNS settings are still used even after changing networks - Monorail]]
( ([TIME[2016-06-16 19:25:57 +09:00]]))
<https://bugs.chromium.org/p/chromium/issues/detail?id=566492>
[19] [CITE@en[Issue 223876 - chromium - Built-in async DNS resolver needs a reliable equivalent to AI_ADDRCONFIG - Monorail]]
( ([TIME[2016-06-16 19:27:56 +09:00]]))
<https://bugs.chromium.org/p/chromium/issues/detail?id=223876>