Re: Hello from Mozilla

From: Amos Jeffries <squid3_at_treenet.co.nz>
Date: Sat, 18 Jul 2009 00:00:16 +1200

Henrik Nordstrom wrote:
> fre 2009-07-17 klockan 16:32 +1200 skrev Amos Jeffries:
>
>> 3.1.5.1
>> Connect to the server given by /host/ on port 80 and ask it to
>> upgrade from HTTP to WebSockets.
>>
>> The client must send only the following lines:
>>
>> GET /thepath/ HTTP/1.1
>> Host: /host/
>> Upgrade: WebSockets
>> Connection: Upgrade
>>
>> terminated by two CRLF as per HTTP specification.
>
> Per HTTP specifications the client SHOULD send more lines, in specific
> the User-Agent.
>

Ah, thanks. Yes there are others that need to be added here for the
formal draft.

>> 3.1.5.2
>> A server receiving the request SHOULD ignore any other headers
>> received with the request.
>>
>> If any data following the headers is received then fail the
>> WebSocket connection. The server MUST discard any body data
>> received with an Upgrade request. It MAY respond with a 4xx or
>> 5xx HTTP error code from the HTTP specification.
>
> No, only 4xx. It's the request that is in error for being an WebSockets
> Upgrade request, not the server.

I'm thinking 5xx if something went wrong, same as HTTP cases. So that
the WebSockets spec is only limiting the 'good' response, but accepting
of any HTTP error states as also its failure state.

>
> But per HTTP specifications such body data is part of the HTTP Upgrade
> request and should be ignored if switching protocols as part of ignoring
> the HTTP request which contained the Upgrade request. Consider for
> example if the request is a POST request, containing a alternative
> simplex representation of the communication meant to be used by a
> non-WebSockets server.

Ian: is that a relevant case? you can spec it in or out as needed.

But I'm thinking out, since the idea here is to setup a TCP-link tunnel
then perform authentication handshake inside it. The upgrade request is
only to get the MITM/Surrogates to pass it correctly or fail it cleanly.

>
>> 3.1.5.4
>> A server receiving a valid HTTP Upgrade request to WebSockets
>> and which does not accept that WebSockets upgrade MUST send back
>> a 4xx or 5xx HTTP response as per section 3.1.5.2.
>
> There is no such requirement in HTTP. Handling Upgrade is purely
> optional and the server is free to ignore Upgrade. Upgrade is a "please
> upgrade to one of these protocols if supported".

Meaning HTTP does not care what gets returned...

  At the non-101 reply point its not usable as a WebSockets link. This
bit is going slightly beyond HTTP in a compatible way and refers to the
WebSockets-enabled server rejecting the socket connection.

Ian mentioned many times WebSockets being 'opt-in'. This clause permits
'opt-in' to be denied by the server. It's irrelevant to non-WebSocket
intermediaries and applies only to WebSocket origin servers. Perhapse
that needs to be worded clearer.

>
>> The server SHOULD send only the following lines:
>>
>> HTTP/1.1 101 Web Socket Protocol Handshake
>> Upgrade: WebSocket
>> Connection: Upgrade
>
> While it's true HTTP does not mandate any headers for 1xx responses,
> including things like Server is a good idea in 101 responses, and there
> may also be other headers required by the HTTP operation such as
> Authentication-Info and possibly other headers as well in future
> specifications.

Ah yes. Okay.
Ian: anything else you find useful as required here as well. This is
where you get the "is the mystery server capable of WebSockets" info.
Being the _right_ one needs must separate and handled by the WebSockets
handshake.

Just only specify it at the string level. Specifying the order sent is
fine but confusing because it implies order received. Specifying the
order received beyond 101 is broken.

Amos

-- 
Please be using
   Current Stable Squid 2.7.STABLE6 or 3.0.STABLE16
   Current Beta Squid 3.1.0.9
Received on Fri Jul 17 2009 - 12:00:27 MDT

This archive was generated by hypermail 2.2.0 : Thu Jul 30 2009 - 12:00:09 MDT