Content Negotiation: Difference between revisions

Jump to navigation Jump to search
no edit summary
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 4: Line 4:


== Mechanism ==
== Mechanism ==
1. When a client makes a request to a server it supplies all the formats it supports in the [[Accept Header]]: <code>Accept: text/html,application/xhtml+xml</code>.
# When a client makes a request to a server it supplies all the formats it supports in the [[Accept Header]]: <code>Accept: text/html,application/xhtml+xml</code>.
2. The server looks at the list the client sent and excludes all formats it does not support.
# The server looks at the list the client sent and excludes all formats it does not support.
3. If there are no common formats, the server either responds with [[406 Not Acceptable]] or it picks a fallback format like <code>text/html</code>.
# If there are no common formats, the server either responds with [[406 Not Acceptable]] or it picks a fallback format like <code>text/html</code>.
4. If there are common formats left, the server picks the one the client marked with the highest priority.
# If there are common formats left, the server picks the one the client marked with the highest priority.
5. The server then returns the content that matches the negotiated format.
# The server then returns the content that matches the negotiated format.
 
== Wildcards ==
Sometimes clients want to specify general classes that they accept. This can be done by using a <code>*</code>. This allows clients to request things like imge types: (<code>image/*</code>), or anything at all: (<code>*/*</code>)
 
== Content-Language Negotiation ==
Aside from negotiating the [[Content-Type Header | Content-Type]] of the response, HTTP also allows clients to negotiate the [[Content-Language]] of the returned data. This is done in the same way as above but then with the [[Accept-Language Header]].
 
== Best Practices ==
To make life easier for everyone we recommend following these practices:
 
=== Return a <code>text/html</code> Response by Default ===
Primarily if the request contains no Accept header or if the client asks for <code>*/*</code>. Ideally this should show a browser friendly interface or an [[API Viewer]].
This allows users to use their browser to explore the data and makes it mandatory for clients to specify what response they want, an important step needed to allow [[Backward Compatibility]].
 
=== Return a List of Supported Formats When Sending a 406 Not Acceptable ===
Ideally these should link to [[API Viewer]] screens that show the response so users can explore the API in their browser.
 
[[Category: Terminology]]

Navigation menu