diff --git a/lib/websocket/driver.rb b/lib/websocket/driver.rb index 586f6a6..455e700 100644 --- a/lib/websocket/driver.rb +++ b/lib/websocket/driver.rb @@ -240,7 +240,7 @@ def self.websocket?(env) upgrade = env['HTTP_UPGRADE'] || '' env['REQUEST_METHOD'] == 'GET' and - connection.downcase.split(/ *, */).include?('upgrade') and + connection.downcase.split(/[ \t]*,[ \t]*/).include?('upgrade') and upgrade.downcase == 'websocket' end diff --git a/lib/websocket/driver/client.rb b/lib/websocket/driver/client.rb index fadda79..0b92620 100644 --- a/lib/websocket/driver/client.rb +++ b/lib/websocket/driver/client.rb @@ -111,7 +111,7 @@ def validate_handshake if connection == '' return fail_handshake("'Connection' header is missing") - elsif connection.downcase != 'upgrade' + elsif !connection.downcase.split(/[ \t]*,[ \t]*/).include?('upgrade') return fail_handshake("'Connection' header value is not 'Upgrade'") end diff --git a/lib/websocket/driver/hybi.rb b/lib/websocket/driver/hybi.rb index 3487c4a..20c3e66 100644 --- a/lib/websocket/driver/hybi.rb +++ b/lib/websocket/driver/hybi.rb @@ -63,7 +63,7 @@ def initialize(socket, options = {}) @stage = 0 @masking = options[:masking] @protocols = options[:protocols] || [] - @protocols = @protocols.strip.split(/ *, */) if String === @protocols + @protocols = @protocols.strip.split(/[ \t]*,[ \t]*/) if String === @protocols @require_masking = options[:require_masking] @ping_callbacks = {} @@ -72,7 +72,7 @@ def initialize(socket, options = {}) return unless @socket.respond_to?(:env) if protos = @socket.env['HTTP_SEC_WEBSOCKET_PROTOCOL'] - protos = protos.split(/ *, */) if String === protos + protos = protos.split(/[ \t]*,[ \t]*/) if String === protos @protocol = protos.find { |p| @protocols.include?(p) } else @protocol = nil diff --git a/lib/websocket/http/headers.rb b/lib/websocket/http/headers.rb index cfe937c..204711c 100644 --- a/lib/websocket/http/headers.rb +++ b/lib/websocket/http/headers.rb @@ -33,7 +33,7 @@ module Headers # / DIGIT / ALPHA # ; any VCHAR, except delimiters - HEADER_LINE = /^([!#\$%&'\*\+\-\.\^_`\|~0-9a-z]+):\s*([\x20-\x7e]*?)\s*$/i + HEADER_LINE = /^([!#\$%&'\*\+\-\.\^_`\|~0-9a-z]+):\s*([\x09\x20-\x7e]*?)\s*$/i attr_reader :headers