Node.js સાથે HTTP 1.1 સર્વર સેટ કરવું અને ટેસ્ટ કરવું

/* by Tirth Bodawala - July 27, 2024 */

આ ટ્યુટોરીયલમાં, અમે Node.js નો ઉપયોગ કરીને HTTP 1.1 સર્વર સેટ કરવાની પ્રક્રિયાને હાથ ધરશું. આ સર્વર સ્ટેટિક ફાઇલો સર્વ કરશે અને HTTP વિનંતિઓ અને પ્રતિક્રિયાઓને સંભાળવાની મૂળભૂત સમજ પ્રદાન કરશે.

આવશ્યકતા

કદમ 1: પ્રોજેક્ટને શરૂ કરો

તમારા પ્રોજેક્ટ માટે નવો ડિરેક્ટરી બનાવવાની શરૂઆત કરો અને તેને npm સાથે શરૂઆત કરો.

mkdir raw-http-tutorial
cd raw-http-tutorial
npm init -y

package.json ફાઈલ જનરેટ કરશે. તમે આને નીચેની સામગ્રી સાથે અપડેટ કરી શકો છો:

package name: (tmp) raw-http-tutorial
version: (1.0.0) 
description: Demonstrating Raw HTTP requests and response
entry point: (index.js) src/server/http1.js
test command: 
git repository: 
keywords: 
author: 
license: (ISC)

package.json ફાઈલ જનરેટ કરશે. તમે આને નીચેની સામગ્રી સાથે અપડેટ કરી શકો છો:

{
  "name": "raw-http-tutorial",
  "version": "1.0.0",
  "description": "Demonstrating Raw HTTP requests and response",
  "main": "src/server/http1.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "Tirth Bodawala <[email protected]>",
  "license": "MIT",
  "devDependencies": {},
  "dependencies": {}
}

કદમ 2: જરૂરી પૅકેજઝ ઇન્સ્ટોલ કરો

સર્વર બનાવતા પહેલાં, જરૂરી પૅકેજઝ ઇન્સ્ટોલ કરો:

npm install mime-types
npm install --save-dev @types/node @types/mime-types

કદમ 3: SSL સર્ટિફિકેટ્સ જનરેટ કરો

HTTPS માટે SSL/TLSની જરૂર છે. એક સ્વ-સ્વીકૃત સર્ટિફિકેટ જનરેટ કરવા માટે OpenSSL નો ઉપયોગ કરો:

mkdir ssl
cd ssl
openssl req -x509 -newkey rsa:2048 -nodes -keyout server-key.pem -out server-cert.pem -days 365

જરૂરી માહિતી નીચે મુજબ ભરો:

  • દેશ નામ (IN)
  • રાજ્ય અથવા પ્રાંતનું નામ (ગુજરાત)
  • સ્થાનિક નામ (વડોદરા)
  • સંગઠન નામ (Atyantik Technologies)
  • સંગઠનાયીક એકમનું નામ (Development)
  • સામાન્ય નામ (localhost)
  • ઇમેઇલ સરનામું ([email protected])

જનરેટ થયેલા ફાઈલોને ssl નામની ડિરેક્ટરીમાં ખસેડો

કદમ 4: HTTPS 1.1 સર્વર બનાવો

src નામની ડિરેક્ટરી બનાવો અને તેમાં ./src/server/http1.js નામની ફાઇલ ઉમેરો નીચેની સામગ્રી સાથે:

import { createServer } from 'node:https';
import { createReadStream } from 'node:fs';
import { readFileSync } from 'node:fs';
import { extname, resolve } from 'node:path';
import mime from 'mime-types';
import zlib from 'node:zlib';

const brotliOptions = {
  chunkSize: 32 * 1024,
  params: {
    [zlib.constants.BROTLI_PARAM_QUALITY]: 10,
  },
};

const httpsPort = 8080;
const httpsHost = 'localhost';

// SSL options
const options = {
  key: readFileSync(resolve('ssl', 'server-key.pem')),
  cert: readFileSync(resolve('ssl', 'server-cert.pem'))
};
const html = readFileSync(resolve('src', 'index.html'), { encoding: 'utf-8' });

const httpsServer = createServer(options, async (req, res) => {
  const filePath = resolve(req.url.substring(1));
  if (req.url === '/') {
    res.writeHead(200, {
      'Content-Type': 'text/html',
    });
    res.write(html);
    res.end();
    return;
  }
  try {
    const mimeType = mime.lookup(extname(filePath)) || 'application/octet-stream';

    res.writeHead(200, {
      'Content-Type': mimeType,
      'Content-Encoding': 'br'
    });

    const readStream = createReadStream(filePath);
    const brotliStream = zlib.createBrotliCompress(brotliOptions);
    readStream.pipe(brotliStream).pipe(res);
  } catch (error) {
    console.log(error);
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.write('File not found');
    res.end();
  }
});

httpsServer.listen(httpsPort, httpsHost, () => {
  console.log(`HTTPS server listening on: https://${httpsHost}:${httpsPort}`);
});

કદમ 5: એક HTML ફાઇલ બનાવો

index.htmlડિરેક્ટરીમાં src નામની ફાઇલ બનાવો નીચેની સામગ્રી સાથે:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Image Grid</title><style>body {
      font-family: Arial, sans-serif;
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
      margin: 0;
      background-color: #f0f0f0;
    }
    .grid-container {
      display: grid;
      grid-template-columns: repeat(5, 1fr);
      gap: 10px;
      width: 100%;
      height: 100%;
      padding: 10px;
      box-sizing: border-box;
    }
    .grid-item {
      position: relative;
      width: 100%;
      padding-top: 5%;
      overflow: hidden;
    }
    .grid-item img {
      position: absolute;
      top: 50%;
      left: 50%;
      width: 100%;
      height: 100%;
      object-fit: cover;
      transform: translate(-50%, -50%);
    }
  </style></head><body><div class="grid-container"><div class="grid-item"><img src="/cars/1.jpg" alt="Image 1"></div><div class="grid-item"><img src="/cars/2.jpg" alt="Image 2"></div><div class="grid-item"><img src="/cars/3.jpg" alt="Image 3"></div><div class="grid-item"><img src="/cars/4.jpg" alt="Image 4"></div><div class="grid-item"><img src="/cars/5.jpg" alt="Image 5"></div><div class="grid-item"><img src="/cars/6.jpg" alt="Image 6"></div><div class="grid-item"><img src="/cars/7.jpg" alt="Image 7"></div><div class="grid-item"><img src="/cars/8.jpg" alt="Image 8"></div><div class="grid-item"><img src="/cars/9.jpg" alt="Image 9"></div><div class="grid-item"><img src="/cars/10.jpg" alt="Image 10"></div></div></body></html>

HTTPS સર્વર કોડનું વ્યાખ્યાન

  1. આવશ્યક મૉડ્યુલ્સ ઇમ્પોર્ટ કરો:
    • અમે આવશ્યક મૉડ્યુલ્સ જેમ કે: createServer થી node:https, createReadStream, readFileSync થી node:fs, extname, resolve થી node:pathઅને mime થી mime-types.
    • zlib wpml_ignored_tag > મૉડ્યુલનો ઉપયોગ પ્રતિસાદોને દબાવવા માટે થાય છે.
  2. Brotli વિકલ્પોને વ્યાખ્યાયિત કરો:
    • અમારા પ્રદર્શનને સુધારવા માટે Brotli કૉમ્પ્રેશન વિકલ્પોને વ્યાખ્યાયિત કરીએ છીએ.
  3. સર્વર પોર્ટ અને હોસ્ટ સેટ કરો:
    • અમે પોર્ટ અને હોસ્ટ ની ચોક્કસતા કરીએ છીએ જ્યાં સર્વર સાંભળશે.
  4. SSL વિકલ્પો:
    • SSL વિકલ્પો, જેમાં કી અને સર્ટિફિકેટ શામેલ છે,ssl ડિરેક્ટરીમાંથી વાંચવામાં આવે છે.
  5. HTTPS સર્વર બનાવો:
    • અમે createServer પદ્ધતિનો ઉપયોગ કરીને HTTPS સર્વર બનાવીએ છીએ.
    • જો વિનંતી URL / હોય, તો સર્વર index.html ની સામગ્રી સાથે પ્રતિસાદ આપે છે.
    • અન્ય URLs માટે, સર્વર વિનંતી કરેલી ફાઇલ સર્વ કરવાનો પ્રયાસ કરે છે. પ્રતિસાદ Brotli નો ઉપયોગ કરીને દબાવવામાં આવે છે.
  6. સર્વર શરૂ કરો:
    • સર્વર નિર્દિષ્ટ પોર્ટ અને હોસ્ટ પર સાંભળે છે, અને તે શરૂ થતાં અને કાર્યરત થતા સંદેશા લોગ કરે છે.

કદમ 6: સર્વર ચલાવો

સર્વર શરૂ કરવા માટે, ચલાવો:

node src/server/http1.js

તમે એક સંદેશો જોઈ શકશો જે સર્વર ચલાઈ રહ્યો છે તે દર્શાવે છે. તમારું બ્રાઉઝર ખોલો અને https://localhost:8081 પર જાઓ જેથી તમે સર્વર કાર્યરત જોઈ શકો. નોંધો કે તમારે સ્વ-હસ્તાક્ષરિત સર્ટિફિકેટ સ્વીકારવું પડશે.

આગળના પગલા:

હવે તમે સફળતાપૂર્વક HTTPS 1.1 સર્વર સ્થાપિત અને પરીક્ષણ કરી લીધું છે, તમે Node.js સાથે HTTP/2 સર્વર સ્થાપિત કરવા આગળ વધી શકો છો. વિગતવાર માર્ગદર્શન માટે અહીં જુઓ: HTTP/2 સર્વર સાથે Node.js ને સ્થાપિત અને પરીક્ષણ કરવું.