JSON error responses in Nginx - Time & Space Complexity
We want to understand how the time to send JSON error responses changes as requests increase.
How does nginx handle many error responses efficiently?
Analyze the time complexity of the following nginx configuration snippet.
error_page 404 = @json_404;
location @json_404 {
default_type application/json;
return 404 '{"error": "Not Found"}';
}
This snippet configures nginx to return a JSON error message for 404 errors.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Handling each incoming request and matching error_page rules.
- How many times: Once per request, no loops inside the snippet itself.
Each request triggers a fixed set of operations to return the JSON error.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 fixed response operations |
| 100 | 100 fixed response operations |
| 1000 | 1000 fixed response operations |
Pattern observation: Operations grow linearly with the number of requests.
Time Complexity: O(n)
This means the time to handle error responses grows directly with the number of requests.
[X] Wrong: "The JSON error response is generated once and reused for all requests, so time does not grow with requests."
[OK] Correct: Each request is handled separately, so nginx processes the error response for each request individually.
Understanding how nginx handles error responses helps you explain server behavior clearly and shows you can reason about request handling efficiency.
"What if the JSON error response included a complex script or external call? How would the time complexity change?"
Practice
Solution
Step 1: Understand JSON error response purpose
JSON error responses format error details in a way apps can easily parse and handle.Step 2: Compare options
Only They make error information easy for applications to read and process. correctly states the benefit of JSON error responses; others are incorrect or unrelated.Final Answer:
They make error information easy for applications to read and process. -> Option BQuick Check:
JSON error responses = easy app reading [OK]
- Thinking JSON errors fix server issues automatically
- Believing JSON errors hide all error messages
- Assuming JSON errors reduce bandwidth significantly
Solution
Step 1: Identify directive for custom error pages
Theerror_pagedirective tells nginx which page to serve on specific errors.Step 2: Eliminate unrelated directives
proxy_passforwards requests,listensets ports,server_namesets domain names; none define error pages.Final Answer:
error_page -> Option AQuick Check:
Custom error page directive = error_page [OK]
- Confusing proxy_pass with error_page
- Using listen or server_name for error handling
- Forgetting to set content type for JSON
error_page 404 /404.json;
location = /404.json {
internal;
default_type application/json;
return 404 '{"error":"Not Found"}';
}Solution
Step 1: Analyze the error_page and location block
The 404 error triggers /404.json, which is internal and returns JSON with content type application/json.Step 2: Check the return statement
The return sends status 404 with JSON string '{"error":"Not Found"}' as the body.Final Answer:
{"error":"Not Found"} -> Option CQuick Check:
Return JSON string = {"error":"Not Found"} [OK]
- Assuming default HTML error page is returned
- Ignoring internal directive effect
- Confusing status code text with response body
Solution
Step 1: Understand internal directive role
Theinternaldirective prevents direct client access to error pages, ensuring nginx uses them only for error responses.Step 2: Identify why HTML is returned
Ifinternalis missing, clients can access the error page URL directly, causing nginx to serve default HTML instead of JSON error.Final Answer:
The internal directive is missing in the error location block. -> Option DQuick Check:
Missing internal = HTML errors shown [OK]
- Forgetting internal causes direct access to error pages
- Blaming server_name for error response format
- Assuming JSON syntax error causes HTML output
Solution
Step 1: Use error_page to map 500 to JSON location
The directiveerror_page 500 /500.json;tells nginx to use /500.json for 500 errors.Step 2: Define internal location with JSON content type and return JSON body
The location must beinternalto prevent direct access, setdefault_type application/json;, and return the JSON string with status 500.Step 3: Verify options
error_page 500 /500.json; location = /500.json { internal; default_type application/json; return 500 '{"error":"Server Error"}'; }matches all requirements.error_page 500 /500.html; location = /500.html { internal; default_type text/html; return 500 'uses HTML. The others lack the internal directive or miss the error_page directive.Server Error
'; }Final Answer:
error_page 500 /500.json; location = /500.json { internal; default_type application/json; return 500 '{"error":"Server Error"}'; } -> Option AQuick Check:
Use error_page + internal + JSON return [OK]
- Omitting internal directive
- Using wrong content type
- Not escaping JSON properly
- Not mapping error_page to location
Ready to prove it?
Pass the test and this pattern moves unknown
