Bird
Raised Fist0
Expressframework~10 mins

req.headers for HTTP headers in Express - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - req.headers for HTTP headers
Client sends HTTP request
↓
Express receives request
↓
req object created
↓
req.headers populated with HTTP headers
↓
Access req.headers in route handler
↓
Use header values for logic or response
When Express gets a request, it creates req.headers with all HTTP headers sent by the client. You can read these headers inside your route handler.
Execution Sample
Express
app.get('/', (req, res) => {
  console.log(req.headers);
  res.send('Headers logged');
});
This code logs all HTTP headers from the incoming request to the console.
Execution Table
StepActionreq.headers contentResult
1Client sends GET / with headers: Host, User-Agent, Accept{host: 'localhost:3000', 'user-agent': 'Mozilla/5.0', accept: 'text/html'}Express receives request with headers
2Express creates req object and fills req.headers{host: 'localhost:3000', 'user-agent': 'Mozilla/5.0', accept: 'text/html'}req.headers ready for use
3Route handler runs and logs req.headers{host: 'localhost:3000', 'user-agent': 'Mozilla/5.0', accept: 'text/html'}Headers printed to console
4Response sent with message 'Headers logged'N/AClient receives response
5No more stepsN/ARequest handling complete
💡 Request handled fully; req.headers accessed and response sent
Variable Tracker
VariableStartAfter Step 2After Step 3Final
req.headersundefined{host: 'localhost:3000', 'user-agent': 'Mozilla/5.0', accept: 'text/html'}{host: 'localhost:3000', 'user-agent': 'Mozilla/5.0', accept: 'text/html'}Same as after Step 3
Key Moments - 2 Insights
Why does req.headers contain all headers in lowercase keys?
Express converts all header names to lowercase in req.headers for consistency, as shown in the execution_table rows where keys like 'User-Agent' appear as 'user-agent'.
Can I modify req.headers to change client headers?
No, req.headers is read-only for the incoming request. Modifying it won't affect the client or the request itself, as the execution_table shows it only being read.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at Step 2. What does req.headers contain?
AOnly the Host header
BAn empty object
CAn object with all HTTP headers sent by the client
DA string of headers
💡 Hint
Check the 'req.headers content' column at Step 2 in the execution_table
At which step does the route handler log the headers?
AStep 3
BStep 1
CStep 2
DStep 4
💡 Hint
Look for the action mentioning logging req.headers in the execution_table
If the client sends a new header 'X-Test: 123', how would req.headers change?
AIt would replace all headers with only 'x-test'
BIt would include 'x-test': '123' in req.headers
CIt would ignore the new header
DIt would cause an error
💡 Hint
Refer to how req.headers contains all client headers in the execution_table rows
Concept Snapshot
req.headers holds all HTTP headers from the client request.
Keys are lowercase strings.
Access it inside route handlers via req.headers.
It is read-only and reflects client-sent headers.
Use it to read info like user-agent, cookies, or custom headers.
Full Transcript
When a client sends an HTTP request to an Express server, Express creates a request object named req. This object includes a property called headers, which contains all the HTTP headers sent by the client. These headers are stored as key-value pairs with lowercase keys for consistency. Inside your route handler, you can access req.headers to read these headers. For example, you might log them or use them to customize your response. The req.headers object is read-only and reflects exactly what the client sent. This process happens automatically when Express receives the request and before your route handler runs.

Practice

(1/5)
1. What does req.headers represent in an Express app?
easy
A. A function to send headers to the client
B. An object containing all HTTP headers sent by the client
C. A string with the URL path of the request
D. A number representing the HTTP status code

Solution

  1. Step 1: Understand the role of req.headers

    req.headers holds all headers sent by the client in the HTTP request.
  2. Step 2: Identify what req.headers contains

    It is an object with keys as header names (lowercase) and values as header values.
  3. Final Answer:

    An object containing all HTTP headers sent by the client -> Option B
  4. Quick Check:

    req.headers = client headers [OK]
Hint: Remember: req.headers holds client headers as an object [OK]
Common Mistakes:
  • Thinking req.headers is a function
  • Confusing headers with URL or status code
  • Expecting headers keys to be uppercase
2. Which of the following is the correct way to access the 'content-type' header from req.headers?
easy
A. req.headers.Content-Type
B. req.headers['Content-Type']
C. req.headers.contentType
D. req.headers['content-type']

Solution

  1. Step 1: Recall header key casing in req.headers

    Headers keys are always lowercase in req.headers.
  2. Step 2: Choose the correct syntax to access the header

    Use bracket notation with lowercase key: req.headers['content-type'].
  3. Final Answer:

    req.headers['content-type'] -> Option D
  4. Quick Check:

    Headers keys are lowercase strings [OK]
Hint: Use lowercase keys with bracket notation for headers [OK]
Common Mistakes:
  • Using camelCase or uppercase keys
  • Using dot notation with hyphenated keys
  • Assuming headers keys keep original case
3. Given this Express code snippet:
app.get('/', (req, res) => {
  const userAgent = req.headers['user-agent'];
  res.send(userAgent);
});

What will the server send back to the client?
medium
A. An error because 'user-agent' is not a valid header
B. The server's operating system name
C. The client's browser user agent string
D. An empty string

Solution

  1. Step 1: Identify what req.headers['user-agent'] contains

    This header holds the client's browser and system info string.
  2. Step 2: Understand the response sent

    The server sends back this string as the response body using res.send().
  3. Final Answer:

    The client's browser user agent string -> Option C
  4. Quick Check:

    req.headers['user-agent'] = client info [OK]
Hint: User-Agent header shows client browser info [OK]
Common Mistakes:
  • Thinking it returns server info
  • Assuming 'user-agent' header is invalid
  • Expecting an error or empty response
4. What is wrong with this code snippet?
app.get('/data', (req, res) => {
  const auth = req.headers.Authorization;
  if (!auth) {
    res.status(401).send('Unauthorized');
  } else {
    res.send('Access granted');
  }
});
medium
A. Header keys in req.headers are lowercase, so 'Authorization' should be 'authorization'
B. Header keys in req.headers are case-sensitive and 'Authorization' is correct
C. You cannot access headers directly from req.headers
D. res.status() cannot be chained with res.send()

Solution

  1. Step 1: Check header key casing in req.headers

    All header keys are lowercase, so 'Authorization' is incorrect.
  2. Step 2: Correct the header key usage

    Use req.headers.authorization to access the Authorization header properly.
  3. Final Answer:

    Header keys in req.headers are lowercase, so 'Authorization' should be 'authorization' -> Option A
  4. Quick Check:

    Headers keys are lowercase strings [OK]
Hint: Always use lowercase keys for req.headers access [OK]
Common Mistakes:
  • Using uppercase or camelCase header keys
  • Thinking headers are case-sensitive as sent
  • Believing res.status() and res.send() can't chain
5. You want to check if a client sent a custom header named 'X-Client-Id' and respond with 'Client ID: <id>'. Which code correctly handles this in Express?
hard
A. const clientId = req.headers['x-client-id']; if(clientId) res.send(`Client ID: ${clientId}`); else res.send('No Client ID');
B. const clientId = req.headers.xClientId; if(clientId) res.send(`Client ID: ${clientId}`); else res.send('No Client ID');
C. const clientId = req.headers['X-Client-Id']; if(clientId) res.send(`Client ID: ${clientId}`); else res.send('No Client ID');
D. const clientId = req.headers.get('X-Client-Id'); if(clientId) res.send(`Client ID: ${clientId}`); else res.send('No Client ID');

Solution

  1. Step 1: Understand header key casing in req.headers

    Headers keys are lowercase, so use req.headers['x-client-id'].
  2. Step 2: Verify the correct way to access custom headers

    const clientId = req.headers['x-client-id']; if(clientId) res.send(`Client ID: ${clientId}`); else res.send('No Client ID'); uses lowercase key and bracket notation correctly to get the header value.
  3. Step 3: Check other options

    const clientId = req.headers['X-Client-Id']; if(clientId) res.send(`Client ID: ${clientId}`); else res.send('No Client ID'); uses uppercase keys (wrong), B uses camelCase (wrong), D uses req.headers.get('X-Client-Id') which doesn't exist on req.headers.
  4. Final Answer:

    const clientId = req.headers['x-client-id']; if(clientId) res.send(`Client ID: ${clientId}`); else res.send('No Client ID'); -> Option A
  5. Quick Check:

    Headers keys lowercase in req.headers [OK]
Hint: Custom headers keys are lowercase in req.headers [OK]
Common Mistakes:
  • Using uppercase or camelCase keys
  • Confusing req.headers with req.get()
  • Accessing headers with dot notation for hyphenated names
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard