Java 套接字基本 WWW-Authentication

Java socket Basic WWW-Authentication

我想在 Web 浏览器中使用 WWW-Authenticate: Basic header 验证套接字连接,但没有出现输入用户名和密码的提示。怎么办?

   public static void responseView(Socket socket) throws IOException {
        responseHeaders(200);
        DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream());
        for(String header : headers) {
            outputStream.writeBytes(header + "\r\n");
        }
        outputStream.writeBytes("\r\n");
        outputStream.writeBytes("<!DOCTYPE html><html><head><title>Java Web Server</title></head><body></body></html>");
        outputStream.writeBytes("\r\n");
        outputStream.flush();
    }
    
    public static void responseHeaders(int statusCode) {
        SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
        headers.add("HTTP/1.0 " + Integer.toString(statusCode) + " " + Config.STATUS_CODES.get(statusCode));
        headers.add("Content-Type: text/html");
        headers.add("Date: " + formatter.format(new Date(System.currentTimeMillis())));
        headers.add("Server: Simple Java Web Server");
        headers.add("WWW-Authenticate: Basic");
    }

I want to authenticate a socket connection in the Web browser

基本访问认证不认证套接字连接,而是认证HTTP请求。单个底层套接字连接内可以有多个 HTTP 请求,具有不同的身份验证或没有身份验证。并且请求身份验证和发送经过身份验证的请求可以在不同的连接中完成。

   responseHeaders(200);

请求认证时的状态码必须是401,不能是200

   headers.add("WWW-Authenticate: Basic");

WWW-Authenticate header 必须包含 realm 属性以向用户显示身份验证的用途。

有关该主题的简短概述,请参阅 Wikipedia: Basic access authentication: Server side. The ultimate reference is the standard