Հարցման տողը, որը Node-ի HTTP-ն ուղղորդում է պրոքսիով
Կառուցեք սովորական HTTP պրոքսի հարցում Node-ի հիմնական հաճախորդով՝ առանձնացնելով միացման վերջնակետը, բացարձակ նպատակը և Host վերնագիրը։
Փոխանցող պրոքսիով սովորական HTTP հարցման դեպքում Node-ը միանում է պրոքսիին և ուղարկում նպատակակետ URL-ը հարցման տողում։ Երեք արժեք նկարագրում են այդ մեկ հարցումը.
| Արժեք | Օրինակ |
|---|---|
| TCP միացման վերջնակետ | proxy.example:8080 |
| Հարցման նպատակ | http://example.com/news?q=proxy |
| Host վերնագիր | example.com |
Node 22-ի այս օրինակը տարանջատումը դարձնում է ակնհայտ.
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);
Վերջնակետը տեղապահ է. հանրային HTTP փորձարկման համար ընտրեք թեկնածու HTTP պրոքսիների ցանկից և ստուգեք նրա պատասխանը։ Օրինակը պատասխանը սպառում է կարգավիճակը տպելուց հետո. հավելվածը կարող է փոխարենը սպառել մարմինը։ Հարցումը մնում է հարցման նպատակի մաս։
Ինչու է ամբողջական URL-ը այնտեղ
Ծագման սերվերը սովորաբար ստանում է /news?q=proxy-ի նման նպատակ։ Փոխանցող պրոքսիին նույնպես պետք է նպատակակետը, ուստի HTTP/1.1-ը սահմանում է նպատակը բացարձակ ձևով.
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
HTTP/1.1-ի կանոններով՝ բացարձակ ձև ստացող պրոքսին փոխանցելիս օգտագործում է URI-ի իշխանությունը և փոխարինում անհամապատասխան ստացված Host դաշտը։ Համապատասխան նպատակակետ Host վերնագիր ուղարկելը դեռևս ելքային հարցումը դարձնում է միանշանակ։ Node-ի միացման հոսթանունը միջնորդն է, ուստի վերնագիրը սահմանեք դիտավորյալ՝ փոխարենը չհենվելով այդ միացման հասցեին։
Եթե նույնականացում է պահանջվում, պրոքսիի հավատարմագրերը պատկանում են նրա ցատկին։ Node-ի auth հարցման ընտրանքը ստեղծում է Authorization վերնագիր ռեսուրսի համար. դա պրոքսիի մուտքի ընդհանուր ընտրանք չէ։ Երբ փոխանակումն ավելի բարդ է, օգտագործեք պրոքսիի պահանջած սխեման և համապատասխան պրոքսի հաճախորդ։
HTTPS-ը ավելացնում է թունել
Այս օրինակը ծածկում է սովորական HTTP փոխանցումը։ Տիպիկ HTTPS միացումը HTTP պրոքսիով նախ պահանջում է CONNECT example.com:443, ապա ընդունված թունելի ներսում սկսում TLS դեպի նպատակակետը։ Օրինակի URL-ը HTTPS-ի փոխելը այդ փուլերը չի ավելացնում։
HTTPS-ի կամ խառը ծանրաբեռնվածության համար օգտագործեք պահպանվող պրոքսի գործակալ կամ ուղարկիչ՝ պահանջվող թունելի աջակցությամբ։ Համատեղելի Node տարբերակների համար մեկ տարբերակ է Undici-ի fetch-ը ProxyAgent-ով։ Պահեք այս փոքր հիմնական հաճախորդի օրինակը այն դեպքերի համար, երբ սովորական HTTP փոխանակումն ինքն է այն, ինչ պետք է կառավարեք կամ հասկանաք։