@@ -30,12 +30,14 @@ struct WebSocketClientChannel: ClientConnectionChannel {
3030
3131 let urlPath : String
3232 let hostHeader : String
33+ let originHeader : String
3334 let handler : WebSocketDataHandler < WebSocketClient . Context >
3435 let configuration : WebSocketClientConfiguration
3536
3637 init ( handler: @escaping WebSocketDataHandler < WebSocketClient . Context > , url: URI , configuration: WebSocketClientConfiguration ) throws {
37- guard let hostHeader = Self . urlHostHeader ( for: url) else { throw WebSocketClientError . invalidURL }
38+ guard let ( hostHeader, originHeader ) = Self . urlHostAndOriginHeaders ( for: url) else { throw WebSocketClientError . invalidURL }
3839 self . hostHeader = hostHeader
40+ self . originHeader = originHeader
3941 self . urlPath = Self . urlPath ( for: url)
4042 self . handler = handler
4143 self . configuration = configuration
@@ -63,8 +65,8 @@ struct WebSocketClientChannel: ClientConnectionChannel {
6365 )
6466
6567 var headers = HTTPHeaders ( )
66- headers. add ( name: " Content-Length " , value: " 0 " )
67- headers. add ( name: " Host " , value: self . hostHeader )
68+ headers. replaceOrAdd ( name: " Host " , value: self . hostHeader )
69+ headers. replaceOrAdd ( name: " Origin " , value: self . originHeader )
6870 let additionalHeaders = HTTPHeaders ( self . configuration. additionalHeaders)
6971 headers. add ( contentsOf: additionalHeaders)
7072 // add websocket extensions to headers
@@ -128,12 +130,13 @@ struct WebSocketClientChannel: ClientConnectionChannel {
128130 url. path + ( url. query. map { " ? \( $0) " } ?? " " )
129131 }
130132
131- static func urlHostHeader( for url: URI) - > String? {
132- guard let host = url. host else { return nil }
133+ static func urlHostAndOriginHeaders( for url: URI) - > ( host: String, origin: String) ? {
134+ guard let scheme = url. scheme, let host = url. host else { return nil }
135+ let origin = " \( scheme) :// \( host) "
133136 if let port = url. port {
134- return " \( host) : \( port) "
137+ return ( host : " \( host) : \( port) " , origin : origin )
135138 } else {
136- return host
139+ return ( host: host , origin : origin )
137140 }
138141 }
139142}
0 commit comments