internal static HttpRequest CreateWebSocketRequest(Uri uri) { var req = new HttpRequest("GET", uri.PathAndQuery); var headers = req.Headers; // Only includes a port number in the Host header value if it's non-default. // See: https://tools.ietf.org/html/rfc6455#page-17 var port = uri.Port; var schm = uri.Scheme; headers["Host"] = (port == 80 && schm == "ws") || (port == 443 && schm == "wss") ? uri.DnsSafeHost : uri.Authority; headers["Upgrade"] = "websocket"; headers["Connection"] = "Upgrade"; return req; }
internal static HttpRequest CreateConnectRequest(Uri uri) { var host = uri.DnsSafeHost; var port = uri.Port; var authority = $"{host}:{port}"; var req = new HttpRequest("CONNECT", authority); req.Headers["Host"] = port == 80 ? host : authority; return req; }