Saya sedang melakukan penelitian di proxy di nodejs. Saya menemukan sesuatu yang mengejutkan saya. Di salah satu opsi untuk koneksi http.request, kode sumber menunjukkan ini sebagai objek opsi

  const options = {
    port: 1337,
    host: '127.0.0.1',
    method: 'CONNECT',
    path: 'www.google.com:80'
  };

Ini adalah bagian dari kode yang jauh lebih besar yang merupakan keseluruhan sistem tunneling. Tetapi bisakah seseorang menjelaskan cara kerja opsi di atas? Seluruh kode di bawah ini

const http = require('http');
const net = require('net');
const { URL } = require('url');

// Create an HTTP tunneling proxy
const proxy = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('okay');
});
proxy.on('connect', (req, clientSocket, head) => {
  // Connect to an origin server
  const { port, hostname } = new URL(`http://${req.url}`);
  const serverSocket = net.connect(port || 80, hostname, () => {
    clientSocket.write('HTTP/1.1 200 Connection Established\r\n' +
                    'Proxy-agent: Node.js-Proxy\r\n' +
                    '\r\n');
    serverSocket.write(head);
    serverSocket.pipe(clientSocket);
    clientSocket.pipe(serverSocket);
  });
});

// Now that proxy is running
proxy.listen(1337, '127.0.0.1', () => {

  // Make a request to a tunneling proxy
  const options = {
    port: 1337,
    host: '127.0.0.1',
    method: 'CONNECT',
    path: 'www.google.com:80'
  };

  const req = http.request(options);
  req.end();

  req.on('connect', (res, socket, head) => {
    console.log('got connected!');

    // Make a request over an HTTP tunnel
    socket.write('GET / HTTP/1.1\r\n' +
                 'Host: www.google.com:80\r\n' +
                 'Connection: close\r\n' +
                 '\r\n');
    socket.on('data', (chunk) => {
      console.log(chunk.toString());
    });
    socket.on('end', () => {
      proxy.close();
    });
  });
});

Sumber: https://nodejs.org/api/http.html#http_event_connect

0
The Bomb Squad 3 Maret 2020, 04:45

1 menjawab

Jawaban Terbaik

Anda mungkin belum pernah menggunakan jaringan yang mengharuskan Anda mengonfigurasi proxy HTTP. Sebagian besar jaringan saat ini mengonfigurasi firewall mereka untuk mengizinkan lalu lintas HTTP. Ini berarti kebanyakan orang saat ini tidak pernah perlu menggunakan proxy HTTP untuk mengakses web.

Dahulu kala ketika saya pertama kali menggunakan internet (sekitar tahun 1994) banyak jaringan yang tidak mengizinkan akses internet transparan. PC Anda tidak memiliki koneksi ke dunia luar. Tetapi sysadmin akan menginstal proxy HTTP yang dapat Anda sambungkan. PC Anda hanya akan memiliki akses ke LAN (yang merupakan bagian dari proxy) dan hanya proxy HTTP yang memiliki akses ke internet.

Berikut ini contoh cara Anda mengonfigurasi Windows untuk menggunakan proxy HTTP:

enter image description here

Jika Anda mengkonfigurasi PC Anda seperti di atas, maka ketika Anda terhubung ke www.google.com browser Anda akan terhubung ke host proxy.example.com pada port 8080 dan kemudian memintanya untuk mengambil data dari www.google.com .

Adapun mengapa ia memanggil sumber daya yang diminta path karena dikirim di bagian "jalur" dari paket.

Misalnya, permintaan GET normal untuk mendapatkan halaman ini terlihat seperti ini:

GET /questions/60498963 HTTP/1.1
Host: stackoverflow.com

Dan string setelah GET dan sebelum versi protokol biasanya disebut path:

           .---------- this is normally called
           |           the "path"
           v
GET /questions/60498963 HTTP/1.1
Host: stackoverflow.com

Saat membuat permintaan proxy, header HTTP terlihat seperti ini:

CONNECT stackoverflow.com/questions/60498963 HTTP/1.1

Jadi url termasuk nama domain dikirim ke proxy di bagian paket yang biasanya digunakan untuk mengirim jalur file.

Perhatikan bahwa semua ini tidak ada hubungannya dengan Node.js. Ini hanya jaringan dasar (tidak ada bahasa pemrograman yang terlibat).

1
slebetman 3 Maret 2020, 03:33