MeWrite Docs

HTTP 511 Network Authentication Required

ネットワーク認証が必要な場合(キャプティブポータル等)のエラー

概要

HTTP 511 Network Authentication Required は、クライアントがネットワークへのアクセス権を得るために認証が必要な場合に返されるステータスコードです。主にキャプティブポータル(ホテル、空港、カフェなどの公衆WiFi)で使用されます。

エラーメッセージ

511 Network Authentication Required
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
HTTP/1.1 511 Network Authentication Required
Content-Type: text/html

<html>
<head><title>Network Authentication Required</title></head>
<body>
<h1>ネットワーク認証が必要です</h1>
<p>インターネットにアクセスするには、<a href="http://login.example.com">こちら</a>でログインしてください。</p>
</body>
</html>

原因

  1. キャプティブポータル: 公衆WiFiのログインページ
  2. 企業ネットワーク: 認証が必要な社内ネットワーク
  3. 有料WiFiサービス: 支払いが必要なネットワーク
  4. 利用規約への同意: 利用条件への同意が必要

解決策

1. 認証ページにアクセス

方法1: ブラウザを開いて任意のHTTPサイトにアクセス
- http://example.com
- http://neverssl.com(HTTPSリダイレクトなし)
- http://captive.apple.com

方法2: ネットワーク設定から
- Windows: WiFi接続後に通知をクリック
- macOS: WiFiメニューから「ネットワーク環境設定を開く」
- iOS: WiFi設定で接続中のネットワークをタップ

2. キャプティブポータル検出URL

各OSのキャプティブポータル検出URL:

Windows:
http://www.msftconnecttest.com/connecttest.txt

macOS/iOS:
http://captive.apple.com/hotspot-detect.html

Android:
http://connectivitycheck.gstatic.com/generate_204

Chrome OS:
http://clients3.google.com/generate_204

3. 開発者向け: キャプティブポータル実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Node.js でキャプティブポータルを検出
const http = require('http');

function checkCaptivePortal(callback) {
  const options = {
    hostname: 'connectivitycheck.gstatic.com',
    port: 80,
    path: '/generate_204',
    method: 'GET',
    timeout: 5000
  };

  const req = http.request(options, (res) => {
    if (res.statusCode === 204) {
      callback(null, false); // キャプティブポータルなし
    } else if (res.statusCode === 511 || res.statusCode === 302) {
      callback(null, true); // キャプティブポータルあり
    }
  });

  req.on('error', (err) => callback(err));
  req.end();
}

4. サーバー側の511レスポンス実装

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
// Express での実装例
app.use((req, res, next) => {
  if (!isAuthenticated(req)) {
    res.status(511).send(`
      <!DOCTYPE html>
      <html>
      <head>
        <title>Network Authentication Required</title>
        <meta http-equiv="refresh" content="0;url=http://login.example.com">
      </head>
      <body>
        <h1>ネットワーク認証が必要です</h1>
        <p><a href="http://login.example.com">ログインページ</a>にアクセスしてください。</p>
      </body>
      </html>
    `);
    return;
  }
  next();
});

5. アプリでのキャプティブポータル対応

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// iOS (Swift) - Network Extension
import Network

let monitor = NWPathMonitor()
monitor.pathUpdateHandler = { path in
    if path.status == .satisfied {
        // 接続あり - キャプティブポータルチェック
        checkCaptivePortal()
    } else if path.status == .requiresConnection {
        // キャプティブポータルの可能性
        print("認証が必要な可能性があります")
    }
}
monitor.start(queue: DispatchQueue.global())
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
// Android (Kotlin)
val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

val networkCallback = object : ConnectivityManager.NetworkCallback() {
    override fun onCapabilitiesChanged(
        network: Network,
        capabilities: NetworkCapabilities
    ) {
        val hasCaptivePortal = !capabilities.hasCapability(
            NetworkCapabilities.NET_CAPABILITY_VALIDATED
        )
        if (hasCaptivePortal) {
            // キャプティブポータル検出
            openCaptivePortalLogin()
        }
    }
}

注意点

1. HTTPS問題
   - キャプティブポータルはHTTPSをインターセプトできない
   - HTTPサイトへのアクセスで認証ページが表示される
   - HSTSサイトではアクセス不可の場合あり

2. 自動再接続
   - 認証後、一定時間でセッションが切れる場合がある
   - MACアドレスで再認証される場合もある

3. セキュリティ
   - 公衆WiFiでは機密情報を入力しない
   - VPNの使用を推奨

HTTP の他のエラー

最終更新: 2026-01-27