HTTP provides for several different content negotiation mechanisms including: server-driven (or proactive), agent-driven (or reactive), transparent, and/or hybrid combinations thereof.
More precisely, the user agent provides HTTP headers that lists acceptable aspects of the resource and quality factors for them.
Multiple HTTP headers are often supplied together for content format or, specifically media type, language and a few other aspects of a resource.
An example of a more complex request is where a browser sends headers about language indicating German is preferred but that English is acceptable, as above, and that, regarding formats, HTML (text/html) is preferred over other text types (text/*), GIF (image/gif) or JPEG (image/jpg) images are preferred over other image formats (image/*) but that any other media type (*/*) is accepted as a last resort: In addition to aspects of server-driven content negotiation by content type and by language specified in RFC 7231, there are extensions defining other aspects of content negotiation, such as Memento which describes use of a Accept-Datetime header to retrieve version of a resource's representation at particular points in time[1] and the IETF/W3C's Content Negotiation by Profile[2] which describes use of an Accept-Profile header to retrieve resource representations conforming to data profiles.
Neither RFC 7231 nor the more recent related specifications such as Content Negotiation by Profile[2] specify how to resolve trade-offs in cases where different headers specify conflicting requirements, such as, in the above example, choosing between an HTML page in English and a GIF image in German.