Trong một yêu cầu HTTP thông thường qua proxy chuyển tiếp, Node kết nối tới proxy và gửi URL đích trong dòng yêu cầu. Ba giá trị mô tả yêu cầu duy nhất đó:

Giá trịVí dụ
Điểm cuối kết nối TCPproxy.example:8080
Đích của yêu cầuhttp://example.com/news?q=proxy
Tiêu đề Hostexample.com

Ví dụ Node 22 này làm rõ sự tách biệt:

const http = require('node:http');
const destination = new URL('http://example.com/news?q=proxy');

const request = http.get({
  hostname: 'proxy.example',
  port: 8080,
  path: destination.href,
  headers: { Host: destination.host },
  signal: AbortSignal.timeout(15000),
}, (response) => {
  console.log(response.statusCode);
  response.on('error', console.error);
  response.resume();
});
request.on('error', console.error);

Điểm cuối là một chỗ giữ chỗ; hãy chọn một ứng viên từ danh sách proxy HTTP cho một bài kiểm tra HTTP công khai và kiểm tra phản hồi của nó. Ví dụ xả phản hồi sau khi in trạng thái; ứng dụng có thể dùng phần thân thay vào đó. Truy vấn vẫn là một phần của đích yêu cầu.

Vì sao URL đầy đủ thuộc về đó

Một máy chủ gốc thường nhận đích như /news?q=proxy. Proxy chuyển tiếp cũng cần đích, vì vậy HTTP/1.1 định nghĩa đích ở dạng tuyệt đối:

GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com

Theo quy tắc HTTP/1.1, proxy nhận dạng tuyệt đối sẽ dùng thẩm quyền của URI khi chuyển tiếp và thay thế trường Host nhận được không nhất quán. Gửi tiêu đề Host đích nhất quán vẫn giữ cho yêu cầu đi ra không mơ hồ. Tên máy chủ kết nối của Node là trung gian, vì vậy hãy đặt tiêu đề một cách có chủ đích thay vì dựa vào địa chỉ kết nối đó.

Nếu cần xác thực, thông tin đăng nhập của proxy thuộc về chặng của nó. Tùy chọn yêu cầu auth của Node tạo tiêu đề Authorization cho tài nguyên; đó không phải là tùy chọn đăng nhập proxy chung. Hãy dùng lược đồ mà proxy yêu cầu và một client proxy phù hợp khi trao đổi phức tạp hơn.

HTTPS thêm một đường hầm

Ví dụ này bao gồm chuyển tiếp HTTP đơn giản. Một kết nối HTTPS qua proxy HTTP điển hình trước tiên yêu cầu CONNECT example.com:443, sau đó khởi động TLS tới đích bên trong đường hầm được chấp nhận. Đổi URL của ví dụ sang HTTPS không thêm các giai đoạn đó.

Với HTTPS hoặc khối lượng công việc hỗn hợp, hãy dùng một agent hoặc dispatcher proxy được duy trì với hỗ trợ đường hầm cần thiết. Với các phiên bản Node tương thích, một lựa chọn là fetch của Undici với ProxyAgent. Giữ ví dụ client lõi nhỏ này cho các trường hợp mà chính trao đổi HTTP đơn giản là thứ bạn cần kiểm soát hoặc hiểu.

Bài viết liên quan