# http

***

**1. Create an HTTP Server**

```javascript
const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World!');
});

server.listen(3000);
```

**2. Send JSON Response**

```javascript
const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json' });
  res.end(JSON.stringify({ message: 'Hello World!' }));
});

server.listen(3000);
```

**3. Parse Request Body**

```javascript
const http = require('http');
const bodyParser = require('body-parser');

const server = http.createServer((req, res) => {
  bodyParser.json()(req, res, () => {
    console.log(req.body);  // Parsed request body
  });
});

server.listen(3000);
```

**4. Set Cookie**

```javascript
const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Set-Cookie': 'name=value' });
  res.end();
});

server.listen(3000);
```

**5. Get Cookie**

```javascript
const http = require('http');

const server = http.createServer((req, res) => {
  const cookies = req.headers.cookie;
  console.log(cookies);  // Cookie header value
});

server.listen(3000);
```

**6. Redirect**

```javascript
const http = require('http');

const server = http.createServer((req, res) => {
  res.writeHead(302, { 'Location': 'https://example.com' });
  res.end();
});

server.listen(3000);
```

**7. Simple Proxy Server**

```javascript
const http = require('http');
const https = require('https');

const proxyServer = http.createServer((req, res) => {
  const target = 'https://example.com';
  const options = { host: 'example.com', port: 443, path: req.url };
  const proxyReq = https.request(options, (proxyRes) => {
    res.writeHead(proxyRes.statusCode, proxyRes.headers);
    proxyRes.pipe(res);
  });
  req.pipe(proxyReq);
});

proxyServer.listen(8080);
```

**8. Simple Web Crawler**

```javascript
const http = require('http');
const cheerio = require('cheerio');

const crawler = (url) => {
  http.get(url, (res) => {
    let html = '';
    res.on('data', (chunk) => { html += chunk; });
    res.on('end', () => {
      const $ = cheerio.load(html);
      $('a').each((i, el) => {
        console.log($(el).attr('href'));
      });
    });
  });
};
```

**9. Make an HTTP GET Request**

```javascript
const http = require('http');

http.get('https://example.com', (res) => {
  console.log(res.statusCode);
  console.log(res.headers);
});
```

**10. Make an HTTP POST Request**

```javascript
const http = require('http');

const postData = JSON.stringify({ message: 'Hello World!' });

const options = {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': postData.length
  }
};

const req = http.request('https://example.com', options, (res) => {
  console.log(res.statusCode);
  console.log(res.headers);
});

req.write(postData);
req.end();
```

**11. Make an HTTP PUT Request**

```javascript
const http = require('http');

const putData = JSON.stringify({ message: 'Hello World!' });

const options = {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': putData.length
  }
};

const req = http.request('https://example.com', options, (res) => {
  console.log(res.statusCode);
  console.log(res.headers);
});

req.write(putData);
req.end();
```

**12. Make an HTTP DELETE Request**

```javascript
const http = require('http');

const options = {
  method: 'DELETE'
};

const req = http.request('https://example.com', options, (res) => {
  console.log(res.statusCode);
  console.log(res.headers);
});

req.end();
```

**13. Upload a File**

```javascript
const http = require('http');
const fs = require('fs');

const form = new FormData();
form.append('file', fs.createReadStream('file.txt'));

const options = {
  method: 'POST',
  headers: {
    'Content-Type': `multipart/form-data; boundary=${form._boundary}`
  }
};

const req = http.request('https://example.com/upload', options, (res) => {
  console.log(res.statusCode);
  console.log(res.headers);
});

form.pipe(req);
```

**14. Download a File**

```javascript
const http = require('http');
const fs = require('fs');

const file = fs.createWriteStream('file.txt');

const options = {
  method: 'GET'
};

const req = http.request('https://example.com/download', options, (res) => {
  res.pipe(file);
});

req.end();
```

**15. Use HTTPS**

```javascript
const https = require('https');

https.get('https://example.com', (res) => {
  console.log(res.statusCode);
  console.log(res.headers);
});
```

**16. Use an HTTP Agent**

```javascript
const http = require('http');

const agent = new http.Agent({ keepAlive: true });

const options = {
  agent
};

const req = http.request(options, (res) => {
  console.log(res.statusCode);
  console.log(res.headers);
});

req.end();
```

**17. Use an HTTP Proxy**

```javascript
const http = require('http');
const proxyAgent = require('proxy-agent');

const options = {
  agent: proxyAgent('http://proxy.example.com:8080')
};

const req = http.request(options, (res) => {
  console.log(res.statusCode);
  console.log(res.headers);
});

req.end();
```

**18. Use a TLS/SSL Certificate**

```javascript
const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('private.key'),
  cert: fs.readFileSync('certificate.crt')
};

const server = https.createServer(options, (req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World!');
});

server.listen(443);
```

**19. Use cURL in Node.js**

```javascript
const curl = require('curl');

curl.get('https://example.com', (err, body, headers) => {
  if (err) throw err;
  console.log(body);
  console.log(headers);
});
```

**20. Use request in Node.js**

```javascript
const request = require('request');

request('https://example.com', (err, res, body) => {
  if (err) throw err;
  console.log(body);
});
```

**21. Use axios in Node.js**

```javascript
const axios = require('axios');

axios.get('https://example.com')
  .then((res) => {
    console.log(res.data);
  })
  .catch((err) => {
    throw err;
  });
```

**22. Use fetch API with Node.js**

```javascript
const fetch = require('node-fetch');

fetch('https://example.com')
  .then((res) => res.json())
  .then((data) => console.log(data))
  .catch((err) => throw err);
```

**23. Use HTTP2 in Node.js**

```javascript
const http2 = require('http2');

const client = http2.connect('https://example.com');

const req = client.request({ ':path': '/' });

req.on('response', (headers) => {
  console.log(headers);
});

req.setEncoding('utf8');
req.on('data', (chunk) => {
  console.log(chunk);
});

req.end();
```

**24. Use Quic Protocol in Node.js**

```javascript
const quic = require('quic');

const client = quic.connect({
  transport: 'udp',
  host: 'example.com',
  port: 443,
  localAddress: '127.0.0.1',
  localPort: 5000
});

const req = client.request({
  method: 'GET',
  path: '/'
});

req.on('streamEnd', () => {
  console.log('stream ended');
});

req.on('response', (headers) => {
  console.log('response headers received: ', headers);
});

req.on('data', (chunk) => {
  console.log('data received: ', chunk);
});

req.end();
```

**25. Use HTTP/3 in Node.js**

```javascript
const http = require('http/3');

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World!');
});

server.listen(443);
```

**26. Use HTTP/2 Server Push in Node.js**

```javascript
const http2 = require('http2');
const express = require('express');

const app = express();

app.get('/', (req, res) => {
  const pushRes = res.push('/style.css', { status: 200 });
  pushRes.setHeader('Content-Type', 'text/css');
  pushRes.end('body { font-family: sans-serif; }');
  res.setHeader('Content-Type', 'text/html');
  res.end('<h1>Hello World!</h1>');
});

const server = http2.createSecureServer({
  key: fs.readFileSync('private.key'),
  cert: fs.readFileSync('certificate.crt')
}, app);

server.listen(443);
```

**27. Use CORS with Express.js**

```javascript
const express = require('express');

const app = express();

app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  next();
});

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000);
```

**28. Use Socket.IO for Real-Time Communication**

```javascript
const socketIO = require('socket.io');

const server = http.createServer();
const io = socketIO(server);

io.on('connection', (socket) => {
  console.log('a user connected');
  socket.on('message', (msg) => {
    io.emit('message', msg);
  });
  socket.on('disconnect', () => {
    console.log('user disconnected');
  });
});

server.listen(3000);
```

**29. Use WebSockets with Express.js**

```javascript
const express = require('express');
const socketIO = require('socket.io');

const app = express();
const server = app.listen(3000);
const io = socketIO(server);

io.on('connection', (socket) => {
  console.log('a user connected');
  socket.on('disconnect', () => {
    console.log('user disconnected');
  });
});
```

**30. Use HTTP Basic Authentication**

```javascript
const http = require('http');

const server = http.createServer((req, res) => {
  const auth = req.headers['authorization'];
  if (!auth) {
    res.statusCode = 401;
    res.setHeader('WWW-Authenticate', 'Basic realm="My Realm"');
    res.end('Unauthorized');
  } else if (auth === 'Basic YWRtaW46cGFzc3dvcmQ=') {
    res.end('Welcome admin!');
  } else {
    res.statusCode = 403;
    res.end('Forbidden');
  }
});

server.listen(3000);
```

**31. Use OAuth 2.0 with Express.js**

```javascript
const express = require('express');
const passport = require('passport');

const app = express();

app.use(passport.initialize());

app.get('/login', passport.authenticate('oauth2'));

app.get('/callback', passport.authenticate('oauth2', {
  successRedirect: '/profile',
  failureRedirect: '/login'
}));

app.get('/profile', (req, res) => {
  res.send(req.user.profile);
});

app.listen(3000);
```

**32. Use HTTP Routing with Express.js**

```javascript
const express = require('express');

const app = express();

app.get('/', (req, res) => {
  res.send('Home Page');
});

app.get('/about', (req, res) => {
  res.send('About Page');
});

app.get('/contact', (req, res) => {
  res.send('Contact Page');
});

app.listen(3000);
```

**33. Use HTTP Middleware with Express.js**

```javascript
const express = require('express');

const app = express();

app.use((req, res, next) => {
  console.log('Request received at: ', Date.now());
  next();
});

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000);
```

**34. Use HTTP Request Logging with Express.js**

```javascript
const express = require('express');
const morgan = require('morgan');

const app = express();

app.use(morgan('tiny'));

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000);
```

**35. Use HTTP Error Handling with Express.js**

```javascript
const express = require('express');

const app = express();

app.get('/', (req, res) => {
  throw new Error('Something went wrong!');
});

app.use((err, req, res, next) => {
  res.status(500).send('Something went wrong!');
});

app.listen(3000);
```

**36. Use HTTP Testing with Supertest**

```javascript
const request = require('supertest');

const app = require('./app');

describe('GET /', () => {
  it('should return 200 OK', async () => {
    const res = await request(app).get('/');
    expect(res.statusCode).toBe(200);
  });
});
```
