http & socks - grothoff.org filehttp & socks christian grotho key ideas of spdy/http 2.0...

34
HTTP & SOCKS Christian Grothoff HTTP & SOCKS Christian Grothoff [email protected] http://grothoff.org/christian/ “We shape our buildings; thereafter they shape us.” –Winston Churchill 1

Upload: buibao

Post on 27-Jun-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

HTTP & SOCKS

Christian [email protected]

http://grothoff.org/christian/

“We shape our buildings; thereafter they shape us.” –Winston

Churchill

1

Page 2: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

HTTP

• Text-based protocol (ASCII, LFLR)

• HTTP 1.0 and HTTP 1.1 as main variants

• Client: “METHOD URL HTTP/1.X”, headers, body,footers

• Server: “STATUSCODE STATUSMESSAGE”, headers,body, footers

2

Page 3: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

HTTP Methods• GET — request data, idempotent

• HEAD — request data, header only, idempotent

• POST — send request, once-only

• PUT — send request, idempotent

• DELETE — delete data, idempotent

• CONNECT — for proxies

• OPTIONS — query capabilities

• TRACE — debugging

3

Page 4: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Header & Footer format

• Key-value pairs

• Format: “KEY: VALUE” + LRLF

• Value can continue on next line (leading space)

• ASCII encoded

4

Page 5: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Headers, Body & Footers

• Headers terminated by empty line (LFLR)

• Headers can specify body length: “Content-Length”

• Headers can specify “chunked encoding”

• If neither is specified, body ends at EOF

• Footers follows body

5

Page 6: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Chunked encoding

• Body consists of “chunks”

• Each chunk begins with HEX-encoded length prefix

• HEX encoding at most 6 bytes (ABCDEF)

• Followed by LRLF and then the body data

• End-of-file marked with length-prefix of 0

6

Page 7: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Pipelining

• Allows client to send 2nd request over same TCPconnection

• Most clients only do this server completed response, ifat all

• “Connection: close” disables pipelining

• HTTP 1.1-only

7

Page 8: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Cache Control

• Age, Cache-Control, Date, ETag, Expires, Last-Modified, Retry-After

• If-Match, If-None-Match, If-Range, If-Unmodified-Since

8

Page 9: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Client Capabilities

• Accept-Charset

• Accept-Encoding

• Accept-Language

• Accept-Ranges

• Use-Agent

9

Page 10: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Request Details

• Cookie

• From

• Host

• Referer

• Via

10

Page 11: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Response Details

• Content-Encoding

• Content-Language

• Content-Location

• Content-MD5

• Content-Type

11

Page 12: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Response Status Codes

• 1xx — Informational

• 2xx — Successful

• 3xx — Redirection

• 4xx — Client Error

• 5xx — Server Error

12

Page 13: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Summary

HTTP features:

• Pipelining (but often not used by browsers)

• Caching

• Compression of body (optional)

• Authentication (basic, digest, HTTPS)

• Encryption (with HTTPS)

• Integrity protection (with footers)

13

Page 14: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

HTTP 2.0

• Developed by Hypertext Transfer Protocol Bis (httpbis)working group

• Connection multiplexing, header compression, request-response pipelining

• Same transaction semantics as HTTP 1.1

• Drafts: Google SPDY, Microsoft HTTP Speed+Mobility,Tarreau-FOSS draft

• Main goal: latency, latency, latency

14

Page 15: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Key Ideas of SPDY/HTTP 2.0

• Avoid redundant, text-based headers, go binary,compress, transmit once

• Multiplex multiple requests and responses concurrentlyover the same TCP stream

• Allow client to prioritize requests

• Allow server to push responses for which there is notrequest yet

15

Page 16: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Proxies

Proxies are servers that act as an intermediary. Uses:

• Security: anonymity, access control, access controlcircumvention, logging/auditing

• Performance: caching, multiplexing

16

Page 17: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Forward Proxy

Proxy InternetUser

example.com

Internal network

17

Page 18: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Open Proxy

ProxyInternet

example.com

Internet

18

Page 19: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Reverse Proxy

Internet Proxy Web server

example.com

Internal network

19

Page 20: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

SOCKet Secure (SOCKS)

• Used for Forward or Open Proxies

• Supported by virtually all HTTP-client implementations

• Very simple protocol

⇒ Suggested type of proxy for the project!

20

Page 21: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

SOCKS4 request

• Version — 0x04

• Command code — 0x01 = stream, 0x02 =port

• Destination port — 2 bytes, NBO

• Destination IP — 4 bytes, NBO

• User name — 0-terminated string

• Followed by data to send to the server

21

Page 22: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

SOCKS4 response

• Padding (1) — 0x00

• Status — 0x5a = granted, 0x5b = rejected

• Padding (2) — 2 bytes

• Padding (3) — 4 bytes

• Followed by data from the server

22

Page 23: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

SOCKS4a

• Allows client to delegate DNS resolution to proxy

• IP address beings with 3x 0x00, followed by one bytethat is not 0x00

• User name is followed by 0-terminated hostname

• Server response contains port and IP in padding 2 and3

23

Page 24: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

SOCKS5

+ Authentication

+ IPv6 support

+ UDP support

- Slightly more complicated wire format

⇒ Use SOCKS4(a) use for the project!

24

Page 25: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Questions

?“” –

25

Page 26: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Questions

?

26

Page 27: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

The Project: HTTP over SCTP

TCP

TCP

TCP

TCP

TCP

TCP

TCP

TCP

Browser HTTPServer

SCTP Association

Loopback LoopbackHigh Latency Internet

Project Project

Socks 4/5Proxy

SCTPServer

27

Page 28: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

The Project: HTTP over SCTP

SocksProxy

HTTPServer

HTTPServer

HTTPServer

SCTPServerBrowser

SCTPServer

TCP

TCP

TCP

TCP

TCP STCP

STCP

TCP

28

Page 29: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Step 1: Keep It Simple

• One association (UDP style?) from proxy to SCTPserver

• One stream per HTTP request

• Grab SOCKSv4a data, rest passes through untouched

• SCTP server not running ⇒ use TCP

29

Page 30: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Step 2: Benchark

• Setup testbed

• HTTP server with “complex” website

• Browser downloading full site with parallel TCPconnections and HTTP 1.1 pipelining

• Measure: latency, bandwidth consumption, etc.

• Simulate congestion, high delay

• Visualize

30

Page 31: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Step 3: Optimize

• Idea: eliminate duplicate HTTP header transmission

• Idea: enable server push

• Idea: add compression

• Tools: GNU libmicrohttpd can provide HTTP server inproxy

• Tools: libcurl can implement HTTP client

• Tools: libtidy can parse HTML

• Tools: libz, libbz2 can compress data

31

Page 32: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Step 4: Compare

• HTTP over TCP

• HTTP over SCTP

• SPDY

32

Page 33: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

Questions

?“There are two ways of constructing a software design. One

way is to make it so simple that there are obviously no

deficiencies. And the other way is to make it so complicated

that there are no obvious deficiencies.” – C.A.R. Hoare

33

Page 34: HTTP & SOCKS - grothoff.org fileHTTP & SOCKS Christian Grotho Key Ideas of SPDY/HTTP 2.0 Avoid redundant, text-based headers, go binary, compress, transmit once Multiplex multiple

HTTP & SOCKS Christian Grothoff

RTFL

Copyright (C) 2012 Christian Grothoff

Verbatim copying and distribution of this

entire article is permitted in any medium,

provided this notice is preserved.

34