mirror of
https://github.com/yusing/godoxy.git
synced 2026-04-26 18:28:30 +02:00
docs: add per package README for implementation details (AI generated with human review)
This commit is contained in:
146
internal/net/gphttp/README.md
Normal file
146
internal/net/gphttp/README.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# gphttp
|
||||
|
||||
HTTP utilities package providing transport configuration, default HTTP client, and a wrapper around `http.ServeMux` with panic recovery.
|
||||
|
||||
## Overview
|
||||
|
||||
This package provides shared HTTP utilities used throughout GoDoxy:
|
||||
|
||||
- **Default HTTP Client**: Pre-configured `http.Client` with secure settings
|
||||
- **Transport Factory**: Functions to create optimized `http.Transport` configurations
|
||||
- **ServeMux Wrapper**: Extended `http.ServeMux` with panic recovery for handler registration
|
||||
|
||||
## Architecture
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[HTTP Request] --> B[gphttp.Client]
|
||||
B --> C[Transport]
|
||||
C --> D[Network Connection]
|
||||
|
||||
E[Server Setup] --> F[gphttp.ServeMux]
|
||||
F --> G[http.ServeMux]
|
||||
G --> H[HTTP Handlers]
|
||||
```
|
||||
|
||||
## Core Components
|
||||
|
||||
### HTTP Client
|
||||
|
||||
The package exports a pre-configured `http.Client` with secure defaults:
|
||||
|
||||
```go
|
||||
var (
|
||||
httpClient = &http.Client{
|
||||
Timeout: 5 * time.Second,
|
||||
Transport: &http.Transport{
|
||||
DisableKeepAlives: true,
|
||||
ForceAttemptHTTP2: false,
|
||||
DialContext: (&net.Dialer{
|
||||
Timeout: 3 * time.Second,
|
||||
KeepAlive: 60 * time.Second,
|
||||
}).DialContext,
|
||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
|
||||
},
|
||||
}
|
||||
|
||||
Get = httpClient.Get
|
||||
Post = httpClient.Post
|
||||
Head = httpClient.Head
|
||||
Do = httpClient.Do
|
||||
)
|
||||
```
|
||||
|
||||
### Transport Factory
|
||||
|
||||
Functions for creating optimized HTTP transports:
|
||||
|
||||
```go
|
||||
// NewTransport creates an http.Transport with proxy support and optimized settings
|
||||
func NewTransport() *http.Transport
|
||||
|
||||
// NewTransportWithTLSConfig creates an http.Transport with custom TLS configuration
|
||||
func NewTransportWithTLSConfig(tlsConfig *tls.Config) *http.Transport
|
||||
```
|
||||
|
||||
Default transport settings:
|
||||
|
||||
- `MaxIdleConnsPerHost`: 1000
|
||||
- `IdleConnTimeout`: 90 seconds
|
||||
- `TLSHandshakeTimeout`: 10 seconds
|
||||
- `ResponseHeaderTimeout`: 60 seconds
|
||||
- `WriteBufferSize` / `ReadBufferSize`: 16KB
|
||||
|
||||
### ServeMux Wrapper
|
||||
|
||||
Extended `http.ServeMux` with panic recovery:
|
||||
|
||||
```go
|
||||
type ServeMux struct {
|
||||
*http.ServeMux
|
||||
}
|
||||
|
||||
func NewServeMux() ServeMux
|
||||
func (mux ServeMux) Handle(pattern string, handler http.Handler) (err error)
|
||||
func (mux ServeMux) HandleFunc(pattern string, handler http.HandlerFunc) (err error)
|
||||
```
|
||||
|
||||
The `Handle` and `HandleFunc` methods recover from panics and return them as errors, preventing one bad handler from crashing the entire server.
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Using the Default Client
|
||||
|
||||
```go
|
||||
import "github.com/yusing/godoxy/internal/net/gphttp"
|
||||
|
||||
// Simple GET request
|
||||
resp, err := gphttp.Get("https://example.com")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
// POST request
|
||||
resp, err := gphttp.Post("https://example.com", "application/json", body)
|
||||
```
|
||||
|
||||
### Creating Custom Transports
|
||||
|
||||
```go
|
||||
import (
|
||||
"crypto/tls"
|
||||
"net/http"
|
||||
"github.com/yusing/godoxy/internal/net/gphttp"
|
||||
)
|
||||
|
||||
// Default transport with environment proxy
|
||||
transport := gphttp.NewTransport()
|
||||
|
||||
// Custom TLS configuration
|
||||
tlsConfig := &tls.Config{
|
||||
ServerName: "example.com",
|
||||
}
|
||||
transport := gphttp.NewTransportWithTLSConfig(tlsConfig)
|
||||
```
|
||||
|
||||
### Using ServeMux with Panic Recovery
|
||||
|
||||
```go
|
||||
mux := gphttp.NewServeMux()
|
||||
|
||||
// Register handlers - panics are converted to errors
|
||||
if err := mux.HandleFunc("/api", apiHandler); err != nil {
|
||||
log.Printf("handler registration failed: %v", err)
|
||||
}
|
||||
```
|
||||
|
||||
## Integration Points
|
||||
|
||||
- Used by `internal/net/gphttp/middleware` for HTTP request/response processing
|
||||
- Used by `internal/net/gphttp/loadbalancer` for backend connections
|
||||
- Used throughout the route handling system
|
||||
|
||||
## Configuration
|
||||
|
||||
The default client disables HTTP/2 (`ForceAttemptHTTP2: false`) and keep-alives (`DisableKeepAlives: true`) for security and compatibility reasons. The transport uses environment proxy settings via `http.ProxyFromEnvironment`.
|
||||
Reference in New Issue
Block a user