# https

***

**1. Create an HTTP Server with HTTPS Support**

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

const privateKey = fs.readFileSync('key.pem');
const certificate = fs.readFileSync('cert.pem');

const credentials = {
  key: privateKey,
  cert: certificate
};

const server = https.createServer(credentials, (req, res) => {
  res.writeHead(200);
  res.end('Hello World!');
});

server.listen(8443);
```

**2. Make HTTPS Request using URL Object**

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

const url = 'https://www.example.com/';

https.get(url, (res) => {
  console.log('Status code:', res.statusCode);
  res.on('data', (data) => {
    console.log(data.toString());
  });
}).on('error', (e) => {
  console.error(e);
});
```

**3. Use an Agent for Keep-Alive Connections**

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

const agent = new https.Agent({
  keepAlive: true,
  maxSockets: 5
});

const getOptions = {
  hostname: 'www.example.com',
  agent: agent
};

https.get(getOptions, (res) => {
  console.log('Status code:', res.statusCode);
  res.on('data', (data) => {
    console.log(data.toString());
  });
}).on('error', (e) => {
  console.error(e);
});
```

**4. Set HTTP Timeout**

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

const request = https.request({
  hostname: 'www.example.com',
  timeout: 5000 // 5 seconds
});

request.on('timeout', () => {
  request.destroy();
  console.log('Request timed out');
});

request.end();
```

**5. Use Proxy Agent**

```js
const https = require('https');
const ProxyAgent = require('proxy-agent');

const proxyUrl = 'http://myproxy.com:8080';

const agent = new ProxyAgent(proxyUrl);

const getOptions = {
  hostname: 'www.example.com',
  agent: agent
};

https.get(getOptions, (res) => {
  console.log('Status code:', res.statusCode);
  res.on('data', (data) => {
    console.log(data.toString());
  });
}).on('error', (e) => {
  console.error(e);
});
```

**6. Handle HTTPS Redirects**

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

const request = https.request({
  hostname: 'www.example.com',
  maxRedirects: 5
});

request.on('redirect', (res) => {
  console.log(`Redirect to ${res.headers.location}`);
}).on('error', (e) => {
  console.error(e);
});

request.end();
```

**7. Use Cookie Jar**

```js
const https = require('https');
const cookieJar = require('cookiejar');

const jar = new cookieJar.CookieJar();

const request = https.request({
  hostname: 'www.example.com',
  jar: jar
});

request.on('response', (res) => {
  jar.setCookies(res.headers['set-cookie']);
}).on('error', (e) => {
  console.error(e);
});

request.end();
```

**8. Parse TLS Certificate**

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

const request = https.request({
  hostname: 'www.example.com'
});

request.on('secureConnection', (cert) => {
  console.log(cert);
});

request.end();
```

**9. Use HSTS**

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

const server = https.createServer({
  hsts: {
    maxAge: 31536000, // 1 year
    includeSubDomains: true
  }
});

server.listen(8443);
```

**10. Use HTTP/2**

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

const server = https.createServer({
  http2: true
});

server.listen(8443);
```

**11. Use ALPN**

```js
const tls = require('tls');

const server = tls.createServer({
  ALPNProtocols: ['h2', 'http/1.1']
});

server.listen(8443);
```

**12. Use OCSP Stapling**

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

const server = https.createServer({
  staple: true
});

server.listen(8443);
```

**13. Use TLS Session Resumption**

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

const server = https.createServer({
  sessionTimeout: 10000, // 10 seconds
  sessionCacheSize: 1000
});

server.listen(8443);
```

**14. Send HTTP POST Request with JSON**

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

const request = https.request({
  hostname: 'www.example.com',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  }
});

request.write(JSON.stringify({ name: 'John Doe' }));
request.end();
```

**15. Receive HTTP POST Request with Form Data**

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

const server = https.createServer((req, res) => {
  if (req.method === 'POST') {
    let body = '';

    req.on('data', (data) => {
      body += data;
    });

    req.on('end', () => {
      const formData = JSON.parse(body);
      console.log(formData);
      res.end('Success!');
    });
  }
});

server.listen(8443);
```

**16. Handle HTTP Errors**

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

const request = https.request({
  hostname: 'www.example.com'
});

request.on('error', (e) => {
  console.error(e.message);
});

request.end();
```

**17. Send HTTP PUT Request with File Upload**

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

const request = https.request({
  hostname: 'www.example.com',
  method: 'PUT',
  headers: {
    'Content-Type': 'multipart/form-data'
  }
});

fs.createReadStream('file.txt').pipe(request);
request.end();
```

**18. Receive HTTP PUT Request with File Upload**

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

const server = https.createServer((req, res) => {
  if (req.method === 'PUT') {
    const writeStream = fs.createWriteStream('file.txt');

    req.on('data', (data) => {
      writeStream.write(data);
    });

    req.on('end', () => {
      res.end('Success!');
    });
  }
});

server.listen(8443);
```

**19. Send HTTP DELETE Request**

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

const request = https.request({
  hostname: 'www.example.com',
  method: 'DELETE'
});

request.end();
```

**20. Receive HTTP DELETE Request**

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

const server = https.createServer((req, res) => {
  if (req.method === 'DELETE') {
    res.end('Success!');
  }
});

server.listen(8443);
```

**21. Parse HTTP Headers**

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

const request = https.request({
  hostname: 'www.example.com'
});

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

request.end();
```

**22. Set HTTP Request Headers**

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

const request = https.request({
  hostname: 'www.example.com',
  headers: {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
  }
});

request.end();
```

**23. Use Basic Authentication**

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

const request = https.request({
  hostname: 'www.example.com',
  auth: 'username:password'
});

request.end();
```

**24. Use OAuth 2.0 Authentication**

```js
const https = require('https');
const oauth = require('oauth');

const consumer = new oauth.OAuth(
  'https://api.example.com/oauth/request_token',
  'https://api.example.com/oauth/access_token',
  'consumerKey',
  'consumerSecret',
  '1.0A',
  'oob',
  'HMAC-SHA1'
);

consumer.get(
  'https://api.example.com/oauth/authorize',
  null,
  null,
  (err, token, secret, results) => {
    if (err) {
      console.error(err);
    } else {
      consumer.get(
        'https://api.example.com/1.1/statuses/home_timeline.json',
        token,
        secret,
        (err, data, res) => {
          if (err) {
            console.error(err);
          } else {
            console.log(data);
          }
        }
      );
    }
  }
);
```

**25. Upload File with Progress Tracking**

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

const request = https.request({
  hostname: 'www.example.com',
  method: 'PUT',
  headers: {
    'Content-Type': 'multipart/form-data'
  }
});

const readStream = fs.createReadStream('file.txt');
const totalBytes = fs.statSync('file.txt').size;

readStream.on('data', (data) => {
  request.write(data);
});

request.on('drain', () => {
  console.log(`Progress: ${readStream.bytesRead} / ${totalBytes}`);
});

request.on('end', () => {
  res.end('Success!');
});
```

**26. Download File with Progress Tracking**

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

const request = https.request({
  hostname: 'www.example.com',
  method: 'GET'
});

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

request.on('response', (res) => {
  const totalBytes = parseInt(res.headers['content-length']);

  res.pipe(writeStream);

  res.on('data', (data) => {
    console.log(`Progress: ${writeStream.bytesWritten} / ${totalBytes}`);
  });

  res.on('end', () => {
    console.log('Download complete!');
  });
});

request.end();
```

**27. Implement OAuth 2.0 Token Introspection**

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

const request = https.request({
  hostname: 'www.example.com',
  method: 'POST',
  headers

```
