Protocols

Lựa chọn giữa Proxy HTTP, HTTPS, SOCKS4 và SOCKS5

3 min read Published Updated 540 words

Bốn giao thức được gắn nhãn "proxy" có rất ít điểm chung ngoài cái tên. Proxy HTTP phân tích Lớp 7 và viết lại header; proxy SOCKS hoàn toàn không đọc lưu lượng của bạn. Sự khác biệt này quyết định loại proxy nào phù hợp cho duyệt web, scraping và tunneling thô.

Proxy HTTP

Proxy HTTP yêu cầu ngữ nghĩa HTTP. Nó mở request, đọc URL, có thể đính kèm các header như Via hoặc X-Forwarded-For, và từ chối bất cứ thứ gì không phải là request HTTP hợp lệ. Trình duyệt, curl và hầu hết các thư viện scraping mặc định sử dụng proxy HTTP vì việc cấu hình về cơ bản là miễn phí — chỉ cần đặt một biến môi trường hoặc truyền một flag.

Cái giá của sự đơn giản đó là tính hiển thị. Proxy nhìn thấy toàn bộ URL, bao gồm đường dẫn và chuỗi truy vấn, và trong HTTP dạng văn bản thuần, nó cũng thấy cả phần body. Proxy bộ nhớ đệm có thể viết lại response; proxy trong suốt có thể loại bỏ cookie. Hãy coi bất kỳ proxy HTTP nào như một trung gian có toàn quyền và không bao giờ gửi thông tin xác thực qua kết nối văn bản thuần.

Proxy HTTPS và Phương thức CONNECT

"Proxy HTTPS" là một nhãn hơi dễ gây hiểu lầm. Nó chỉ một proxy HTTP có thêm phương thức CONNECT. CONNECT yêu cầu proxy mở một tunnel TCP thô tới máy chủ đích và chuyển byte theo cả hai hướng; client và đích sau đó thương lượng TLS như thể proxy không tồn tại. Proxy nhìn thấy host và port đích, cùng khối lượng byte, nhưng không thấy payload.

Do đó, proxy "hỗ trợ HTTPS" là proxy hỗ trợ tunneling TLS, chứ không phải proxy tự chạy qua TLS. Kết nối từ máy của bạn đến proxy có thể là văn bản thuần hoặc được mã hóa độc lập. Nếu bạn quan tâm đến việc bảo vệ kết nối đó, hãy sử dụng triển khai SOCKS5 qua TLS hoặc proxy thương mại trả phí công bố endpoint TLS của nó.

SOCKS4

SOCKS4 là phiên bản tối thiểu từ năm 1994: chỉ TCP, chỉ IPv4, không UDP, không IPv6, không xác thực, không phân giải tên miền tại proxy. Bắt tay gồm sáu byte cộng với một byte mã phản hồi. Nó tồn tại trong thực tế vì giao thức quá nhỏ đến nỗi hầu như bất kỳ công cụ nào hiểu TCP đều có thể triển khai chính xác. Nếu một danh sách quảng cáo SOCKS4, hãy mong đợi chuyển tiếp TCP thô tới một địa chỉ IPv4 — và không gì khác.

SOCKS5

SOCKS5, được định nghĩa trong RFC 1928 (1996), là phiên bản mà hầu hết các công cụ hiện đại sử dụng. Nó bổ sung chuyển tiếp UDP, địa chỉ IPv6, xác thực GSSAPI và tùy chọn phân giải tên miền tại proxy thay vì client. Vì SOCKS5 không đưa ra giả định nào về tầng ứng dụng bên trên, nó là lựa chọn linh hoạt nhất cho các khối lượng công việc không phải HTTP: SSH, IRC, BitTorrent, RPC tùy chỉnh.

Hiệu suất và Chi phí

Proxy SOCKS có chi phí mỗi request thấp hơn vì chúng không phân tích bất cứ thứ gì. Proxy HTTP và HTTPS phải trả chi phí phân tích request đầy đủ trên mỗi kết nối. Đối với một phiên TLS dài hạn duy nhất bên trong CONNECT, sự khác biệt là không đáng kể. Đối với hàng nghìn request ngắn mà proxy mở một kết nối mới mỗi lần, SOCKS5 thắng rõ rệt — thường là 2–5 ms mỗi request cho đường dẫn phân tích.

Tính ẩn danh, trong Thực tế

Một proxy HTTP không loại bỏ header của bạn có thể làm rò rỉ IP client của bạn qua Via, X-Forwarded-For hoặc Forwarded. Proxy SOCKS không có các header như vậy vì chúng không có khái niệm về header. Đó không phải là một tính năng ẩn danh mà là sự vắng mặt của bề mặt rò rỉ. Bên trong HTTPS được tunnel qua CONNECT, đích chỉ thấy bắt tay TLS, do đó mọi rò rỉ ở cấp độ HTTP tại proxy đều trở nên vô hiệu.

Quy ước về Cổng

Bạn sẽ thấy các cổng sau trong thư mục này: 80, 8080, 3128, 8888 cho HTTP; 443 cho các endpoint hỗ trợ tường minh CONNECT; 1080 cho SOCKS. Nhiều nhà cung cấp expose các cổng cao không chuẩn (trên 10.000) để tránh quét cổng thông thường. Số cổng không nói lên chất lượng — nó chỉ báo hiệu những gì nhà vận hành chọn để expose.