In this short article we would like to explain what
406 Not Acceptable status means in HTTP response and when occurs.
When server returns status
406 for HTTP request (
Not Acceptable) it means the server is not albe to match acceptable values located in headers in client request.
During negotation can be used following headers:
Let's suppose client sends following headers (user web browser tells that is able to handle only value combinations from headers):
Accept: application/json Accept-Charset: utf-8, iso-8859-1;q=0.5 Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9
Server is not able to provide any combination from
Accept citeria and returns
Any combination means:
Accept Accept-Charset Accept-Encoding Accept-Language application/json utf-8 gzip en-US application/json utf-8 deflate en-US application/json iso-8859-1 deflate en etc.
Example web browser request:
GET /backend/45a62d3d/download HTTP/1.1 Host: 192.168.0.50:8080 Connection: keep-alive Pragma: no-cache Cache-Control: no-cache Accept: application/json User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Content-Type: application/json Origin: http://localhost:8000 Referer: http://localhost:8000/downloads Accept-Charset: utf-8, iso-8859-1;q=0.5 Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9
Example server response:
HTTP/1.1 406 Server: nginx/1.18.0 Date: Wed, 02 Sep 2020 09:46:31 GMT Content-Length: 0 Connection: keep-alive Cache-Control: private Expires: Thu, 01 Jan 1970 00:00:00 GMT Access-Control-Allow-Origin: http://localhost:8000 Access-Control-Allow-Credentials: true
Amount of reasones why server is not able to proceed with user requirements can be different, but as example we can use: lack of support for
application/json MIME type - user expected JSON response for XHR / Ajax request.
- as server owner you can provide following response by proper response implementation,
- or requester can change request requirements and asks with different MIME type.