go:stdlib:tcp_vs_http
Table of Contents
TCP vs HTTP
What is TCP?
TCP (Transmission Control Protocol) is a transport-layer protocol. It provides a reliable, ordered byte-stream connection between two endpoints (client and server).
TCP is like a pipe that carries bytes.
What is HTTP?
HTTP (Hypertext Transfer Protocol) is an application-layer protocol. It defines how to format requests and responses (methods like GET/POST, headers, body, status code).
HTTP runs on top of TCP (most commonly).
Key idea
- TCP does NOT have “methods”.
- HTTP has methods (GET/POST/PUT/DELETE), and those methods are just text/bytes sent through TCP.
So the correct mental model is:
- TCP = connection + byte stream
- HTTP = rules for what bytes mean
Diagram (layering)
- Application layer: HTTP (request/response format)
- Transport layer: TCP (reliable connection)
- Network layer: IP (routing packets)
Example: Using TCP for HTTP (manual)
You can open a TCP connection and send an HTTP request manually:
conn, _ := net.Dial("tcp", "example.com:80") defer conn.Close() fmt.Fprint(conn, "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n") io.Copy(os.Stdout, conn)
Example: Using HTTP client (recommended)
Instead of crafting bytes yourself, use `http.Client`:
resp, err := http.Get("http://example.com/") if err != nil { return } defer resp.Body.Close()
When to use which
- Use http.Client when the server speaks HTTP/HTTPS (REST APIs, web, webhooks).
- Use net.Dial when you need raw TCP for a non-HTTP protocol (Redis/MySQL/custom protocols).
Hard words (English)
- transport layer /ˈtrænspɔːrt ˈleɪər/: tầng vận chuyển
- application layer /ˌæplɪˈkeɪʃən ˈleɪər/: tầng ứng dụng
- protocol /ˈproʊtəkɔːl/: giao thức
- byte stream /baɪt striːm/: luồng byte
- reliable /rɪˈlaɪəbəl/: đáng tin cậy
- ordered /ˈɔːrdərd/: đúng thứ tự
- endpoint /ˈendpɔɪnt/: điểm kết nối (client/server)
- craft /kræft/: tự “chế”/tự tạo
go/stdlib/tcp_vs_http.txt · Last modified: by phong2018
