# US 10,122,816 B2 · HTTP proxy

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

- Number: US 10,122,816 B2
- Document ID: US10122816B2
- Status: Granted
- Kind: B2
- Application number: 15/436,790
- Filed: 2017-02-18
- Published: 2017-06-08
- Granted: 2018-11-06
- Earliest claimed: 2015-03-24
- Assignees: Fortinet, Inc.
- Applicants: Fortinet, Inc.
- Inventors: Jianwen Zhang
- Web page: https://patentgrep.com/patent/US10122816B2

## CPC

- H04L 67/02: based on web technology, e.g. hypertext transfer protocol [HTTP]
- H04L 67/565: Conversion or adaptation of application format or content (adding application control or application functional data H04L67/561)
- H04L 67/5651: Reducing the amount or size of exchanged application data
- H04L 67/63: Routing a service request depending on the request content or context
- H04L 69/08: Protocols for interworking; Protocol conversion
- H04L 69/22: Parsing or analysis of headers
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)

## Abstract

Systems and methods for translating between an older version of HTTP and a newer version of HTTP are provided. According to an embodiment, a first request message, compliant with the newer version and directed to a server that supports the older version but does not support the newer version, is received by the proxy from a client that supports the newer version. A second request message, compliant with the older version, is created by the proxy by translating the first request message. The second request message is sent to the server by the proxy. A first response message, compliant with the older version and directed to the client, is received by the proxy from the server. A second response message, compliant with the newer version, is created by the proxy by translating the first response message. The second response message is sent to the client by the proxy.

## Claims

### Claim 1

A method comprising:
receiving, from a client, by a proxy that translates between a newer version of Hypertext Transfer Protocol (HTTP) and an older version of HTTP and running within an Application Delivery Controller (ADC) or a Web Application Filter (WAF) logically interposed between the client that supports the newer version of HTTP and a server that supports the older version of HTTP but does not support the newer version of HTTP, a first HTTP request message that is compliant with the newer version of HTTP and specifies a resource of the server, wherein the older version of HTTP comprises HTTP version 1 (HTTP/1) and wherein the newer version of HTTP comprises HTTP version 2 (HTTP/2);
creating, by the proxy, a second HTTP request message that is compliant with the older version of HTTP by translating the first HTTP request message;
sending to the server, by the proxy, the second HTTP request message;
responsive to the second HTTP request message, receiving from the server, by the proxy, a first HTTP response message that is compliant with the older version of HTTP and contains payload data representing content of the resource;
creating, by the proxy, a second HTTP response message that is compliant with the newer version of HTTP by translating the first HTTP response message, wherein header fields of the first HTTP request message and the second HTTP response message are compressed;
sending to the client, by the proxy, the second HTTP response message; and
wherein the proxy includes an index table in which mappings of header field representations to corresponding header fields are stored and wherein complete header fields of HTTP/2 request messages are decoded based on the index table.

### Claim 2 (depends on 1)

The method of claim 1, further comprising:
establishing an HTTP/2 connection between the proxy and the client; and
establishing an HTTP/1 connection between the proxy and the server; wherein
the first HTTP request message and the second HTTP response message are transmitted between the proxy and the client on the HTTP/2 connection; and
the second HTTP request message and the first HTTP response message are transmitted between the proxy and the server on the HTTP/1 connection.

### Claim 3 (depends on 2)

The method of claim 2, wherein the first HTTP request message and the second HTTP response message comprise one or more frames and the one or more frames are transmitted in a stream within the HTTP/2 connection.

### Claim 4 (depends on 3)

The method of claim 3, wherein the one or more frames of the first HTTP request message are buffered by the proxy.

### Claim 5 (depends on 1)

The method of claim 1, wherein the proxy includes a connection context data buffer in which header fields of a previous HTTP/2 message are stored; and complete header fields of HTTP/2 request message are reconstructed based on the connection context data buffer.

### Claim 6 (depends on 1)

The method of claim 1, wherein the index table comprises a static table and a dynamic table.

### Claim 7 (depends on 1)

The method of claim 1, wherein said creating, by the proxy, the second HTTP response message comprises:
breaking the first HTTP response message into one or more frames for the second HTTP response message based on HTTP/2 syntax; and
compressing header fields of the second HTTP response message based on a compression mechanism associated with HTTP/2.

### Claim 8

A computer system comprising:
a non-transitory storage device having embodied therein instructions representing a proxy application that translates between a newer version of Hypertext Transfer Protocol (HTTP) and an older version of HTTP; and
one or more processors coupled to the non-transitory storage device and operable to execute the proxy application to perform a method comprising:
receiving, from a client that supports the newer version of HTTP, a first HTTP request message that is compliant with the newer version of HTTP and that specifies a resource of a server that supports the older version of HTTP but does not support the newer version of HTTP, wherein the older version of HTTP comprises HTTP version 1 (HTTP/1) and wherein the newer version of HTTP comprises HTTP version 2 (HTTP/2);
creating a second HTTP request message that is compliant with the older version of HTTP by translating the first HTTP request message;
sending the second HTTP request message to the server;
responsive to the second HTTP request message, receiving, from the server, a first HTTP response message that is compliant with the older version of HTTP and that contains payload data representing content of the resource;
creating a second HTTP response message that is compliant with the newer version of HTTP by translating the first HTTP response message wherein header fields of the first HTTP request message and the second HTTP response message are compressed;
sending the second HTTP response message to the client; and
wherein the proxy includes an index table in which mappings of header field representations to corresponding header fields are stored and wherein complete header fields of HTTP/2 request messages are decoded based on the index table.

### Claim 9 (depends on 8)

The computer system of claim 8, wherein the method further comprises:
establishing an HTTP/2 connection between the proxy and the client; and
establishing an HTTP/1 connection between the proxy and the server; wherein
the first HTTP request message and the second HTTP response message are transmitted between the proxy and the client on the HTTP/2 connection; and
the second HTTP request message and the first HTTP response message are transmitted between the proxy and the server on the HTTP/1 connection.

### Claim 10 (depends on 9)

The computer system of claim 9, wherein the first HTTP request message and the second HTTP response message comprise one or more frames and the one or more frames are transmitted in a stream within the HTTP/2 connection.

### Claim 11 (depends on 10)

The computer system of claim 10, wherein the one or more frames of the first HTTP request message are buffered by the proxy.

### Claim 12 (depends on 8)

The computer system of claim 8, wherein the proxy includes a connection context data buffer in which header fields of a previous HTTP/2 message are stored; and complete header fields of HTTP/2 request message are reconstructed based on the connection context data buffer.

### Claim 13 (depends on 8)

The computer system of claim 8, wherein the index table comprises a static table and a dynamic table.

### Claim 14 (depends on 8)

The computer system of claim 8, wherein said creating the second HTTP response message comprises:
breaking the first HTTP response message into one or more frames for the second HTTP response message based on HTTP/2 syntax; and
compressing header fields of the second HTTP response message based on a compression mechanism associated with HTTP/2.

### Claim 15

A method comprising:
receiving, from a client, by a proxy that translates between a newer version of Hypertext Transfer Protocol (HTTP) and an older version of HTTP and running within an Application Delivery Controller (ADC) or a Web Application Filter (WAF) logically interposed between the client that supports the newer version of HTTP and a server that supports the older version of HTTP but does not support the newer version of HTTP, a first HTTP request message that is compliant with the newer version of HTTP and specifies a resource of the server, wherein the older version of HTTP comprises HTTP version 1 (HTTP/1) and wherein the newer version of HTTP comprises HTTP version 2 (HTTP/2);
creating, by the proxy, a second HTTP request message that is compliant with the older version of HTTP by translating the first HTTP request message;
sending to the server, by the proxy, the second HTTP request message;
responsive to the second HTTP request message, receiving from the server, by the proxy, a first HTTP response message that is compliant with the older version of HTTP and contains payload data representing content of the resource;
creating, by the proxy, a second HTTP response message that is compliant with the newer version of HTTP by translating the first HTTP response message, including:
breaking the first HTTP response message into one or more frames for the second HTTP response message based on HTTP/2 syntax; and
compressing header fields of the second HTTP response message based on a compression mechanism associated with HTTP/2; and
sending to the client, by the proxy, the second HTTP response message.

### Claim 16 (depends on 15)

The method of claim 15, further comprising:
establishing an HTTP/2 connection between the proxy and the client; and
establishing an HTTP/1 connection between the proxy and the server; wherein
the first HTTP request message and the second HTTP response message are transmitted between the proxy and the client on the HTTP/2 connection; and
the second HTTP request message and the first HTTP response message are transmitted between the proxy and the server on the HTTP/1 connection.

### Claim 17 (depends on 16)

The method of claim 16, wherein the first HTTP request message and the second HTTP response message comprise one or more frames and the one or more frames are transmitted in a stream within the HTTP/2 connection.

### Claim 18 (depends on 17)

The method of claim 17, wherein the one or more frames of the first HTTP request message are buffered by the proxy.

### Claim 19 (depends on 18)

The method of claim 18, wherein header fields of the first HTTP request message and the second HTTP response message are compressed.

### Claim 20 (depends on 19)

The method of claim 19, wherein the proxy includes a connection context data buffer in which header fields of a previous HTTP/2 message are stored; and complete header fields of HTTP/2 request message are reconstructed based on the connection context data buffer.

### Claim 21 (depends on 19)

The method of claim 19, wherein the index table comprises a static table and a dynamic table.

### Claim 22

A computer system comprising:
a non-transitory storage device having embodied therein instructions representing a proxy application that translates between a newer version of Hypertext Transfer Protocol (HTTP) and an older version of HTTP; and
one or more processors coupled to the non-transitory storage device and operable to execute the proxy application to perform a method comprising:
receiving, from a client that supports the newer version of HTTP, a first HTTP request message that is compliant with the newer version of HTTP and that specifies a resource of a server that supports the older version of HTTP but does not support the newer version of HTTP, wherein the older version of HTTP comprises HTTP version 1 (HTTP/1) and wherein the newer version of HTTP comprises HTTP version 2 (HTTP/2);
creating a second HTTP request message that is compliant with the older version of HTTP by translating the first HTTP request message;
sending the second HTTP request message to the server;
responsive to the second HTTP request message, receiving, from the server, a first HTTP response message that is compliant with the older version of HTTP and that contains payload data representing content of the resource;
creating a second HTTP response message that is compliant with the newer version of HTTP by translating the first HTTP response message, including:
breaking the first HTTP response message into one or more frames for the second HTTP response message based on HTTP/2 syntax; and
compressing header fields of the second HTTP response message based on a compression mechanism associated with HTTP/2; and
sending the second HTTP response message to the client.

### Claim 23 (depends on 22)

The computer system of claim 22, wherein the method further comprises:
establishing an HTTP/2 connection between the proxy and the client; and
establishing an HTTP/1 connection between the proxy and the server; wherein
the first HTTP request message and the second HTTP response message are transmitted between the proxy and the client on the HTTP/2 connection; and
the second HTTP request message and the first HTTP response message are transmitted between the proxy and the server on the HTTP/1 connection.

### Claim 24 (depends on 23)

The computer system of claim 23, wherein the first HTTP request message and the second HTTP response message comprise one or more frames and the one or more frames are transmitted in a stream within the HTTP/2 connection.

### Claim 25 (depends on 24)

The computer system of claim 24, wherein the one or more frames of the first HTTP request message are buffered by the proxy.

### Claim 26 (depends on 22)

The computer system of claim 22, wherein header fields of the first HTTP request message and the second HTTP response message are compressed.

### Claim 27 (depends on 26)

The computer system of claim 26, wherein the proxy includes a connection context data buffer in which header fields of a previous HTTP/2 message are stored; and complete header fields of HTTP/2 request message are reconstructed based on the connection context data buffer.

### Claim 28 (depends on 26)

The computer system of claim 26, wherein the index table comprises a static table and a dynamic table.
