# US 9,438,701 B2 · Systems and methods for a SPDY to HTTP gateway

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 9,438,701 B2
- Document ID: US9438701B2
- Status: Granted
- Kind: B2
- Application number: 13/887,004
- Filed: 2013-05-03
- Published: 2013-11-07
- Granted: 2016-09-06
- Earliest claimed: 2012-05-05
- Assignees: Citrix Systems, Inc.
- Applicants: Citrix Systems, Inc.
- Inventors: Saravana Annamalaisami; Ashok Kumar Jagadeeswaran; Rajesh Joshi
- Web page: https://patentgrep.com/patent/US9438701B2

## CPC

- H04L 69/26: {Special purpose or proprietary protocols or architectures (network applications for proprietary or special purpose networking environments H04L67/12)}
- H04L 67/02: based on web technology, e.g. hypertext transfer protocol [HTTP]
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)

## Abstract

The present disclosure is directed towards a system and method for providing a SPDY to HTTP gateway via a device intermediary to a plurality of clients and a server. An NPN handshake by the intermediary device may establish SPDY support. The intermediary device may receive and process one or more control frames via SPDY session with the client. The intermediary device may generate and transmit HTTP communication to server corresponding to SPDY control frames. The intermediary device may receive and process one or more HTTP responses from server. The intermediary device may generate and transmit SPDY communication via SPDY session to client corresponding to HTTP response.

## Claims

### Claim 1

A method for providing a SPDY to HyperText Transfer Protocol (HTTP) gateway via a device intermediary to a plurality of clients and a server, the method comprising:
(a) receiving, by a device intermediary to a plurality of clients and a server, one or more control frames via a SPDY session with a client of the plurality of clients, the SDPY session established by the device responsive to receiving an empty Transport Layer Security (TLS) Next Protocol Negotiation (NPN) extension during a TLS handshake between the device and the client;
(b) decompressing, by the device, name-value pairs in the header block of the one or more control frames;
(c) identifying, by the device, in the decompressed name-value-pairs a predetermined set of headers; and
(d) generating, by the device responsive to the identification and for transmission to the server via HTTP, an HTTP request that comprises the predetermined set of headers from the one of more control frames of the SPDY session.

### Claim 2 (depends on 1)

The method of claim 1, wherein step (a) further comprises receiving, by the device, a request from the client to establish a Transport Layer Security (TLS) session with the server, identifying, by the device, from the request that a TLS Next Protocol Negotiation (NPN) extension is empty, transmitting, by the device responsive to the identification, a SPDY version and HTTP version; and establishing, by the device, an SPDY handler based on a version of the SPDY protocol selected by the client during an NPN handshake.

### Claim 3 (depends on 1)

The method of claim 1, wherein step (a) further comprises validating, by the device, a version and stream id of the one or more control frames.

### Claim 4 (depends on 1)

The method of claim 1, wherein step (a) further comprising accumulating, by the device, packets received from the client via the SPDY session if a length specified in a control frame of the one or more control frame is larger than a size of a current packet.

### Claim 5 (depends on 1)

The method of claim 1, further comprising demultiplexing, by the device, incoming SPDY streams received from the client via the SDPY session.

### Claim 6 (depends on 1)

The method of claim 1, wherein step (b) further comprising decompressing, by the device, one or more name-value pairs in the header block of the one or more control frames using zlib decompression.

### Claim 7 (depends on 1)

The method of claim 1, wherein step (c) further comprises parsing, by the device, output of decompression the name-value pairs corresponding to the predetermined set of headers comprising a URL, a VERSION and a METHOD header.

### Claim 8 (depends on 1)

The method of claim 1, wherein step (d) further comprises including, by the device, any remaining name-value pairs of the header block from the control frame in the generated HTTP request.

### Claim 9 (depends on 1)

The method of claim 1, wherein step (d) further comprises inserting, by the device, a stream id header in an HTTP header of the generated HTTP request, the stream id indicating that the HTTP request is created from an SPDY session.

### Claim 10 (depends on 1)

The method of claim 1, further comprising receiving, by the device, one or more data frames from the client via the SPDY session, de-framing the data frames, generating one or more HTTP requests with data from the data frames and transmitting the one or more HTTP requests to the server.

### Claim 11

A system for providing a SPDY to HyperText Transfer Protocol (HTTP) gateway via a device intermediary to a plurality of clients and a server, the system comprising:
a device intermediary to a plurality of clients and a server, the device configured to receive one or more control frames via a SPDY session with a client of the plurality of clients;
wherein the device is configured to:
establish the SPDY session responsive to receiving an empty Transport Layer Security (TLS) Next Protocol Negotiation (NPN) extension during a TLS handshake between the device and the client
decompress name-value pairs in the header block of the one or more control frames;
identify in the decompressed name-value-pairs a predetermined set of headers; and
generate, responsive to the identification and for transmission to the server via HTTP, an HTTP request that comprises the predetermined set of headers from the one of more control frames of the SPDY session.

### Claim 12 (depends on 11)

The system of claim 11, wherein step (a) further comprises receiving, by the device, a request from the client to establish a Transport Layer Security (TLS) session with the server, identifying, by the device, from the request that a TLS Next Protocol Negotiation (NPN) extension is empty, transmitting, by the device responsive to the identification, a SPDY version and HTTP version; and establishing, by the device, an SPDY handler based on a version of the SPDY protocol selected by the client during an NPN handshake.

### Claim 13 (depends on 11)

The system of claim 11, wherein the device is further configured to validate a version and stream id of the one or more control frames.

### Claim 14 (depends on 11)

The system of claim 11, wherein the device is further configured to accumulate packets received from the client via the SPDY session if a length specified in a control frame of the one or more control frame is larger than a size of a current packet.

### Claim 15 (depends on 11)

The system of claim 11, the device is further configured to demultiplex incoming SPDY streams received from the client via the SDPY session.

### Claim 16 (depends on 11)

The system of claim 11, wherein the device is further configured to decompress one or more name-value pairs in the header block of the one or more control frames using zlib decompression.

### Claim 17 (depends on 11)

The system of claim 11, wherein the device is further configured to parse output of decompression the name-value pairs corresponding to the predetermined set of headers comprising a URL, a VERSION and a METHOD header.

### Claim 18 (depends on 11)

The system of claim 11, wherein the device is further configured to include any remaining name-value pairs of the header block from the control frame in the generated HTTP request.

### Claim 19 (depends on 11)

The system of claim 11, wherein the device is further configured to insert a stream id header in an HTTP header of the generated HTTP request, the stream id indicating that the HTTP request is created from the SPDY session.

### Claim 20 (depends on 11)

The system of claim 11, wherein the device is further configured to receive one or more data frames from the client via the SPDY session, de-frame the data frames, generate one or more HTTP requests with data from the data frames and transmit the one or more HTTP requests to the server.
