| // 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. |
| |
| /* |
| Package http provides HTTP client and server implementations. |
| |
| Get, Head, Post, and PostForm make HTTP (or HTTPS) requests: |
| |
| 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", |
| url.Values{"key": {"Value"}, "id": {"123"}}) |
| |
| 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 := io.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") |
| // ... |
| |
| req, err := http.NewRequest("GET", "http://example.com", nil) |
| // ... |
| 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{ |
| MaxIdleConns: 10, |
| IdleConnTimeout: 30 * time.Second, |
| 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) { |
| fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) |
| }) |
| |
| 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, |
| ReadTimeout: 10 * time.Second, |
| WriteTimeout: 10 * time.Second, |
| MaxHeaderBytes: 1 << 20, |
| } |
| log.Fatal(s.ListenAndServe()) |
| |
| Starting with Go 1.6, 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. Please report any issues before disabling HTTP/2 |
| support: https://golang.org/s/http2bug |
| |
| The http package's Transport and Server both automatically enable |
| HTTP/2 support for simple configurations. To enable HTTP/2 for more |
| complex configurations, to use lower-level HTTP/2 features, or to use |
| a newer version of Go's http2 package, import "golang.org/x/net/http2" |
| directly and use its ConfigureTransport and/or ConfigureServer |
| functions. Manually configuring HTTP/2 via the golang.org/x/net/http2 |
| package takes precedence over the net/http package's built-in HTTP/2 |
| support. |
| */ |
| package http |