Sling Academy
Home/DevOps/NGINX 400 Bad Request Error: Request Header Or Cookie Too Large

NGINX 400 Bad Request Error: Request Header Or Cookie Too Large

Last updated: January 20, 2024

The Problem

Encountering a 400 Bad Request error on your NGINX server can be frustrating. One common manifestation of this issue is when the request header or cookie exceeds the size that NGINX is configured to accept. This tutorial will walk you through the reasons behind this error and various solutions to help you fix it, aiming to deliver a seamless experience for users of your website.

Cause of NGINX 400 Error

The NGINX 400 Bad Request error indicating that the request header or cookie is too large most often occurs when the combined size of the headers or cookies sent by the browser to the server exceeds the buffer size that NGINX is configured to handle. It’s a protective measure to prevent certain types of Denial of Service (DoS) attacks, but it can also inadvertently block users with legitimately large cookies or headers, such as those with extensive browsing sessions or those using services that require large tokens.

Solutions

Solution 1: Increase Buffer Size

Increasing buffer sizes in NGINX configuration

Increasing the buffer size allotted for headers and cookies is a straightforward solution which will prevent the error from being triggered in the case of legitimately large cookies or headers.

  1. Open your NGINX configuration file, which is typically located at /etc/nginx/nginx.conf.
  2. Set the large_client_header_buffers directive in the http block. The syntax is large_client_header_buffers number size;, where number is the maximum number of buffers and size is the size of each buffer.
  3. For example, you can set it to large_client_header_buffers 4 16k; to allow for 4 buffers, each 16KB in size, which should cover most use cases.
  4. Make sure to test the configuration by running nginx -t.
  5. Reload the NGINX configuration using service nginx reload or systemctl reload nginx for the changes to take effect.

Configuration example:


http {
    ...
    large_client_header_buffers 4 16k;
    ...
}

Note: Ensure to not set this value too high, as this can open the server up to attack by potentially overloading the memory with large headers.

Solution 2: Clearing Browser Cookies

Client-side fix by clearing cookies

Often, when a user has accumulated too many cookies, especially if they’re not being cleared periodically, they might encounter this error. In such cases, clearing cookies can provide an immediate fix.

  1. Instruct users to open their browser settings panel.
  2. Navigate to the privacy or history settings where cookies can be viewed and cleared.
  3. Ask them to delete cookies specifically for the site they are trying to reach, or clear all cookies as a last resort.
  4. After cookies are cleared, have them refresh the web page or attempt to access the site again.

Note: This is more of a temporary solution, since it puts the onus on the user rather than correcting an issue that may be server-side.

Solution 3: Reviewing Application Code

Optimize server application to reduce header size.

If you’ve determined that your application logic itself could be creating unduly large requests, you might need to revisit your code. Consider reducing the amount of data stored in cookies or headers.

  1. Review your application’s codebase for areas where headers and cookies are being set.
  2. Try to reduce the size of any tokens or identifiers stored in cookies, or compress the data if possible.
  3. Alternately, consider leveraging other storage mechanisms, like sessionStorage or localStorage for large amounts of data, which do not add weight to the HTTP request header.
  4. After changes are made, thoroughly test to ensure functionality is not impaired.

Note: While this approach aims at a more permanent fix, it may require significant changes to your application and thorough testing.

Conclusion

The NGINX 400 Bad Request error because of oversized headers or cookies is a common problem, but the above solutions can help. Whether increasing the buffer size in NGINX, instructing users on how to clear cookies, or revising your application to reduce the amount of data in headers, there’s typically a way to resolve the issue. Understanding the root cause is critical to implementing the right fix.

Next Article: How to verify that NGINX Gzip Compression is working

Previous Article: NGINX Error: 502 Bad Gateway – Causes and Solutions

Series: NGINX Tutorials

DevOps

You May Also Like

  • How to reset Ubuntu to factory settings (4 approaches)
  • Making GET requests with cURL: A practical guide (with examples)
  • Git: What is .DS_Store and should you ignore it?
  • NGINX underscores_in_headers: Explained with examples
  • How to use Jenkins CI with private GitHub repositories
  • Terraform: Understanding State and State Files (with Examples)
  • SHA1, SHA256, and SHA512 in Terraform: A Practical Guide
  • CSRF Protection in Jenkins: An In-depth Guide (with examples)
  • Terraform: How to Merge 2 Maps
  • Terraform: How to extract filename/extension from a path
  • JSON encoding/decoding in Terraform: Explained with examples
  • Sorting Lists in Terraform: A Practical Guide
  • Terraform: How to trigger a Lambda function on resource creation
  • How to use Terraform templates
  • Understanding terraform_remote_state data source: Explained with examples
  • Jenkins Authorization: A Practical Guide (with examples)
  • Solving Jenkins Pipeline NotSerializableException: groovy.json.internal.LazyMap
  • Understanding Artifacts in Jenkins: A Practical Guide (with examples)
  • Using Jenkins with AWS EC2 and S3: A Practical Guide