The first line of the request is unfolded into name/value pairs like other HTTP headers and must be present:
- "method" - the HTTP method for this request (e.g. "GET", "POST", "HEAD", etc)
- "scheme" - the scheme portion of the URL for this request (e.g. "https")
- "url" - the absolute path for this request (e.g. "/foo/bar.html")
- "version" - the HTTP version of this request (e.g. "HTTP/1.1")
If a client sends a SYN_STREAM without all of the method, url, and version headers, the server must reply with a HTTP 400 BAD REQUEST reply.
I should probably note that the header names are only displayed in title case; they are sent in lower-case as the spec demands. Also, my pretty printing does not print the frame length, since it isn't stored, but calculated on send and parsed on receive.
--
---
You received this message because you are subscribed to the Google Groups "spdy-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to spdy-dev+u...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
You're best off providing a decrypted packet trace so we can use spdyshark to debug it. What do the response headers say in the Google response? Can you dump the raw bytes after SSL decryption from your Go spdy framer?
Btw, did you read http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3#TOC-7.-Incompatibilities-with-SPDY-draft-2? Make sure you have the updated dictionary and endianness and stuff like that or you're going to have a bad time.
--
I misread your earlier email. I thought you had SPDY/2 and were trying to get SPDY/3 working. This is interesting. Does Chrome work with your SPDY/2 server? If not, I know how to debug that more easily.
For debugging a client, I think we might need Roberto to advise you on using the open source flip server, or perhaps if you ran mod_spdy or nginx you could test against their open source impls and see what is going wrong.
PS: We'd love to hear your implementation experience here. Would like to know what you found difficult or confusing and what not.
PPS: Are you writing an external Go library or do you hope to upstream it into their libraries? I wrote a lame one that I think they put in experimental since I wasn't really maintaining it. I'm excited to hear there's work on this front.
Just a thought, are you using the right dictionary for compression ?
It changed between SPDY/2 and SPDY/3.
Thanks,Jamie--
+------------------------------------+ |1| version | 1 | +------------------------------------+ | Flags (8) | Length (24 bits) | +------------------------------------+ |X| Stream-ID (31bits) | +------------------------------------+ |X| Associated-To-Stream-ID (31bits) | +------------------------------------+ | Pri|Unused | Slot | | +-------------------+
Hey,
Thanks for the reply. I appreciate it.
I am doing it using C/C++. Could you kindly tell me how you uncompressed the data that you received in the Name/Value pair.
i.e. the compressed data after:+------------------------------------+ |1| version | 1 | +------------------------------------+ | Flags (8) | Length (24 bits) | +------------------------------------+ |X| Stream-ID (31bits) | +------------------------------------+ |X| Associated-To-Stream-ID (31bits) | +------------------------------------+ | Pri|Unused | Slot | | +-------------------+
Thanks Again :)
+------------------------------------+ | Number of Name/Value pairs (int32) | +------------------------------------+ | Length of name (int32) | +------------------------------------+ | Name (string) | +------------------------------------+ | Length of value (int32) | +------------------------------------+ | Value (string) | +------------------------------------+ | (repeats) |
I decompress using Go's encoding/zlib package. Once the data is decompressed, I loop through the decompressed data, reading it into an http.Header structure.
The code for this is available here, but I'm afraid I only have the Go version; I don't have any experience using compression in C++.
Thanks,
Jamie
Hey,
Thanks for the reply. I appreciate it.
I am doing it using C/C++. Could you kindly tell me how you uncompressed the data that you received in the Name/Value pair.
--
Having done a near-complete rewrite of my library, I've experimented with SPDY/2 a fair amount more and I think I may have some more pieces to the puzzle now.It would appear that Chrome (v27) has an implementation of SPDY/2 that has some behaviours defined in SPDY/3. For example, Chrome requests images at priority 4 (despite SPDY/2 only having 2-bit priority, so max priority 3), and does not send the additional number of name/header values that were originally specified in SYN_REPLY and HEADERS frames.
As a result, it's possible that other oddities with draft 2 exist. If anyone has any specific insight into the implementation in Chrome and/or google.com, that would be very helpful.I'll try experimenting with various things, but for now I'll mark SPDY/2 requests as experimental.
--
Did your server implementation get priority 4 in SPDY/2 SYN_STREAM?It is very strange, and it is clearly impossible to get 4 from just 2 bit field as you wrote.
I did quick check server log and saw that chrome sends SYN_STREAM for gif with priority 2.
--
---
You received this message because you are subscribed to a topic in the Google Groups "spdy-dev" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/spdy-dev/aA69aSj8Fmc/unsubscribe?hl=en.
To unsubscribe from this group and all its topics, send an email to spdy-dev+u...@googlegroups.com.
accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 accept-encoding: gzip,deflate,sdch accept-language: en-US,en;q=0.8 cache-control: max-age=0 host: [xxx] if-modified-since: [xxx] method: GET scheme: https url: / user-agent: [xxx] version: HTTP/1.1
status: 304 version: HTTP/1.1
To unsubscribe from this topic, visit https://groups.google.com/d/topic/spdy-dev/aA69aSj8Fmc/unsubscribe.