您的位置:

HTTP 406 Not Acceptable

一、错误概述

HTTP 406 Not Acceptable是一个HTTP状态码,表示所请求的资源的内容特征无法满足请求头中的一些要求。

当浏览器向服务器发送请求时,通常会在请求头中包含一个Accept字段,用于告知服务器希望接收的资源类型。如果服务器无法提供符合该字段要求的资源,则返回HTTP 406错误。

这个错误通常是由于服务器没有提供对应的数据格式或者请求的 Accept 头不包含该数据返回另一种数据格式的原因导致的。

二、相关原因及解决方法

1.请求头Accept字段不正确

如果请求头Accept字段不正确,服务器返回406错误。应该正确设置请求头Accept字段,与服务器提供的资源类型保持一致。

    curl -H "Accept: application/json" http://www.example.com
    
    HTTP/1.1 406 Not Acceptable
    Content-Type: text/plain; charset=utf-8
    Content-Length: 23
    Vary: Accept
    
    Cannot provide JSON data

2.请求的资源不存在

当请求的资源在服务器中不存在时,服务器会返回错误406。应该核实请求的地址是否正确,或者检查是否缺少必需的参数。

    curl http://www.example.com/invalid
    
    HTTP/1.1 406 Not Acceptable
    Content-Type: text/plain; charset=utf-8
    Content-Length: 19
    
    Requested resource invalid is not found on this server.

3.未正确设置MIME类型

在服务器返回资源时,必须要正确设置MIME类型。如果MIME类型不正确,会导致406错误。需要在服务器上配置正确的MIME类型,解决问题。

    header('Content-Type: image/gif');

4.语言不匹配

如果请求头中的Accept-Language和服务器提供的资源类型中的语言不匹配,则会返回错误406。

    curl -H "Accept-Language: de" http://www.example.com/fr
    
    HTTP/1.1 406 Not Acceptable
    Content-Type: text/html; charset=utf-8
    Content-Length: 99
    
    Available languages for /fr:
    en-US, es-ES, fr-FR.

5.缺少必需请求头信息

有些资源可能需要一些特殊的请求头信息,如果请求的请求头信息不够,服务器就会返回错误406。

    curl -I http://www.example.com/document.pdf
    
    HTTP/1.1 406 Not Acceptable
    Content-Type: text/html; charset=utf-8
    Content-Length: 92
    
    Requested file only available with Basic Auth over HTTPS, try https://example.com/document.pdf

三、总结

HTTP 406 Not Acceptable错误通常是由于请求头中的Accept字段和服务器提供的资源类型不匹配导致的。解决该问题的方法包括正确设置请求头Accept字段、核实请求的地址是否正确、正确设置MIME类型、请求中缺少必要的请求头信息等。