1
0
mirror of https://github.com/golang/go synced 2024-10-05 07:11:22 -06:00
go/src/net
Brad Fitzpatrick a6557a05a0 net/http: allow Handlers to handle http2 upgrade PRI requests
The http2 spec defines a magic string which initates an http2 session:

    "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"

It was intentionally chosen to kinda look like an HTTP request, but
just different enough to break things not ready for it. This change
makes Go ready for it.

Notably: Go now accepts the request header (the prefix "PRI *
HTTP/2.0\r\n\r\n") as a valid request, even though it doesn't have a
Host header. But we now mark it as "Connection: close" and teach the
Server to never read a second request from the connection once that's
seen. If the http.Handler wants to deal with the upgrade, it has to
hijack the request, read out the "body", compare it against
"SM\r\n\r\n", and then speak http2. One of the new tests demonstrates
that hijacking.

Fixes #14451
Updates #14141 (h2c)

Change-Id: Ib46142f31c55be7d00c56fa2624ec8a232e00c43
Reviewed-on: https://go-review.googlesource.com/21327
Reviewed-by: Andrew Gerrand <adg@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-03-31 06:12:36 +00:00
..
http net/http: allow Handlers to handle http2 upgrade PRI requests 2016-03-31 06:12:36 +00:00
internal/socktest net/internal/socktest: add missing support for AcceptEx 2016-02-21 03:09:25 +00:00
mail net/mail: do not parse RFC 2047 tokens in quoted strings 2015-12-04 16:11:09 +00:00
rpc net/rpc: don't assume b.N > 0 2016-03-18 15:54:55 +00:00
smtp all: single space after period. 2016-03-02 00:13:47 +00:00
testdata net: fix parsing literal IPv6 address with zone identifier when using cgo 2015-12-04 02:50:00 +00:00
textproto all: single space after period. 2016-03-02 00:13:47 +00:00
url net/url: don't assume b.N > 0 2016-03-18 15:54:59 +00:00
addrselect_test.go net: fix IPv4 address selection 2015-11-17 23:48:43 +00:00
addrselect.go all: single space after period. 2016-03-02 00:13:47 +00:00
cgo_android.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
cgo_bsd.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
cgo_linux.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
cgo_netbsd.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
cgo_openbsd.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
cgo_resnew.go
cgo_resold.go
cgo_socknew.go net: fix parsing literal IPv6 address with zone identifier when using cgo 2015-12-04 02:50:00 +00:00
cgo_sockold.go net: fix parsing literal IPv6 address with zone identifier when using cgo 2015-12-04 02:50:00 +00:00
cgo_solaris.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
cgo_stub.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
cgo_unix_test.go
cgo_unix.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
cgo_windows.go
conf_netcgo.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
conf_test.go all: delete dead test code 2016-03-21 07:10:08 +00:00
conf.go all: single space after period. 2016-03-02 00:13:47 +00:00
conn_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
dial_gen.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
dial_test.go net: filter destination addresses when source address is specified 2016-03-16 03:17:56 +00:00
dial.go net: filter destination addresses when source address is specified 2016-03-16 03:17:56 +00:00
dnsclient_test.go
dnsclient_unix_test.go net: make TestGoLookupIPWithResolverConfig robust 2016-02-25 03:12:59 +00:00
dnsclient_unix.go net: fix race in (*resolverConfig).tryUpdate 2016-02-20 10:03:47 +00:00
dnsclient.go all: single space after period. 2016-03-02 00:13:47 +00:00
dnsconfig_unix_test.go net: fix race in (*resolverConfig).tryUpdate 2016-02-20 10:03:47 +00:00
dnsconfig_unix.go all: single space after period. 2016-03-02 00:13:47 +00:00
dnsmsg_test.go net: fix vet warnings 2016-03-02 16:26:36 +00:00
dnsmsg.go all: single space after period. 2016-03-02 00:13:47 +00:00
dnsname_test.go
error_plan9_test.go net: add missing aborted connection handling on accept test 2016-02-21 03:32:36 +00:00
error_posix_test.go net: add missing aborted connection handling on accept test 2016-02-21 03:32:36 +00:00
error_test.go net: filter destination addresses when source address is specified 2016-03-16 03:17:56 +00:00
error_unix_test.go net: prevent spurious TCP connection setup notification on darwin 2016-03-16 03:09:28 +00:00
error_windows_test.go net: add missing aborted connection handling on accept test 2016-02-21 03:32:36 +00:00
example_test.go
external_test.go
fd_mutex_test.go net: make unexposed methods start with lowercase letters 2016-03-17 21:43:41 +00:00
fd_mutex.go net: make unexposed methods start with lowercase letters 2016-03-17 21:43:41 +00:00
fd_plan9.go net: make unexposed methods start with lowercase letters 2016-03-17 21:43:41 +00:00
fd_poll_nacl.go net: make unexposed methods start with lowercase letters 2016-03-17 21:43:41 +00:00
fd_poll_runtime.go net: make unexposed methods start with lowercase letters 2016-03-17 21:43:41 +00:00
fd_posix_test.go
fd_posix.go
fd_unix.go net: make unexposed methods start with lowercase letters 2016-03-17 21:43:41 +00:00
fd_windows.go net: make unexposed methods start with lowercase letters 2016-03-17 21:43:41 +00:00
file_plan9.go
file_stub.go
file_test.go net: add missing File{Conn,Listener,PacketConn} read/write tests 2015-12-14 03:14:53 +00:00
file_unix.go net: do not unlink unix socket in UnixListener created from fd 2015-12-11 04:43:44 +00:00
file_windows.go
file.go
hook_cloexec.go
hook_plan9.go
hook_unix.go net: fix the build even harder 2015-12-17 18:43:12 +00:00
hook_windows.go net: add missing aborted connection handling on accept test 2016-02-21 03:32:36 +00:00
hook.go net: fix build 2015-12-17 16:06:58 +00:00
hosts_test.go net: ensure lookupStatic* returns copy of slice to disallow cache corruption. 2016-02-21 16:36:56 +00:00
hosts.go net: ensure lookupStatic* returns copy of slice to disallow cache corruption. 2016-02-21 16:36:56 +00:00
interface_bsd_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
interface_bsd.go all: single space after period. 2016-03-02 00:13:47 +00:00
interface_darwin.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
interface_dragonfly.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
interface_freebsd.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
interface_linux_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
interface_linux.go all: single space after period. 2016-03-02 00:13:47 +00:00
interface_netbsd.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
interface_openbsd.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
interface_stub.go all: single space after period. 2016-03-02 00:13:47 +00:00
interface_test.go all: single space after period. 2016-03-02 00:13:47 +00:00
interface_unix_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
interface_windows_test.go net, internal/syscall/windows: fix interface and address identification on windows 2015-12-10 08:04:07 +00:00
interface_windows.go all: single space after period. 2016-03-02 00:13:47 +00:00
interface.go all: single space after period. 2016-03-02 00:13:47 +00:00
ip_test.go net: make SplitHostPort return an empty host on error 2016-03-15 23:48:53 +00:00
ip.go net: filter destination addresses when source address is specified 2016-03-16 03:17:56 +00:00
iprawsock_plan9.go net: deduplicate raw IP socket code 2016-03-16 03:08:13 +00:00
iprawsock_posix.go net: deduplicate raw IP socket code 2016-03-16 03:08:13 +00:00
iprawsock_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
iprawsock.go net: deduplicate raw IP socket code 2016-03-16 03:08:13 +00:00
ipsock_plan9.go net: deduplicate TCP socket code 2016-03-03 04:23:59 +00:00
ipsock_posix.go net: simplify ipToSockaddr 2016-03-16 03:07:20 +00:00
ipsock_test.go
ipsock.go net: filter destination addresses when source address is specified 2016-03-16 03:17:56 +00:00
listen_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
lookup_plan9.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
lookup_stub.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
lookup_test.go net: skip TestLookupPort on android with netgo 2016-03-03 02:52:18 +00:00
lookup_unix.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
lookup_windows_test.go net: LookupAddr("127.0.0.1") is "localhost" not "localhost." on Plan 9 and Windows 2016-01-13 14:02:22 +00:00
lookup_windows.go net: LookupAddr("127.0.0.1") is "localhost" not "localhost." on Plan 9 and Windows 2016-01-13 14:02:22 +00:00
lookup.go all: single space after period. 2016-03-02 00:13:47 +00:00
mac_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
mac.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
main_cloexec_test.go
main_conf_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
main_noconf_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
main_plan9_test.go
main_posix_test.go
main_test.go
main_unix_test.go
main_windows_test.go net: add missing aborted connection handling on accept test 2016-02-21 03:32:36 +00:00
mockserver_test.go all: delete dead test code 2016-03-21 07:10:08 +00:00
net_test.go net: add missing aborted connection handling on accept test 2016-02-21 03:32:36 +00:00
net_windows_test.go net: skip TestInterfacesWithNetsh if "netsh help" contains no English words 2016-03-30 01:51:23 +00:00
net.go net: filter destination addresses when source address is specified 2016-03-16 03:17:56 +00:00
netgo_unix_test.go
nss_test.go
nss.go
packetconn_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
parse_test.go
parse.go net: check /etc/hosts for modifications every 5 seconds, not 5 minutes 2016-01-06 21:42:19 +00:00
pipe_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
pipe.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
platform_test.go
port_unix.go
protoconn_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sendfile_dragonfly.go net: make unexposed methods start with lowercase letters 2016-03-17 21:43:41 +00:00
sendfile_freebsd.go net: make unexposed methods start with lowercase letters 2016-03-17 21:43:41 +00:00
sendfile_linux.go net: make unexposed methods start with lowercase letters 2016-03-17 21:43:41 +00:00
sendfile_solaris.go net: make unexposed methods start with lowercase letters 2016-03-17 21:43:41 +00:00
sendfile_stub.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sendfile_windows.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
server_test.go
sock_bsd.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sock_cloexec.go
sock_linux.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sock_plan9.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sock_posix.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sock_stub.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sock_windows.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sockopt_bsd.go all: single space after period. 2016-03-02 00:13:47 +00:00
sockopt_linux.go all: single space after period. 2016-03-02 00:13:47 +00:00
sockopt_plan9.go net: deduplicate TCP socket code 2016-03-03 04:23:59 +00:00
sockopt_posix.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sockopt_solaris.go all: single space after period. 2016-03-02 00:13:47 +00:00
sockopt_stub.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sockopt_windows.go all: single space after period. 2016-03-02 00:13:47 +00:00
sockoptip_bsd.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sockoptip_linux.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sockoptip_posix.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sockoptip_stub.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sockoptip_windows.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
sys_cloexec.go
tcpsock_plan9.go net: deduplicate TCP socket code 2016-03-03 04:23:59 +00:00
tcpsock_posix.go net: deduplicate TCP socket code 2016-03-03 04:23:59 +00:00
tcpsock_test.go net: rename test files 2016-02-24 03:07:58 +00:00
tcpsock_unix_test.go net: prevent spurious TCP connection setup notification on darwin 2016-03-16 03:09:28 +00:00
tcpsock.go net: deduplicate TCP socket code 2016-03-03 04:23:59 +00:00
tcpsockopt_darwin.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
tcpsockopt_dragonfly.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
tcpsockopt_openbsd.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
tcpsockopt_plan9.go net: deduplicate TCP socket code 2016-03-03 04:23:59 +00:00
tcpsockopt_posix.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
tcpsockopt_solaris.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
tcpsockopt_stub.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
tcpsockopt_unix.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
tcpsockopt_windows.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
timeout_test.go net: fix for DialTimeout errors with large timeout 2016-02-23 22:48:04 +00:00
udpsock_plan9.go net: deduplicate UDP socket code 2016-03-16 03:07:52 +00:00
udpsock_posix.go net: deduplicate UDP socket code 2016-03-16 03:07:52 +00:00
udpsock_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
udpsock.go net: deduplicate UDP socket code 2016-03-16 03:07:52 +00:00
unixsock_plan9.go net: deduplicate Unix socket code 2016-03-16 03:08:31 +00:00
unixsock_posix.go net: deduplicate Unix socket code 2016-03-16 03:08:31 +00:00
unixsock_test.go all: make copyright headers consistent with one space after period 2016-03-01 23:34:33 +00:00
unixsock.go net: deduplicate Unix socket code 2016-03-16 03:08:31 +00:00