doc.go 2.98 KB
Newer Older
Brad Fitzpatrick's avatar
Brad Fitzpatrick committed
1 2 3 4 5
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

/*
Brad Fitzpatrick's avatar
Brad Fitzpatrick committed
6
Package http provides HTTP client and server implementations.
Brad Fitzpatrick's avatar
Brad Fitzpatrick committed
7

8
Get, Head, Post, and PostForm make HTTP (or HTTPS) requests:
Brad Fitzpatrick's avatar
Brad Fitzpatrick committed
9 10 11 12 13 14

	resp, err := http.Get("http://example.com/")
	...
	resp, err := http.Post("http://example.com/upload", "image/jpeg", &buf)
	...
	resp, err := http.PostForm("http://example.com/form",
15
		url.Values{"key": {"Value"}, "id": {"123"}})
Brad Fitzpatrick's avatar
Brad Fitzpatrick committed
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

The client must close the response body when finished with it:

	resp, err := http.Get("http://example.com/")
	if err != nil {
		// handle error
	}
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	// ...

For control over HTTP client headers, redirect policy, and other
settings, create a Client:

	client := &http.Client{
		CheckRedirect: redirectPolicyFunc,
	}

	resp, err := client.Get("http://example.com")
	// ...

37 38
	req, err := http.NewRequest("GET", "http://example.com", nil)
	// ...
Brad Fitzpatrick's avatar
Brad Fitzpatrick committed
39 40 41 42 43 44 45 46
	req.Header.Add("If-None-Match", `W/"wyzzy"`)
	resp, err := client.Do(req)
	// ...

For control over proxies, TLS configuration, keep-alives,
compression, and other settings, create a Transport:

	tr := &http.Transport{
47 48
		MaxIdleConns:       10,
		IdleConnTimeout:    30 * time.Second,
Brad Fitzpatrick's avatar
Brad Fitzpatrick committed
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
		DisableCompression: true,
	}
	client := &http.Client{Transport: tr}
	resp, err := client.Get("https://example.com")

Clients and Transports are safe for concurrent use by multiple
goroutines and for efficiency should only be created once and re-used.

ListenAndServe starts an HTTP server with a given address and handler.
The handler is usually nil, which means to use DefaultServeMux.
Handle and HandleFunc add handlers to DefaultServeMux:

	http.Handle("/foo", fooHandler)

	http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {
64
		fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
Brad Fitzpatrick's avatar
Brad Fitzpatrick committed
65 66 67 68 69 70 71 72 73 74
	})

	log.Fatal(http.ListenAndServe(":8080", nil))

More control over the server's behavior is available by creating a
custom Server:

	s := &http.Server{
		Addr:           ":8080",
		Handler:        myHandler,
75 76
		ReadTimeout:    10 * time.Second,
		WriteTimeout:   10 * time.Second,
Brad Fitzpatrick's avatar
Brad Fitzpatrick committed
77 78 79
		MaxHeaderBytes: 1 << 20,
	}
	log.Fatal(s.ListenAndServe())
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94

The http package has transparent support for the HTTP/2 protocol when
using HTTPS. Programs that must disable HTTP/2 can do so by setting
Transport.TLSNextProto (for clients) or Server.TLSNextProto (for
servers) to a non-nil, empty map. Alternatively, the following GODEBUG
environment variables are currently supported:

	GODEBUG=http2client=0  # disable HTTP/2 client support
	GODEBUG=http2server=0  # disable HTTP/2 server support
	GODEBUG=http2debug=1   # enable verbose HTTP/2 debug logs
	GODEBUG=http2debug=2   # ... even more verbose, with frame dumps

The GODEBUG variables are not covered by Go's API compatibility promise.
HTTP/2 support was added in Go 1.6. Please report any issues instead of
disabling HTTP/2 support: https://golang.org/s/http2bug
Brad Fitzpatrick's avatar
Brad Fitzpatrick committed
95 96
*/
package http