diff options
Diffstat (limited to '')
-rw-r--r-- | docs/manual/content-negotiation.html | 21 | ||||
-rw-r--r-- | docs/manual/content-negotiation.html.en | 711 | ||||
-rw-r--r-- | docs/manual/content-negotiation.html.fr.utf8 | 742 | ||||
-rw-r--r-- | docs/manual/content-negotiation.html.ja.utf8 | 752 | ||||
-rw-r--r-- | docs/manual/content-negotiation.html.ko.euc-kr | 632 | ||||
-rw-r--r-- | docs/manual/content-negotiation.html.tr.utf8 | 680 |
6 files changed, 3538 insertions, 0 deletions
diff --git a/docs/manual/content-negotiation.html b/docs/manual/content-negotiation.html new file mode 100644 index 0000000..38e61c2 --- /dev/null +++ b/docs/manual/content-negotiation.html @@ -0,0 +1,21 @@ +# GENERATED FROM XML -- DO NOT EDIT + +URI: content-negotiation.html.en +Content-Language: en +Content-type: text/html; charset=UTF-8 + +URI: content-negotiation.html.fr.utf8 +Content-Language: fr +Content-type: text/html; charset=UTF-8 + +URI: content-negotiation.html.ja.utf8 +Content-Language: ja +Content-type: text/html; charset=UTF-8 + +URI: content-negotiation.html.ko.euc-kr +Content-Language: ko +Content-type: text/html; charset=EUC-KR + +URI: content-negotiation.html.tr.utf8 +Content-Language: tr +Content-type: text/html; charset=UTF-8 diff --git a/docs/manual/content-negotiation.html.en b/docs/manual/content-negotiation.html.en new file mode 100644 index 0000000..e64e336 --- /dev/null +++ b/docs/manual/content-negotiation.html.en @@ -0,0 +1,711 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Content Negotiation - Apache HTTP Server Version 2.4</title> +<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" /> +<script src="./style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="./images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="./images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="./">Version 2.4</a></div><div id="page-content"><div id="preamble"><h1>Content Negotiation</h1> +<div class="toplang"> +<p><span>Available Languages: </span><a href="./en/content-negotiation.html" title="English"> en </a> | +<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> + + + <p>Apache HTTPD supports content negotiation as described in + the HTTP/1.1 specification. It can choose the best + representation of a resource based on the browser-supplied + preferences for media type, languages, character set and + encoding. It also implements a couple of features to give + more intelligent handling of requests from browsers that send + incomplete negotiation information.</p> + + <p>Content negotiation is provided by the + <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> module, which is compiled in + by default.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#about">About Content Negotiation</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#negotiation">Negotiation in httpd</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#methods">The Negotiation Methods</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#better">Fiddling with Quality + Values</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#extensions">Extensions to Transparent Content +Negotiation</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#naming">Note on hyperlinks and naming conventions</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#caching">Note on Caching</a></li> +</ul><h3>See also</h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="about" id="about">About Content Negotiation</a></h2> + + <p>A resource may be available in several different + representations. For example, it might be available in + different languages or different media types, or a combination. + One way of selecting the most appropriate choice is to give the + user an index page, and let them select. However it is often + possible for the server to choose automatically. This works + because browsers can send, as part of each request, information + about what representations they prefer. For example, a browser + could indicate that it would like to see information in French, + if possible, else English will do. Browsers indicate their + preferences by headers in the request. To request only French + representations, the browser would send</p> + +<div class="example"><p><code>Accept-Language: fr</code></p></div> + + <p>Note that this preference will only be applied when there is + a choice of representations and they vary by language.</p> + + <p>As an example of a more complex request, this browser has + been configured to accept French and English, but prefer + French, and to accept various media types, preferring HTML over + plain text or other text types, and preferring GIF or JPEG over + other media types, but also allowing any other media type as a + last resort:</p> + +<div class="example"><p><code> + Accept-Language: fr; q=1.0, en; q=0.5<br /> + Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1 +</code></p></div> + + <p>httpd supports 'server driven' content negotiation, as + defined in the HTTP/1.1 specification. It fully supports the + <code>Accept</code>, <code>Accept-Language</code>, + <code>Accept-Charset</code> and <code>Accept-Encoding</code> + request headers. httpd also supports 'transparent' + content negotiation, which is an experimental negotiation + protocol defined in RFC 2295 and RFC 2296. It does not offer + support for 'feature negotiation' as defined in these RFCs.</p> + + <p>A <strong>resource</strong> is a conceptual entity + identified by a URI (RFC 2396). An HTTP server like Apache HTTP Server + provides access to <strong>representations</strong> of the + resource(s) within its namespace, with each representation in + the form of a sequence of bytes with a defined media type, + character set, encoding, etc. Each resource may be associated + with zero, one, or more than one representation at any given + time. If multiple representations are available, the resource + is referred to as <strong>negotiable</strong> and each of its + representations is termed a <strong>variant</strong>. The ways + in which the variants for a negotiable resource vary are called + the <strong>dimensions</strong> of negotiation.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="negotiation" id="negotiation">Negotiation in httpd</a></h2> + + <p>In order to negotiate a resource, the server needs to be + given information about each of the variants. This is done in + one of two ways:</p> + + <ul> + <li>Using a type map (<em>i.e.</em>, a <code>*.var</code> + file) which names the files containing the variants + explicitly, or</li> + + <li>Using a 'MultiViews' search, where the server does an + implicit filename pattern match and chooses from among the + results.</li> + </ul> + + <h3><a name="type-map" id="type-map">Using a type-map file</a></h3> + + <p>A type map is a document which is associated with the handler + named <code>type-map</code> (or, for backwards-compatibility with + older httpd configurations, the <a class="glossarylink" href="./glossary.html#mime-type" title="see glossary">MIME-type</a> + <code>application/x-type-map</code>). Note that to use this + feature, you must have a handler set in the configuration that + defines a file suffix as <code>type-map</code>; this is best done + with</p> + +<pre class="prettyprint lang-config">AddHandler type-map .var</pre> + + + <p>in the server configuration file.</p> + + <p>Type map files should have the same name as the resource + which they are describing, followed by the extension + <code>.var</code>. In the examples shown below, the resource is + named <code>foo</code>, so the type map file is named + <code>foo.var</code>.</p> + + <p>This file should have an entry for each available + variant; these entries consist of contiguous HTTP-format header + lines. Entries for different variants are separated by blank + lines. Blank lines are illegal within an entry. It is + conventional to begin a map file with an entry for the combined + entity as a whole (although this is not required, and if + present will be ignored). An example map file is shown below.</p> + + <p>URIs in this file are relative to the location of the type map + file. Usually, these files will be located in the same directory as + the type map file, but this is not required. You may provide + absolute or relative URIs for any file located on the same server as + the map file.</p> + +<div class="example"><p><code> + URI: foo<br /> +<br /> + URI: foo.en.html<br /> + Content-type: text/html<br /> + Content-language: en<br /> +<br /> + URI: foo.fr.de.html<br /> + Content-type: text/html;charset=iso-8859-2<br /> + Content-language: fr, de<br /> +</code></p></div> + + <p>Note also that a typemap file will take precedence over the + filename's extension, even when Multiviews is on. If the + variants have different source qualities, that may be indicated + by the "qs" parameter to the media type, as in this picture + (available as JPEG, GIF, or ASCII-art): </p> + +<div class="example"><p><code> + URI: foo<br /> +<br /> + URI: foo.jpeg<br /> + Content-type: image/jpeg; qs=0.8<br /> +<br /> + URI: foo.gif<br /> + Content-type: image/gif; qs=0.5<br /> +<br /> + URI: foo.txt<br /> + Content-type: text/plain; qs=0.01<br /> +</code></p></div> + + <p>qs values can vary in the range 0.000 to 1.000. Note that + any variant with a qs value of 0.000 will never be chosen. + Variants with no 'qs' parameter value are given a qs factor of + 1.0. The qs parameter indicates the relative 'quality' of this + variant compared to the other available variants, independent + of the client's capabilities. For example, a JPEG file is + usually of higher source quality than an ASCII file if it is + attempting to represent a photograph. However, if the resource + being represented is an original ASCII art, then an ASCII + representation would have a higher source quality than a JPEG + representation. A qs value is therefore specific to a given + variant depending on the nature of the resource it + represents.</p> + + <p>The full list of headers recognized is available in the <a href="mod/mod_negotiation.html#typemaps">mod_negotiation + typemap</a> documentation.</p> + + +<h3><a name="multiviews" id="multiviews">Multiviews</a></h3> + + <p><code>MultiViews</code> is a per-directory option, meaning it + can be set with an <code class="directive"><a href="./mod/core.html#options">Options</a></code> + directive within a <code class="directive"><a href="./mod/core.html#directory"><Directory></a></code>, <code class="directive"><a href="./mod/core.html#location"><Location></a></code> or <code class="directive"><a href="./mod/core.html#files"><Files></a></code> section in + <code>httpd.conf</code>, or (if <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> is properly set) in + <code>.htaccess</code> files. Note that <code>Options All</code> + does not set <code>MultiViews</code>; you have to ask for it by + name.</p> + + <p>The effect of <code>MultiViews</code> is as follows: if the + server receives a request for <code>/some/dir/foo</code>, if + <code>/some/dir</code> has <code>MultiViews</code> enabled, and + <code>/some/dir/foo</code> does <em>not</em> exist, then the + server reads the directory looking for files named foo.*, and + effectively fakes up a type map which names all those files, + assigning them the same media types and content-encodings it + would have if the client had asked for one of them by name. It + then chooses the best match to the client's requirements.</p> + + <p><code>MultiViews</code> may also apply to searches for the file + named by the <code class="directive"><a href="./mod/mod_dir.html#directoryindex">DirectoryIndex</a></code> directive, if the + server is trying to index a directory. If the configuration files + specify</p> +<pre class="prettyprint lang-config">DirectoryIndex index</pre> + + <p>then the server will arbitrate between <code>index.html</code> + and <code>index.html3</code> if both are present. If neither + are present, and <code>index.cgi</code> is there, the server + will run it.</p> + + <p>If one of the files found when reading the directory does not + have an extension recognized by <code>mod_mime</code> to designate + its Charset, Content-Type, Language, or Encoding, then the result + depends on the setting of the <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code> directive. This + directive determines whether handlers, filters, and other + extension types can participate in MultiViews negotiation.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="methods" id="methods">The Negotiation Methods</a></h2> + + <p>After httpd has obtained a list of the variants for a given + resource, either from a type-map file or from the filenames in + the directory, it invokes one of two methods to decide on the + 'best' variant to return, if any. It is not necessary to know + any of the details of how negotiation actually takes place in + order to use httpd's content negotiation features. However the + rest of this document explains the methods used for those + interested. </p> + + <p>There are two negotiation methods:</p> + + <ol> + <li><strong>Server driven negotiation with the httpd + algorithm</strong> is used in the normal case. The httpd + algorithm is explained in more detail below. When this + algorithm is used, httpd can sometimes 'fiddle' the quality + factor of a particular dimension to achieve a better result. + The ways httpd can fiddle quality factors is explained in + more detail below.</li> + + <li><strong>Transparent content negotiation</strong> is used + when the browser specifically requests this through the + mechanism defined in RFC 2295. This negotiation method gives + the browser full control over deciding on the 'best' variant, + the result is therefore dependent on the specific algorithms + used by the browser. As part of the transparent negotiation + process, the browser can ask httpd to run the 'remote + variant selection algorithm' defined in RFC 2296.</li> + </ol> + +<h3><a name="dimensions" id="dimensions">Dimensions of Negotiation</a></h3> + + <table> + + <tr valign="top"> + <th>Dimension</th> + + <th>Notes</th> + </tr> + + <tr valign="top"> + <td>Media Type</td> + + <td>Browser indicates preferences with the <code>Accept</code> + header field. Each item can have an associated quality factor. + Variant description can also have a quality factor (the "qs" + parameter).</td> + </tr> + + <tr valign="top"> + <td>Language</td> + + <td>Browser indicates preferences with the + <code>Accept-Language</code> header field. Each item can have + a quality factor. Variants can be associated with none, one or + more than one language.</td> + </tr> + + <tr valign="top"> + <td>Encoding</td> + + <td>Browser indicates preference with the + <code>Accept-Encoding</code> header field. Each item can have + a quality factor.</td> + </tr> + + <tr valign="top"> + <td>Charset</td> + + <td>Browser indicates preference with the + <code>Accept-Charset</code> header field. Each item can have a + quality factor. Variants can indicate a charset as a parameter + of the media type.</td> + </tr> + </table> + + +<h3><a name="algorithm" id="algorithm">httpd Negotiation Algorithm</a></h3> + + <p>httpd can use the following algorithm to select the 'best' + variant (if any) to return to the browser. This algorithm is + not further configurable. It operates as follows:</p> + + <ol> + <li>First, for each dimension of the negotiation, check the + appropriate <em>Accept*</em> header field and assign a + quality to each variant. If the <em>Accept*</em> header for + any dimension implies that this variant is not acceptable, + eliminate it. If no variants remain, go to step 4.</li> + + <li> + Select the 'best' variant by a process of elimination. Each + of the following tests is applied in order. Any variants + not selected at each test are eliminated. After each test, + if only one variant remains, select it as the best match + and proceed to step 3. If more than one variant remains, + move on to the next test. + + <ol> + <li>Multiply the quality factor from the <code>Accept</code> + header with the quality-of-source factor for this variants + media type, and select the variants with the highest + value.</li> + + <li>Select the variants with the highest language quality + factor.</li> + + <li>Select the variants with the best language match, + using either the order of languages in the + <code>Accept-Language</code> header (if present), or else + the order of languages in the <code>LanguagePriority</code> + directive (if present).</li> + + <li>Select the variants with the highest 'level' media + parameter (used to give the version of text/html media + types).</li> + + <li>Select variants with the best charset media + parameters, as given on the <code>Accept-Charset</code> + header line. Charset ISO-8859-1 is acceptable unless + explicitly excluded. Variants with a <code>text/*</code> + media type but not explicitly associated with a particular + charset are assumed to be in ISO-8859-1.</li> + + <li>Select those variants which have associated charset + media parameters that are <em>not</em> ISO-8859-1. If + there are no such variants, select all variants + instead.</li> + + <li>Select the variants with the best encoding. If there + are variants with an encoding that is acceptable to the + user-agent, select only these variants. Otherwise if + there is a mix of encoded and non-encoded variants, + select only the unencoded variants. If either all + variants are encoded or all variants are not encoded, + select all variants.</li> + + <li>Select the variants with the smallest content + length.</li> + + <li>Select the first variant of those remaining. This + will be either the first listed in the type-map file, or + when variants are read from the directory, the one whose + file name comes first when sorted using ASCII code + order.</li> + </ol> + </li> + + <li>The algorithm has now selected one 'best' variant, so + return it as the response. The HTTP response header + <code>Vary</code> is set to indicate the dimensions of + negotiation (browsers and caches can use this information when + caching the resource). End.</li> + + <li>To get here means no variant was selected (because none + are acceptable to the browser). Return a 406 status (meaning + "No acceptable representation") with a response body + consisting of an HTML document listing the available + variants. Also set the HTTP <code>Vary</code> header to + indicate the dimensions of variance.</li> + </ol> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="better" id="better">Fiddling with Quality + Values</a></h2> + + <p>httpd sometimes changes the quality values from what would + be expected by a strict interpretation of the httpd + negotiation algorithm above. This is to get a better result + from the algorithm for browsers which do not send full or + accurate information. Some of the most popular browsers send + <code>Accept</code> header information which would otherwise + result in the selection of the wrong variant in many cases. If a + browser sends full and correct information these fiddles will not + be applied.</p> + +<h3><a name="wildcards" id="wildcards">Media Types and Wildcards</a></h3> + + <p>The <code>Accept:</code> request header indicates preferences + for media types. It can also include 'wildcard' media types, such + as "image/*" or "*/*" where the * matches any string. So a request + including:</p> + +<div class="example"><p><code>Accept: image/*, */*</code></p></div> + + <p>would indicate that any type starting "image/" is acceptable, + as is any other type. + Some browsers routinely send wildcards in addition to explicit + types they can handle. For example:</p> + +<div class="example"><p><code> + Accept: text/html, text/plain, image/gif, image/jpeg, */* +</code></p></div> + <p>The intention of this is to indicate that the explicitly listed + types are preferred, but if a different representation is + available, that is ok too. Using explicit quality values, + what the browser really wants is something like:</p> +<div class="example"><p><code> + Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01 +</code></p></div> + <p>The explicit types have no quality factor, so they default to a + preference of 1.0 (the highest). The wildcard */* is given a + low preference of 0.01, so other types will only be returned if + no variant matches an explicitly listed type.</p> + + <p>If the <code>Accept:</code> header contains <em>no</em> q + factors at all, httpd sets the q value of "*/*", if present, to + 0.01 to emulate the desired behavior. It also sets the q value of + wildcards of the format "type/*" to 0.02 (so these are preferred + over matches against "*/*". If any media type on the + <code>Accept:</code> header contains a q factor, these special + values are <em>not</em> applied, so requests from browsers which + send the explicit information to start with work as expected.</p> + + +<h3><a name="exceptions" id="exceptions">Language Negotiation Exceptions</a></h3> + + <p>New in httpd 2.0, some exceptions have been added to the + negotiation algorithm to allow graceful fallback when language + negotiation fails to find a match.</p> + + <p>When a client requests a page on your server, but the server + cannot find a single page that matches the + <code>Accept-language</code> sent by + the browser, the server will return either a "No Acceptable + Variant" or "Multiple Choices" response to the client. To avoid + these error messages, it is possible to configure httpd to ignore + the <code>Accept-language</code> in these cases and provide a + document that does not explicitly match the client's request. The + <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code> + directive can be used to override one or both of these error + messages and substitute the servers judgement in the form of the + <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code> + directive.</p> + + <p>The server will also attempt to match language-subsets when no + other match can be found. For example, if a client requests + documents with the language <code>en-GB</code> for British + English, the server is not normally allowed by the HTTP/1.1 + standard to match that against a document that is marked as simply + <code>en</code>. (Note that it is almost surely a configuration + error to include <code>en-GB</code> and not <code>en</code> in the + <code>Accept-Language</code> header, since it is very unlikely + that a reader understands British English, but doesn't understand + English in general. Unfortunately, many current clients have + default configurations that resemble this.) However, if no other + language match is possible and the server is about to return a "No + Acceptable Variants" error or fallback to the <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>, the server + will ignore the subset specification and match <code>en-GB</code> + against <code>en</code> documents. Implicitly, httpd will add + the parent language to the client's acceptable language list with + a very low quality value. But note that if the client requests + "en-GB; q=0.9, fr; q=0.8", and the server has documents + designated "en" and "fr", then the "fr" document will be returned. + This is necessary to maintain compliance with the HTTP/1.1 + specification and to work effectively with properly configured + clients.</p> + + <p>In order to support advanced techniques (such as cookies or + special URL-paths) to determine the user's preferred language, + since httpd 2.0.47 <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> recognizes + the <a href="env.html">environment variable</a> + <code>prefer-language</code>. If it exists and contains an + appropriate language tag, <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> will + try to select a matching variant. If there's no such variant, + the normal negotiation process applies.</p> + + <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">SetEnvIf Cookie "language=(.+)" prefer-language=$1 +Header append Vary cookie</pre> +</div> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="extensions" id="extensions">Extensions to Transparent Content +Negotiation</a></h2> + +<p>httpd extends the transparent content negotiation protocol (RFC +2295) as follows. A new <code>{encoding ..}</code> element is used in +variant lists to label variants which are available with a specific +content-encoding only. The implementation of the RVSA/1.0 algorithm +(RFC 2296) is extended to recognize encoded variants in the list, and +to use them as candidate variants whenever their encodings are +acceptable according to the <code>Accept-Encoding</code> request +header. The RVSA/1.0 implementation does not round computed quality +factors to 5 decimal places before choosing the best variant.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="naming" id="naming">Note on hyperlinks and naming conventions</a></h2> + + <p>If you are using language negotiation you can choose between + different naming conventions, because files can have more than + one extension, and the order of the extensions is normally + irrelevant (see the <a href="mod/mod_mime.html#multipleext">mod_mime</a> documentation + for details).</p> + + <p>A typical file has a MIME-type extension (<em>e.g.</em>, + <code>html</code>), maybe an encoding extension (<em>e.g.</em>, + <code>gz</code>), and of course a language extension + (<em>e.g.</em>, <code>en</code>) when we have different + language variants of this file.</p> + + <p>Examples:</p> + + <ul> + <li>foo.en.html</li> + + <li>foo.html.en</li> + + <li>foo.en.html.gz</li> + </ul> + + <p>Here some more examples of filenames together with valid and + invalid hyperlinks:</p> + + <table class="bordered"> + + <tr> + <th>Filename</th> + + <th>Valid hyperlink</th> + + <th>Invalid hyperlink</th> + </tr> + + <tr> + <td><em>foo.html.en</em></td> + + <td>foo<br /> + foo.html</td> + + <td>-</td> + </tr> + + <tr> + <td><em>foo.en.html</em></td> + + <td>foo</td> + + <td>foo.html</td> + </tr> + + <tr> + <td><em>foo.html.en.gz</em></td> + + <td>foo<br /> + foo.html</td> + + <td>foo.gz<br /> + foo.html.gz</td> + </tr> + + <tr> + <td><em>foo.en.html.gz</em></td> + + <td>foo</td> + + <td>foo.html<br /> + foo.html.gz<br /> + foo.gz</td> + </tr> + + <tr> + <td><em>foo.gz.html.en</em></td> + + <td>foo<br /> + foo.gz<br /> + foo.gz.html</td> + + <td>foo.html</td> + </tr> + + <tr> + <td><em>foo.html.gz.en</em></td> + + <td>foo<br /> + foo.html<br /> + foo.html.gz</td> + + <td>foo.gz</td> + </tr> + </table> + + <p>Looking at the table above, you will notice that it is always + possible to use the name without any extensions in a hyperlink + (<em>e.g.</em>, <code>foo</code>). The advantage is that you + can hide the actual type of a document rsp. file and can change + it later, <em>e.g.</em>, from <code>html</code> to + <code>shtml</code> or <code>cgi</code> without changing any + hyperlink references.</p> + + <p>If you want to continue to use a MIME-type in your + hyperlinks (<em>e.g.</em> <code>foo.html</code>) the language + extension (including an encoding extension if there is one) + must be on the right hand side of the MIME-type extension + (<em>e.g.</em>, <code>foo.html.en</code>).</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="caching" id="caching">Note on Caching</a></h2> + + <p>When a cache stores a representation, it associates it with + the request URL. The next time that URL is requested, the cache + can use the stored representation. But, if the resource is + negotiable at the server, this might result in only the first + requested variant being cached and subsequent cache hits might + return the wrong response. To prevent this, httpd normally + marks all responses that are returned after content negotiation + as non-cacheable by HTTP/1.0 clients. httpd also supports the + HTTP/1.1 protocol features to allow caching of negotiated + responses.</p> + + <p>For requests which come from a HTTP/1.0 compliant client + (either a browser or a cache), the directive <code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code> can be + used to allow caching of responses which were subject to + negotiation. This directive can be given in the server config or + virtual host, and takes no arguments. It has no effect on requests + from HTTP/1.1 clients.</p> + + <p>For HTTP/1.1 clients, httpd sends a <code>Vary</code> HTTP + response header to indicate the negotiation dimensions for the + response. Caches can use this information to determine whether a + subsequent request can be served from the local copy. To + encourage a cache to use the local copy regardless of the + negotiation dimensions, set the <code>force-no-vary</code> <a href="env.html#special">environment variable</a>.</p> + +</div></div> +<div class="bottomlang"> +<p><span>Available Languages: </span><a href="./en/content-negotiation.html" title="English"> en </a> | +<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/content-negotiation.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossary</a> | <a href="./sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/content-negotiation.html.fr.utf8 b/docs/manual/content-negotiation.html.fr.utf8 new file mode 100644 index 0000000..7d6ca70 --- /dev/null +++ b/docs/manual/content-negotiation.html.fr.utf8 @@ -0,0 +1,742 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>Négociation de contenu - Serveur HTTP Apache Version 2.4</title> +<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" /> +<script src="./style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="./images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p> +<p class="apache">Serveur HTTP Apache Version 2.4</p> +<img alt="" src="./images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">Serveur HTTP</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="./">Version 2.4</a></div><div id="page-content"><div id="preamble"><h1>Négociation de contenu</h1> +<div class="toplang"> +<p><span>Langues Disponibles: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="./fr/content-negotiation.html" title="Français"> fr </a> | +<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> + + + <p>Apache HTTPD supporte la négociation de + contenu telle qu'elle est décrite + dans la spécification HTTP/1.1. Il peut choisir la meilleure représentation + d'une ressource en fonction des préférences du navigateur pour ce qui + concerne le type de media, les langages, le jeu de caractères et son + encodage. Il implémente aussi quelques fonctionnalités pour traiter de + manière plus intelligente les requêtes en provenance de navigateurs qui + envoient des informations de négociation incomplètes.</p> + + <p>La négociation de contenu est assurée par le module + <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> qui est compilé par défaut + dans le serveur.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#about">À propos de la négociation de contenu</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#negotiation">La négociation avec httpd</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#methods">Les méthodes de négociation</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#better">Ajustement des valeurs de qualité</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#extensions">Extensions à la négociation de contenu +transparente</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#naming">Remarques à propos des liens hypertextes et des +conventions de nommage</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#caching">Remarque sur la mise en cache</a></li> +</ul><h3>Voir aussi</h3><ul class="seealso"><li><a href="#comments_section">Commentaires</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="about" id="about">À propos de la négociation de contenu</a></h2> + + <p>Une ressource peut être disponible selon différentes représentations. + Par exemple, elle peut être disponible en différents langages ou pour + différents types de média, ou une combinaison des deux. + Pour faire le meilleur choix, on peut fournir à l'utilisateur une page + d'index, et le laisser choisir. Cependant, le serveur peut souvent faire + ce choix automatiquement. Ceci est possible car les navigateurs peuvent + envoyer des informations sur les + représentations qu'ils préfèrent à l'intérieur de chaque requête. + Par exemple, un navigateur peut indiquer + qu'il préfère voir les informations en français, mais qu'en cas + d'impossibilité l'anglais peut convenir. Les navigateurs indiquent leurs + préférences à l'aide d'en-têtes dans la requête. Pour ne demander que des + représentations en français, le navigateur peut utiliser l'en-tête :</p> + +<div class="example"><p><code>Accept-Language: fr</code></p></div> + + <p>Notez qu'il ne sera tenu compte de cette préférence que s'il existe un + choix de représentations et que ces dernières varient en fonction + du langage.</p> + + <p>À titre d'exemple d'une requête plus complexe, ce navigateur a été + configuré pour accepter le français et l'anglais, avec une préférence pour + le français, et accepter différents types de média, avec une préférence + pour HTML par rapport à au texte plat ("plain text") ou autres types de fichiers texte, et + avec une préférence pour GIF ou JPEG par rapport à tout autre type de + média, mais autorisant tout autre type de média en dernier ressort :</p> + +<div class="example"><p><code> + Accept-Language: fr; q=1.0, en; q=0.5<br /> + Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1 +</code></p></div> + + <p>httpd supporte la négociation de contenu "server driven" (telle qu'elle + est définie dans la spécification HTTP/1.1), où c'est le serveur qui + décide quelle est la meilleure représentation à retourner pour la ressource + demandée. Il supporte entièrement les en-têtes de requête + <code>Accept</code>, <code>Accept-Language</code>, + <code>Accept-Charset</code> et <code>Accept-Encoding</code>. + httpd supporte aussi la négociation de contenu transparente, qui est un + protocole de négociation expérimental défini dans les RFC 2295 et 2296. + Il ne supporte pas la négociation de fonctionnalité (feature negotiation) + telle qu'elle est définie dans ces RFCs.</p> + + <p>Une <strong>ressource</strong> est une entité conceptuelle identifiée + par une URI (RFC 2396). Un serveur HTTP comme le serveur HTTP Apache + propose l'accès à des + <strong>représentations</strong> de la ressource à l'intérieur de son + espace de nommage, chaque représentation étant composée d'une séquence + d'octets avec la définition d'un type de media, d'un jeu de caractères, + d'un encodage, etc... A un instant donné, chaque ressource peut être + associée avec zéro, une ou plusieurs représentations. Si plusieurs + représentations sont disponibles, la ressource est qualifiée de + <strong>négociable</strong> et chacune de ses représentations se nomme + <strong>variante</strong>. Les différences entre les + variantes disponibles d'une ressource négociable constituent les + <strong>dimensions</strong> de la négociation.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="negotiation" id="negotiation">La négociation avec httpd</a></h2> + + <p>Afin de négocier une ressource, on doit fournir au serveur des + informations à propos de chacune des variantes. Il y a deux manières + d'accomplir ceci :</p> + + <ul> + <li>Utiliser une liste de correspondances de type ("type-map") (<em>c'est à dire</em> + un fichier <code>*.var</code>) qui nomme explicitement les fichiers + contenant les variantes, ou</li> + + <li>Utiliser une recherche "multivues", où le serveur effectue une + recherche de correspondance sur un motif de nom de fichier implicite et + fait son choix parmi les différents résultats.</li> + </ul> + + <h3><a name="type-map" id="type-map">Utilisation d'un fichier de + correspondances de types (type-map)</a></h3> + + <p>Une liste de correspondances de types est un document associé au + gestionnaire <code>type-map</code> (ou, dans un souci de compatibilité + ascendante avec des configurations de httpd plus anciennes, le + <a class="glossarylink" href="./glossary.html#type mime" title="voir glossaire">type MIME</a> + <code>application/x-type-map</code>). Notez que pour utiliser cette + fonctionnalité, vous devez, dans le fichier de configuration, définir un + gestionnaire qui associe un suffixe de fichier à une <code>type-map</code>; + ce qui se fait simplement en ajoutant</p> + +<pre class="prettyprint lang-config">AddHandler type-map .var</pre> + + + <p>dans le fichier de configuration du serveur.</p> + + <p>Les fichiers de correspondances de types doivent posséder le même nom que + la ressource qu'ils décrivent, avec pour extension + <code>.var</code>. Dans l'exemple ci-dessous, la ressource a pour + nom <code>foo</code>, et le fichier de correspondances se nomme donc + <code>foo.var</code>.</p> + + <p>Ce fichier doit comporter une entrée pour chaque variante + disponible; chaque entrée consiste en une ligne contiguë d'en-têtes au + format HTTP. les entrées sont séparées par des lignes vides. Les lignes + vides à l'intérieur d'une entrée sont interdites. Par convention, le + fichier de correspondances de types débute par une entrée concernant l'entité + considérée dans son ensemble (bien que ce ne soit pas obligatoire, et + ignoré si présent). Un exemple de fichier de + correspondance de types est fourni + ci-dessous.</p> + + <p>Les URIs de ce fichier sont relatifs à la localisation du fichier + de correspondances de types. En général, ces fichiers se trouveront dans le + même répertoire que le fichier de correspondances de types, mais ce + n'est pas obligatoire. Vous pouvez utiliser des URIs absolus ou + relatifs pour tout fichier situé sur le même serveur que le fichier + de correspondances.</p> + +<div class="example"><p><code> + URI: foo<br /> +<br /> + URI: foo.en.html<br /> + Content-type: text/html<br /> + Content-language: en<br /> +<br /> + URI: foo.fr.de.html<br /> + Content-type: text/html;charset=iso-8859-2<br /> + Content-language: fr, de<br /> +</code></p></div> + + <p>Notez aussi qu'un fichier de correspondances de types prend le pas sur + les extensions de noms de fichiers, même si les Multivues sont activées. + Si les variantes sont de qualités différentes, on doit l'indiquer + à l'aide du paramètre "qs" à la suite du type de média, comme pour cette + image + (disponible aux formats JPEG, GIF, ou ASCII-art) : </p> + +<div class="example"><p><code> + URI: foo<br /> +<br /> + URI: foo.jpeg<br /> + Content-type: image/jpeg; qs=0.8<br /> +<br /> + URI: foo.gif<br /> + Content-type: image/gif; qs=0.5<br /> +<br /> + URI: foo.txt<br /> + Content-type: text/plain; qs=0.01<br /> +</code></p></div> + + <p>Les valeurs de qs peuvent varier de 0.000 à 1.000. Notez que toute + variante possédant une valeur de qs de 0.000 ne sera jamais choisie. + Les variantes qui n'ont pas de paramètre qs défini se voient attribuer + une valeur de 1.0. Le paramètre qs indique la qualité relative de la + variante comparée à celle des autres variantes disponibles, sans tenir + compte des capacités du client. Par exemple, un fichier JPEG possède + en général une qualité supérieure à celle d'un fichier ASCII s'il + représente une photographie. Cependant, si la ressource représentée est + à un ASCII art original, la représentation ASCII sera de meilleure qualité + que la représentation JPEG. Ainsi une valeur de qs est associée à une + variante en fonction de la nature de la ressource qu'elle représente.</p> + + <p>La liste complète des en-têtes reconnus est disponible dans la + documentation sur les <a href="mod/mod_negotiation.html#typemaps">correspondances de types du + module mod_negotiation</a>.</p> + + +<h3><a name="multiviews" id="multiviews">Multivues (option Multiviews)</a></h3> + + <p><code>MultiViews</code> est une option qui s'applique à un répertoire, + ce qui signifie qu'elle peut être activée à l'aide d'une directive + <code class="directive"><a href="./mod/core.html#options">Options</a></code> à l'intérieur d'une section + <code class="directive"><a href="./mod/core.html#directory"><Directory></a></code>, <code class="directive"><a href="./mod/core.html#location"><Location></a></code> ou <code class="directive"><a href="./mod/core.html#files"><Files></a></code> dans + <code>httpd.conf</code>, ou (si <code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> est correctement positionnée) dans + des fichiers + <code>.htaccess</code>. Notez que <code>Options All</code> + n'active pas <code>MultiViews</code>; vous devez activer cette option en + la nommant explicitement.</p> + + <p>L'effet de <code>MultiViews</code> est le suivant : si le serveur reçoit + une requête pour <code>/tel/répertoire/foo</code>, si + <code>MultiViews</code> est activée pour + <code>/tel/répertoire</code>, et si + <code>/tel/répertoire/foo</code> n'existe <em>pas</em>, le serveur parcourt + le répertoire à la recherche de fichiers nommés foo.*, et simule + littéralement une correspondance de types (type map) qui liste tous ces + fichiers, en leur associant les mêmes types de média et encodages de + contenu qu'ils auraient eu si le client avait demandé l'accès à l'un + d'entre eux par son nom. Il choisit ensuite ce qui correspond le mieux + aux besoins du client.</p> + + <p><code>MultiViews</code> peut aussi s'appliquer à la recherche du fichier + nommé par la directive <code class="directive"><a href="./mod/mod_dir.html#directoryindex">DirectoryIndex</a></code>, si le serveur tente d'indexer + un répertoire. Si les fichiers de configuration spécifient</p> +<pre class="prettyprint lang-config">DirectoryIndex index</pre> + + <p>le serveur va choisir entre <code>index.html</code> + et <code>index.html3</code> si les deux fichiers sont présents. Si aucun + n'est présent, mais <code>index.cgi</code> existe, + le serveur l'exécutera.</p> + + <p>Si, parcequ'elle n'est pas reconnue par <code>mod_mime</code>, + l'extension d'un des fichiers du répertoire ne permet pas de + déterminer son jeu de caractères, son type de contenu, son langage, ou son + encodage, alors + le résultat dépendra de la définition de la directive <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code>. Cette directive détermine + si les gestionnaires (handlers), les filtres, et autres types d'extensions + peuvent participer à la négociation MultiVues.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="methods" id="methods">Les méthodes de négociation</a></h2> + + <p>Une fois obtenue la liste des variantes pour une ressource donnée, + httpd dispose de deux méthodes pour choisir la meilleure variante à + retourner, s'il y a lieu, soit à partir d'un fichier de + correspondances de types, soit en se basant sur les noms de fichiers du + répertoire. Il n'est pas nécessaire de connaître en détails comment la + négociation fonctionne réellement pour pouvoir utiliser les fonctionnalités + de négociation de contenu de httpd. La suite de ce document explique + cependant les méthodes utilisées pour ceux ou celles qui sont + intéressés(ées). </p> + + <p>Il existe deux méthodes de négociation :</p> + + <ol> + <li><strong>La négociation effectuée par le serveur selon l'algorithme + de httpd</strong> est normalement utilisée. l'algorithme de + httpd est + expliqué plus en détails ci-dessous. Quand cet algorithme est utilisé, + httpd peut parfois "bricoler" le facteur de qualité (qs) d'une dimension + particulière afin d'obtenir un meilleur résultat. + La manière dont httpd peut modifier les facteurs de qualité est + expliquée plus en détails ci-dessous.</li> + + <li><strong>La négociation de contenu transparente</strong> est utilisée + quand le navigateur le demande explicitement selon le mécanisme défini + dans la RFC 2295. Cette méthode de négociation donne au navigateur le + contrôle total du choix de la meilleure variante; le résultat dépend + cependant de la spécificité des algorithmes utilisés par le navigateur. + Au cours du processus de négociation transparente, le navigateur peut + demander à httpd d'exécuter l'"algorithme de sélection de variante à + distance" défini dans la RFC 2296.</li> + </ol> + +<h3><a name="dimensions" id="dimensions">Les dimensions de la négociation</a></h3> + + <table> + + <tr valign="top"> + <th>Dimension</th> + + <th>Notes</th> + </tr> + + <tr valign="top"> + <td>Type de média</td> + + <td>Le navigateur affiche ses préférences à l'aide du champ d'en-tête + <code>Accept</code>. Chaque type de média peut se voir associé un facteur de + qualité. La description de la variante peut aussi avoir un facteur de + qualité (le paramètre "qs").</td> + </tr> + + <tr valign="top"> + <td>Langage</td> + + <td>Le navigateur affiche ses préférences à l'aide du champ d'en-tête + <code>Accept-Language</code>. Chaque langue peut se voir associé un facteur de + qualité. Les variantes peuvent être associées avec zéro, un ou + plusieurs langages.</td> + </tr> + + <tr valign="top"> + <td>Encoding</td> + + <td>Le navigateur affiche ses préférences à l'aide du champ d'en-tête + <code>Accept-Encoding</code>. Chaque encodage peut se voir associé un facteur de + qualité.</td> + </tr> + + <tr valign="top"> + <td>Charset</td> + + <td>Le navigateur affiche ses préférences à l'aide du champ d'en-tête + <code>Accept-Charset</code>. Chaque jeu de caractère peut se voir associé un facteur de + qualité. Les variantes peuvent préciser un jeu de caractères comme + paramètre du type de média.</td> + </tr> + </table> + + +<h3><a name="algorithm" id="algorithm">L'algorithme de négociation de +httpd</a></h3> + + <p>httpd peut utiliser l'algorithme suivant pour choisir la "meilleure" + variante (s'il y en a une) à retourner au navigateur. Cet algorithme n'est pas + configurable. Il fonctionne comme suit :</p> + + <ol> + <li>En premier lieu, pour chaque dimension de la négociation, consulter + le champ d'en-tête <em>Accept*</em> approprié et assigner une qualité à + chaque variante. Si l'en-tête <em>Accept*</em> pour toute dimension + implique que la variante n'est pas acceptable, éliminer cette dernière. + S'il ne reste plus de variante, aller à l'étape 4.</li> + + <li> + Choisir la "meilleure" variante par élimination. Chacun des tests + suivants est effectué dans cet ordre. Toute variante non sélectionnée + à l'issue d'un test est éliminée. Après chaque test, s'il reste une + seule variante, choisir cette dernière comme celle qui correspond le + mieux puis aller à l'étape 3. S'il reste plusieurs variantes, passer + au test suivant. + + <ol> + <li>Multiplier le facteur de qualité de l'en-tête + <code>Accept</code> par le facteur de qualité "qs" pour le type de + média de ces variantes, et choisir la variante qui possède la valeur + la plus importante.</li> + + <li>Sélectionner les variantes qui possèdent le facteur de qualité + de langage le plus haut.</li> + + <li>Sélectionner les variantes dont le langage correspond le mieux, + en se basant sur l'ordre des langages de l'en-tête + <code>Accept-Language</code> (s'il existe), ou de la directive + <code>LanguagePriority</code> (si elle existe).</li> + + <li>Sélectionner les variantes possédant le paramètre de média + "level" le plus élevé (utilisé pour préciser la version des types de + média text/html).</li> + + <li>Sélectionner les variantes possédant le paramètre de média + "charset" (jeu de caractères) qui correspond le mieux, en se basant + sur la ligne d'en-tête <code>Accept-Charset</code> . Le jeu de + caractères ISO-8859-1 est acceptable sauf s'il est explicitement + exclus. Les variantes avec un type de média <code>text/*</code> + mais non explicitement associées avec un jeu de caractères + particulier sont supposées être en ISO-8859-1.</li> + + <li>Sélectionner les variantes dont le paramètre de média "charset" + associé n'est <em>pas</em> ISO-8859-1. S'il n'en existe pas, + sélectionner toutes les variantes.</li> + + <li>Sélectionner les variantes avec le meilleur encodage. S'il existe + des variantes avec un encodage acceptable pour le client, + sélectionner celles-ci. Sinon, s'il existe des variantes encodées et + des variantes non encodées, ne sélectionner que les variantes non + encodées. Si toutes les variantes sont encodées ou si aucune + ne l'est, sélectionner toutes les variantes.</li> + + <li>Sélectionner les variantes dont le contenu a la longueur + la plus courte.</li> + + <li>Sélectionner la première des variantes restantes. Il s'agira + soit de la première variante listée dans le fichier de + correspondances de types, soit, quand les variantes sont lues depuis + le répertoire, la première par ordre alphabétique quand elles sont + triées selon le code ASCII.</li> + </ol> + </li> + + <li>L'algorithme a maintenant sélectionné une variante considérée comme + la "meilleure", il la retourne donc au client en guise de réponse. + L'en-tête HTTP <code>Vary</code> de la réponse est renseigné de façon à + indiquer les dimensions de la négociation (les navigateurs et les caches + peuvent utiliser cette information lors de la mise en cache de la + ressource). Travail terminé.</li> + + <li>Le passage par cette étape signifie qu'aucune variante n'a été + sélectionnée (parcequ'aucune n'est acceptable pour le navigateur). + Envoyer une réponse avec un code de statut 406 (qui signifie "Aucune + représentation acceptable") et un corps comportant un document HTML qui + affiche les variantes disponibles. Renseigner aussi l'en-tête HTTP + <code>Vary</code> de façon à indiquer les dimensions de la variante.</li> + </ol> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="better" id="better">Ajustement des valeurs de qualité</a></h2> + + <p>Parfois httpd modifie les valeurs de qualité par rapport à celles qui + découleraient d'une stricte interprétation de l'algorithme de négociation + de httpd ci-dessus, ceci pour améliorer les résultats de l'algorithme pour + les navigateurs qui envoient des informations incomplètes ou inappropriées. + Certains des navigateurs les plus populaires envoient des informations dans + l'en-tête <code>Accept</code> qui, sans ce traitement, provoqueraient la + sélection d'une variante inappropriée dans de nombreux cas. Quand un + navigateur envoie des informations complètes et correctes ces ajustements + ne sont pas effectués.</p> + +<h3><a name="wildcards" id="wildcards">Types de média et caractères génériques</a></h3> + + <p>L'en-tête de requête <code>Accept:</code> indique les types de média + souhaités. Il peut aussi contenir des types de média avec caractères + génériques, comme "image/*" ou "*/*" où * correspond à n'importe quelle + chaîne de caractères. Ainsi une requête contenant :</p> + +<div class="example"><p><code>Accept: image/*, */*</code></p></div> + + <p>indiquerait que tout type de média est acceptable, avec une préférence + pour les types commençant par "image/". + Certains navigateurs ajoutent par défaut des types de média avec caractères + génériques aux types explicitement nommés qu'ils peuvent gérer. + Par exemple :</p> + +<div class="example"><p><code> + Accept: text/html, text/plain, image/gif, image/jpeg, */* +</code></p></div> + <p>Ceci indique que les types explicitement listés sont préférés, mais + qu'une représentation avec un type différent de ces derniers conviendra + aussi. Les valeurs de qualités explicites, + afin de préciser ce que veut vraiment le navigateur, s'utilisent + comme suit :</p> +<div class="example"><p><code> + Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01 +</code></p></div> + <p>Les types explicites n'ont pas de facteur de qualité, la valeur par + défaut de leur préférence est donc de 1.0 (la plus haute). Le type avec + caractères génériques */* se voit attribuer une préférence basse de 0.01, + si bien que les types autres que ceux explicitement listés ne seront retournés + que s'il n'existe pas de variante correspondant à un type explicitement + listé.</p> + + <p>Si l'en-tête <code>Accept:</code> ne contient <em>pas</em> aucun + facteur de qualité, httpd positionne la valeur de qualité de + "*/*", si present, à 0.01 pour simuler l'effet désiré. Il positionne aussi + la valeur de qualité des types avec caractères génériques au format + "type/*" à 0.02 (ils sont donc préférés à ceux correspondant à "*/*"). Si + un type de média dans l'en-tête <code>Accept:</code> contient un facteur de + qualité, ces valeurs spéciales ne seront <em>pas</em> appliquées, de façon + à ce que les requêtes de navigateurs qui envoient les informations + explicites à prendre en compte fonctionnent comme souhaité.</p> + + +<h3><a name="exceptions" id="exceptions">Exceptions dans la négociation du +langage</a></h3> + + <p>A partir de la version 2.0 de httpd, certaines exceptions ont été + ajoutées à l'algorithme de négociation afin de ménager une issue de secours + quand la négociation ne trouve aucun langage correspondant.</p> + + <p>Quand un client demande une page sur votre serveur, si ce dernier ne + parvient pas à trouver une page dont la langue corresponde à l'en-tête + <code>Accept-language</code> envoyé par le navigateur, il enverra au client + une réponse "Aucune variante acceptable" ou "Plusieurs choix possibles". + Pour éviter ces + messages d'erreur, il est possible de configurer httpd de façon à ce que, + dans ces cas, il ignore l'en-tête <code>Accept-language</code> et fournisse + tout de même un document, même s'il ne correspond pas exactement à la + demande explicite du client. La directive <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code> + peut être utilisée pour éviter ces messages d'erreur et leur substituer une + page dont le langage sera déterminé en fonction du contenu de la directive + <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>.</p> + + <p>Le serveur va aussi essayer d'étendre sa recherche de correspondance aux + sous-ensembles de langages quand aucune correspondance exacte ne peut être + trouvée. Par exemple, si un client demande des documents possédant le + langage <code>en-GB</code>, c'est à dire anglais britannique, le standard + HTTP/1.1 n'autorise normalement pas le serveur à faire correspondre cette + demande à un document dont le langage est simplement <code>en</code>. + (Notez qu'inclure <code>en-GB</code> et non <code>en</code> dans l'en-tête + <code>Accept-Language</code> constitue une quasi-erreur de configuration, + car il est très peu probable qu'un lecteur qui comprend l'anglais + britannique, ne comprenne pas l'anglais en général. Malheureusement, de + nombreux clients ont réellement des configurations par défaut de ce type.) + Cependant, si aucune autre correspondance de langage n'est possible, et que le + serveur est sur le point de retourner une erreur "Aucune variable + acceptable" ou de choisir le langage défini par la directive <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>, le serveur ignorera + la spécification du sous-ensemble de langage et associera la demande en + <code>en-GB</code> à des documents en <code>en</code>. Implicitement, + httpd ajoute le langage parent à la liste de langues acceptés par le + client avec une valeur de qualité très basse. Notez cependant que si le + client demande "en-GB; q=0.9, fr; q=0.8", et le serveur dispose de + documents estampillés "en" et "fr", alors c'est le document "fr" qui sera + retourné, tout ceci dans un souci de compatibilité avec la spécification + HTTP/1.1 et afin de fonctionner efficacement avec les clients + correctement configurés.</p> + + <p>Pour supporter les techniques avancées (comme les cookies ou les chemins + d'URL spéciaux) afin de déterminer le langage préféré de l'utilisateur, le + module <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> reconnaît la + <a href="env.html">variable d'environnement</a> + <code>prefer-language</code> + depuis la version 2.0.47 de httpd. Si elle est définie et contient un + symbole de langage approprié, <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> va essayer + de sélectionner une variante correspondante. S'il n'existe pas de telle + variante, le processus normal de négociation sera lancé.</p> + + <div class="example"><h3>Exemple</h3><pre class="prettyprint lang-config">SetEnvIf Cookie "language=(.+)" prefer-language=$1 +Header append Vary cookie</pre> +</div> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="extensions" id="extensions">Extensions à la négociation de contenu +transparente</a></h2> + +<p>httpd étend le protocole de négociation de contenu transparente (RFC +2295) comme suit. Un nouvel élément <code>{encodage ..}</code> est utilisé dans +les listes de variantes pour marquer celles qui ne sont disponibles qu'avec un +encodage de contenu spécifique. L'implémentation de l'algorithme +RVSA/1.0 (RFC 2296) est étendue à la reconnaissance de variantes encodées dans +la liste, et à leur utilisation en tant que variantes candidates à partir du +moment où leur encodage satisfait au contenu de l'en-tête de requête +<code>Accept-Encoding</code>. L'implémentation RVSA/1.0 n'arrondit pas les +facteurs de qualité calculés à 5 décimales avant d'avoir choisi la meilleure +variante.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="naming" id="naming">Remarques à propos des liens hypertextes et des +conventions de nommage</a></h2> + + <p>Si vous utilisez la négociation de langage, vous avez le choix entre + différentes conventions de nommage, car les fichiers peuvent posséder + plusieurs extensions, et l'ordre dans lequel ces dernières apparaissent + est en général sans rapport (voir la documentation sur le module <a href="mod/mod_mime.html#multipleext">mod_mime</a> + pour plus de détails).</p> + + <p>Un fichier type possède une extension liée au type MIME + (<em>par exemple</em>, <code>html</code>), mais parfois aussi une + extension liée à l'encodage (<em>par exemple</em>, <code>gz</code>), + et bien sûr une extension liée au langage + (<em>par exemple</em>, <code>en</code>) quand plusieurs variantes de + langage sont disponibles pour ce fichier.</p> + + <p>Exemples :</p> + + <ul> + <li>foo.en.html</li> + + <li>foo.html.en</li> + + <li>foo.en.html.gz</li> + </ul> + + <p>Ci-dessous d'autres exemples de noms de fichiers avec des liens + hypertextes valides et invalides :</p> + + <table class="bordered"> + + <tr> + <th>Nom fichier</th> + + <th>lien valide</th> + + <th>Lien invalide</th> + </tr> + + <tr> + <td><em>foo.html.en</em></td> + + <td>foo<br /> + foo.html</td> + + <td>-</td> + </tr> + + <tr> + <td><em>foo.en.html</em></td> + + <td>foo</td> + + <td>foo.html</td> + </tr> + + <tr> + <td><em>foo.html.en.gz</em></td> + + <td>foo<br /> + foo.html</td> + + <td>foo.gz<br /> + foo.html.gz</td> + </tr> + + <tr> + <td><em>foo.en.html.gz</em></td> + + <td>foo</td> + + <td>foo.html<br /> + foo.html.gz<br /> + foo.gz</td> + </tr> + + <tr> + <td><em>foo.gz.html.en</em></td> + + <td>foo<br /> + foo.gz<br /> + foo.gz.html</td> + + <td>foo.html</td> + </tr> + + <tr> + <td><em>foo.html.gz.en</em></td> + + <td>foo<br /> + foo.html<br /> + foo.html.gz</td> + + <td>foo.gz</td> + </tr> + </table> + + <p>En regardant la table ci-dessus, vous remarquerez qu'il est toujours + possible d'utiliser le nom de fichier sans extension dans un lien + (<em>par exemple</em>, <code>foo</code>). L'avantage est de pouvoir + dissimuler le type réel du fichier associé à un document et de pouvoir + le modifier + ultérieurement, <em>par exemple</em>, de <code>html</code> à + <code>shtml</code> ou <code>cgi</code> sans avoir à + mettre à jour aucun lien.</p> + + <p>Si vous souhaitez continuer à utiliser un type MIME dans vos liens + (<em>par exemple </em> <code>foo.html</code>), l'extension liée au langage + (y compris une extension liée à l'encodage s'il en existe une) + doit se trouver à droite de l'extension liée au type MIME + (<em>par exemple</em>, <code>foo.html.en</code>).</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="caching" id="caching">Remarque sur la mise en cache</a></h2> + + <p>Quand un cache stocke une représentation, il l'associe avec l'URL de la + requête. Lorsque cette URL est à nouveau demandée, le cache peut utiliser + la représentation stockée. Cependant, si la ressource est négociable au + niveau du serveur, il se peut que seule la première variante demandée soit + mise en cache et de ce fait, la correspondance positive du cache peut + entraîner une réponse inappropriée. Pour + éviter ceci, httpd marque par + défaut toutes les réponses qui sont retournées après une négociation de + contenu comme "non-cachables" par les clients HTTP/1.0. httpd supporte + aussi les fonctionnalités du protocole HTTP/1.1 afin de permettre la mise + en cache des réponses négociées.</p> + + <p>Pour les requêtes en provenance d'un client compatible HTTP/1.0 + (un navigateur ou un cache), la directive <code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code> peut être utilisée + pour permettre la mise en cache des réponses qui ont fait l'objet d'une + négociation. Cette directive peut intervenir dans la configuration au + niveau du serveur ou de l'hôte virtuel, et n'accepte aucun argument. Elle + n'a aucun effet sur les requêtes en provenance de clients HTTP/1.1.</p> + + <p>Pour les clients HTTP/1.1, httpd envoie un en-tête de réponse HTTP + <code>Vary</code> afin d'indiquer les dimensions de la négociation pour + cette réponse. Les caches peuvent + utiliser cette information afin de déterminer + si une requête peut être servie à partir de la copie locale. Pour inciter + un cache à utiliser la copie locale sans tenir compte des dimensions de la + négociation, définissez la + <a href="env.html#special">variable d'environnement</a> + <code>force-no-vary</code>.</p> + +</div></div> +<div class="bottomlang"> +<p><span>Langues Disponibles: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="./fr/content-negotiation.html" title="Français"> fr </a> | +<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Commentaires</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/content-negotiation.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Autorisé sous <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="./mod/">Modules</a> | <a href="./mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">Glossaire</a> | <a href="./sitemap.html">Plan du site</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/content-negotiation.html.ja.utf8 b/docs/manual/content-negotiation.html.ja.utf8 new file mode 100644 index 0000000..14bc15c --- /dev/null +++ b/docs/manual/content-negotiation.html.ja.utf8 @@ -0,0 +1,752 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>コンテントネゴシエーション - Apache HTTP サーバ バージョン 2.4</title> +<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" /> +<script src="./style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="./images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="./mod/">モジュール</a> | <a href="./mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">用語</a> | <a href="./sitemap.html">サイトマップ</a></p> +<p class="apache">Apache HTTP サーバ バージョン 2.4</p> +<img alt="" src="./images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="./">バージョン 2.4</a></div><div id="page-content"><div id="preamble"><h1>コンテントネゴシエーション</h1> +<div class="toplang"> +<p><span>翻訳済み言語: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="./ja/content-negotiation.html" title="Japanese"> ja </a> | +<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> +<div class="outofdate">この日本語訳はすでに古くなっている + 可能性があります。 + 最近更新された内容を見るには英語版をご覧下さい。 + </div> + + + <p>Apache は HTTP/1.1 の規格に記述されているコンテントネゴシエーションを + サポートしています。 + ブラウザにより提供されたメディアタイプ、 + 言語、文字セット、エンコーディングの優先傾向に基づいて、 + 最適なリソースの表現を選択できます。 + また、不完全なネゴシエーション情報を送ってくるブラウザからのリクエストを + もっと賢く取り扱えるよう、いくつか機能も実装してあります。</p> + + <p>コンテントネゴシエーションは + <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> + モジュールによって提供されていて、デフォルトで組み込まれています。</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#about">コンテントネゴシエーションについて</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#negotiation">Apache におけるネゴシエーション</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#methods">ネゴシエーション方法</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#better">品質の値を変える</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#extensions">Transparent Content Negotiation +の拡張</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#naming">リンクと名前の変換に関する注意点</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#caching">キャッシュに関する注意事項</a></li> +</ul><h3>参照</h3><ul class="seealso"><li><a href="#comments_section">コメント</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="about" id="about">コンテントネゴシエーションについて</a></h2> + + <p>リソースは、幾つか異なった表現で利用できる場合があります。 + 例えば、異なる言語や異なるメディアタイプ、 + またはそれらの組み合わせで利用できるかも知れません。 + もっとも適した選択をする方法の一つには、インデックスページを + ユーザに見せて、ユーザに選んでもらう方法があります。 + しかし、サーバが自動的に選ぶことができる場合が多くあります。 + これは、ブラウザがリクエスト毎に、 + どの表現を嗜好するかという情報を送ることで動作しています。 + 例えばブラウザは、可能ならフランス語で情報を見たい、 + 不可能ならその代わりに英語でもよいと、 + 自分の嗜好を知らせることができます。 + ブラウザはリクエストのヘッダで自分の優先傾向を知らせます。 + フランス語のみの表現を要求する場合は、ブラウザは次を送ります。</p> + +<div class="example"><p><code>Accept-Language: fr</code></p></div> + + <p>この優先傾向は、選択可能な表現が存在して、 + 言語によって様々な表現がある場合にのみ適用される + ということに注意してください。</p> + + <p>もっと複雑なリクエストの例を挙げましょう。 + このブラウザはフランス語と英語を受け付ける、しかしフランス語を好む、 + そして様々なメディアタイプを受け付けるが、 + プレインテキストや他のタイプよりは HTML を好む、 + 他のメディアタイプよりは GIF や JPEG を好む、しかし最終手段として + 他のメディアタイプも受け付ける、と設定されています。</p> + +<div class="example"><p><code> + Accept-Language: fr; q=1.0, en; q=0.5<br /> + Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1 +</code></p></div> + + <p>Apache は HTTP/1.1 規格で定義されている 'server + driven' コンテントネゴシエーションをサポートしています。 + <code>Accept</code>, <code>Accept-Language</code>, + <code>Accept-Charset</code>, <code>Accept-Encoding</code> + リクエストヘッダを完全にサポートしています。Apache は + 'transparent' コンテントネゴシエーションもサポートしていますが、 + これは RFC 2295 と RFC 2296 で定義されている試験的な + ネゴシエーションプロトコルです。 + これらの RFCで定義されている 'feature negotiation' + はサポートしていません。</p> + + <p><strong>リソース</strong>とは URI + で特定される概念上のもののことです (RFC 2396)。 Apache + のような HTTP サーバは、その名前空間の中での + リソースの<strong>表現</strong>へのアクセスを提供します。 + それぞれの表現は + 定義されたメディアタイプ、文字セット、エンコーディング等の + 付属した、バイト列の形式です。 + それぞれのリソースはある時点で 0 個、1 個、それ以上の表現と + 関連付けられる可能性があります。複数の表現が利用できる場合は、 + リソースは<strong>ネゴシエーション可能である</strong>とされ、 + 個々の表現は <strong>variant</strong> と呼ばれます。 + ネゴシエーション可能なリソースの variant が異なる、 + その状態を指して、 + ネゴシエーションの<strong>次元</strong>と呼びます。</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="negotiation" id="negotiation">Apache におけるネゴシエーション</a></h2> + + <p>リソースをネゴシエーションするためには、 + サーバは variant それぞれについての情報を知っておく必要があります。 + これは以下の二つの方法のどちらかで行われます。</p> + + <ul> + <li>タイプマップ + (<em>すなわち</em> <code>*.var</code> ファイル) + を使う方法。 これは variant + を明示的に挙げているファイルを指定します。</li> + + <li>'Multiviews' + を使って、サーバが暗黙の内にファイル名にパターン照合を + 行なってその結果から選択する方法。</li> + </ul> + + <h3><a name="type-map" id="type-map">type-map ファイルを使う</a></h3> + + <p>タイプマップは <code>type-map</code> ハンドラ + (もしくは、古い Apache + の設定と下位互換である <a class="glossarylink" href="./glossary.html#mime-type" title="用語集を参照">MIME タイプ</a> + <code>application/x-type-map</code>) + に関連付けられたドキュメントです。 + この機能を使うためには、あるファイルの拡張子を + <code>type-map</code> + として定義するようなハンドラを、 + 設定ファイル中に置く必要があることに注意してください。 + これは</p> + +<div class="example"><p><code>AddHandler type-map .var</code></p></div> + + <p>をサーバ設定ファイル中に書くことが一番良い方法です。</p> + + <p>タイプマップファイルは記述するリソースと同じ名前を持っていて、 + 利用可能な variant それぞれのエントリを持っている必要があります。 + そして、このエントリは連続した HTTP のヘッダ行で構成されます。 + 異なる variant のためのエントリは空行で区切られています。 + エントリ中に空行が複数あってはいけません。 + 習慣的には、マップファイルは全体を結合したもののエントリから始まります + (しかしこれは必須ではなく、あったとしても無視されるものです)。 + 次に例を示します。このファイルはリソース <code>foo</code> + を記述しているので、<code>foo.var</code> という名前になります。</p> + +<div class="example"><p><code> + URI: foo<br /> +<br /> + URI: foo.en.html<br /> + Content-type: text/html<br /> + Content-language: en<br /> +<br /> + URI: foo.fr.de.html<br /> + Content-type: text/html;charset=iso-8859-2<br /> + Content-language: fr, de<br /> +</code></p></div> + <p>たとえ MultiViews を使用するようになっていたとしても、 + ファイル名の拡張子よりタイプマップの方が優先権を持つということにも + 注意してください。 + variant の品質が違うときは、この画像のように (JPEG, GIF, ASCII + アートがあります) メディアタイプの "qs" + パラメータで指定されます。</p> + +<div class="example"><p><code> + URI: foo<br /> +<br /> + URI: foo.jpeg<br /> + Content-type: image/jpeg; qs=0.8<br /> +<br /> + URI: foo.gif<br /> + Content-type: image/gif; qs=0.5<br /> +<br /> + URI: foo.txt<br /> + Content-type: text/plain; qs=0.01<br /> +</code></p></div> + + <p>qs 値の範囲は 0.000 から 1.000 です。qs 値が + 0.000 の variant は決して + 選択されないことに注意してください。'qs' 値のない variant + は qs 値 1.0 を 与えられます。qs + パラメータはクライアントの能力に関係無く、他の variant と + 比較したときの variant + の相対的な「品質」を示します。 + 例えば、写真を表現しようとしているときは JPEG + ファイルの方が普通は ASCII + ファイルよりも高い品質になります。しかし、リソースが元々 + ASCII アートで表現されているときは、ASCII ファイルの + 方が JPEG ファイルよりも高い品質になります。このように、qs + は 表現されるリソースの性質によって variant + 毎に特有の値を取ります。</p> + + <p>認識されるヘッダの一覧は + <a href="mod/mod_negotiation.html#typemaps">mod_negotiation</a> + ドキュメントにあります。</p> + + +<h3><a name="multiviews" id="multiviews">Multiviews</a></h3> + + <p><code>MultiViews</code> はディレクトリ毎のオプションで、 + <code>httpd.conf</code>ファイルの + <code class="directive"><a href="./mod/core.html#directory"><Directory></a></code>, + <code class="directive"><a href="./mod/core.html#location"><Location></a></code>, + <code class="directive"><a href="./mod/core.html#files"><Files></a></code> + セクション中や、(<code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> + が適切な値に 設定されていると) <code>.htaccess</code> + ファイルで <code class="directive"><a href="./mod/core.html#options">Options</a></code> + ディレクティブによって設定することができます。 + <code>Options All</code> は + <code>MultiViews</code> + をセットしないことに注意してください。明示的に + その名前を書く必要があります。</p> + + <p><code>MultiViews</code> の効果は以下のようになります: + サーバが <code>/some/dir/foo</code> + へのリクエストを受け取り、<code>/some/dir</code> で + <code>MultiViews</code> が有効であって、 + <code>/some/dir/foo</code> が存在<em>しない</em>場合、 + サーバはディレクトリを読んで <code>foo.*</code> + にあてはまる全てのファイルを探し、 + 事実上それらのファイルをマップするタイプマップを作ります。 + そのとき、メディアタイプとコンテントエンコーディングは、そのファイル名を + 直接指定したときと同じものが割り当てられます。 + それからクライアントの要求に一番合うものを選びます。</p> + + <p>サーバがディレクトリの索引を作ろうとしている場合、 + <code>MultiViews</code> + は <code class="directive"><a href="./mod/mod_dir.html#directoryindex">DirectoryIndex</a></code> + ディレクティブで指定されたファイルを探す過程にも + 適用されます。設定ファイルに</p> +<div class="example"><p><code>DirectoryIndex index</code></p></div> + <p>が書かれていて、<code>index.html</code> と + <code>index.html3</code> が + 両方存在していると、サーバはその中からどちらかを適当に選びます。 + もしその両方が存在せずに <code>index.cgi</code> + が存在していると、 サーバはそれを実行します。</p> + + <p>もしディレクトリを読んでいる際に、 + 文字セット、コンテントタイプ、言語、エンコーディングを + 指定するための <code>mod_mime</code> + で認識できる拡張子を持たないファイルが見つかると、結果は + <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code> + ディレクティブの設定に依存します。このディレクティブは + ハンドラ、フィルタ、他のファイル拡張子タイプのどれが + MultiViews ネゴシエーションで使用できるかを決定します。</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="methods" id="methods">ネゴシエーション方法</a></h2> + + <p>Apache はリソースの variant の一覧を、タイプマップファイルか + ディレクトリ内のファイル名からかで取得した後、 + 「最適な」 variant を決定するために二つの方法の + どちらかを起動します。 + Apache のコンテントネゴシエーションの機能を使うために、 + どのようにしてこの調停が行われるか詳細を知る必要はありません。 + しかしながら、この文書の残りでは関心のある人のために、 + 使用されている方法について説明しています。</p> + + <p>ネゴシエーション方法は二つあります。</p> + + <ol> + <li>通常は <strong>Apache のアルゴリズムを用いた Server + driven negotiation</strong> が使用されます。Apache + のアルゴリズムは後に詳細に説明されています。 + このアルゴリズムが使用された場合、Apache + はより良い結果になるように、特定の次元において品質の値を + 「変える」ことができます。Apache + が品質の値を変える方法は後で詳細に説明されています。</li> + + <li>RFC 2295 + で定義されている機構を用いてブラウザが特に指定した場合、 + <strong>transparent content negotiation</strong> + が使用されます。このネゴシエーション方法では、「最適な」 + variant の決定をブラウザが完全に制御することができます。 + ですから、結果はブラウザが使用しているアルゴリズムに依存します。 + Transparent negotiation の処理の過程で、ブラウザは RFC 2296 + で 定義されている 'remote variant selection algorithm' + を実行するように頼むことができます。</li> + </ol> + +<h3><a name="dimensions" id="dimensions">ネゴシエーションの次元</a></h3> + + <table> + + <tr valign="top"> + <th>次元</th> + + <th>説明</th> + </tr> + + <tr valign="top"> + <td>メディアタイプ</td> + + <td>ブラウザは <code>Accept</code> + ヘッダフィールドで優先傾向を指定します。 + アイテムそれぞれは、関連した品質数値を持つことができます。 + variant の説明も品質数値を持つことができます + ("qs" パラメータをご覧下さい)。</td> + </tr> + + <tr valign="top"> + <td>言語</td> + + <td>ブラウザは <code>Accept-Language</code> + ヘッダフィールドで優先傾向を指定します。 + 要素それぞれに品質数値を持たせることができます。 + variants は 0 か 1 つかそれ以上の言語と + 関連づけることができます。</td> + </tr> + + <tr valign="top"> + <td>エンコーディング</td> + + <td>ブラウザは <code>Accept-Encoding</code> + ヘッダフィールドで優先傾向を指定します。 + 要素それぞれに品質数値を持たせることができます。</td> + </tr> + + <tr valign="top"> + <td>文字セット</td> + + <td>ブラウザは <code>Accept-Charset</code> + ヘッダフィールドで優先傾向を指定します。 + 要素それぞれに品質数値を持たせることができます。 + variant はメディアタイプのパラメータとして文字セットを + 指定することもできます。</td> + </tr> + </table> + + +<h3><a name="algorithm" id="algorithm">Apache ネゴシエーションアルゴリズム</a></h3> + + <p>ブラウザに返す「最適な」variant を (もしあれば) 選択するように + Apache は次のアルゴリズムを使うことができます。 + このアルゴリズムを設定により変更することはできません。 + 次のように動作します:</p> + + <ol> + <li>まずはじめに、ネゴシエーションの次元それぞれについて適切な + <em>Accept*</em> ヘッダフィールドを調べ、 + variant それぞれに品質を割り当てます。 + もしある次元の <em>Accept*</em> ヘッダでその variant + が許容できないことが示されていれば、それを削除します。 + variant が一つも残っていなければ、ステップ 4 に行きます。</li> + + <li> + 消去法で「最適な」 variant を選びます。 + 次のテストが順番に適用されます。 + テストで選択されなかった variant は削除されていきます。 + テスト後 variant が一つだけ残っていれば、それを最適なものとして + ステップ 3 に進みます。 + 複数 variant が残っていれば、次のテストに進みます。 + + <ol> + <li>variant のメディアタイプの品質数値と <code>Accept</code> + ヘッダの品質数値との積を計算して、最高値の variant + を選びます。</li> + + <li>言語品質数値が最高の variant を選びます。</li> + + <li>(もしあれば) <code>Accept-Language</code> ヘッダの言語順か、 + (もしあれば) + <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code> + ディレクティブの言語順で最適な言語の variant を選びます。</li> + + <li>最高「レベル」のメディアパラメータ + (text/html メディアタイプのバージョンを与えるために使われます) + を持つ variant を選びます。</li> + + <li><code>Accept-Charset</code> ヘッダ行で与えられている最高の文字セット + メディアパラメータを持つ variant を選びます。 + 明示的に除外されていない限り、ISO-8859-1 + が許容されるようになっています。 + <code>text/*</code> メディアタイプであるけれども + 特定の文字セットに明示的に関連づけられているわけではない + variant は ISO-8859-1 であると仮定されます。</li> + + <li>ISO-8859-1 <em>ではない</em>文字セットメディアパラメータと + 関連づけられている variant を選びます。 + そのような variant がない場合は、代わりに全ての + variant を選びます。</li> + + <li>最適なエンコーディングの variant を選びます。 + もし user-agent が許容するエンコーディングがあれば、 + その variant のみを選びます。 + そうではなく、もしエンコードされたものとそうでない + variant が混ざって存在していたらエンコードされていない + variant のみを選びます。 + variant が全部エンコードされているか + variant が全部エンコードされていないという場合は、 + 全ての variant を選びます。</li> + + <li>内容の最も短い variant を選びます。</li> + + <li>残っている variant の最初のものを選びます。 + タイプマップファイルの最初にリストされているか、 + variant がディレクトリから最初に読み込まれる時に + ASCII順でソートしてファイル名が先頭になったか、のどちらかです。</li> + </ol> + </li> + + <li>アルゴリズムを使って一つの「最適な」variant を選びましたので、 + それを応答として返します。ネゴシエーションの次元を指定するために + HTTP レスポンスヘッダ <code>Vary</code> が設定されます + (リソースのキャッシュをする時に、 + ブラウザやキャッシュはこの情報を使うことができます)。 + 以上で終わり。</li> + + <li>ここに来たということは、variant が一つも選択されなかった + (ブラウザが許容するものがなかったため) ということです。 + 406 ステータス ("No Acceptable representation" を意味する) + が、利用可能な variant のリストのついた HTML + ドキュメントとともに返されます。 + 相違の次元を示す HTTP <code>Vary</code> ヘッダも設定されます。</li> + </ol> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="better" id="better">品質の値を変える</a></h2> + + <p>上記の Apache ネゴシエーションアルゴリズムの厳格な解釈で + 得られるであろう値から、Apache は品質数値を時々変えます。 + これは、このアルゴリズムで完全ではない、あるいは正確でない情報を送る + ブラウザ向けによりよい結果を得るために行われます。 + かなりポピュラーなブラウザで、もしないと間違った variant + を選択する結果になってしまうような <code>Accept</code> + ヘッダ情報を送るものもあります。 + ブラウザが完全で正しい情報を送っていれば、 + この数値変化は適用されません。</p> + +<h3><a name="wildcards" id="wildcards">メディアタイプとワイルドカード</a></h3> + + <p><code>Accept:</code> リクエストヘッダはメディアタイプの優先傾向を指定します。 + これはまた、"image/*" や "*/*" + といった「ワイルドカード」メディアタイプを含むことができます。 + ここで * は任意の文字列にマッチします。 + ですから、次の:</p> + +<div class="example"><p><code>Accept: image/*, */*</code></p></div> + + <p>を含むリクエストは、"image/" ではじまるタイプ全てが許容できる、 + そして他のどんなタイプも許容できる + (この場合はじめの "image/*" は冗長になります) + ことを示します。 + 扱うことのできる明示的なタイプに加えて、機械的に + ワイルドカードを送るブラウザもあります。例えば:</p> + +<div class="example"><p><code> + Accept: text/html, text/plain, image/gif, image/jpeg, */* +</code></p></div> + <p>こうすることの狙いは、明示的にリストしているタイプが優先されるけれども、 + 異なる表現が利用可能であればそれでも良い、ということです。 + しかしながら、上の基本的なアルゴリズムでは、 + */* ワイルドカードは他の全てのタイプと全く同等なので優先されません。 + ブラウザは */* にもっと低い品質 (優先) + 値を付けてリクエストを送るべきなのです。例えば:</p> +<div class="example"><p><code> + Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01 +</code></p></div> + <p>明示的なタイプには品質数値が付けられていませんので、 + デフォルトの 1.0 (最高値) の優先になります。 + ワイルドカード */* は低い優先度 0.01 を与えられているので、 + 明示的にリストされているタイプに合致する variant がない場合にのみ、 + 他のタイプが返されます。</p> + + <p>もし <code>Accept:</code> ヘッダが q 値を全く含んで<em>いなければ</em>、 + 望みの挙動をするために、 + Apache は "*/*" があれば 0.01 の q 値を設定します。 + また、"type/*" の形のワイルドカードには 0.02 の q 値を設定します + (ですからこれらは "*/*" のマッチよりも優先されます)。 + もし <code>Accept:</code> ヘッダ中のメディアタイプのどれかが q + 値を含んでいれば、これらの特殊な値は適応<em>されず</em>、 + 正しい情報を送るブラウザからのリクエストは期待通りに + 動作するようになります。</p> + + +<h3><a name="exceptions" id="exceptions">言語ネゴシエーションの例外処理</a></h3> + + <p>Apache 2.0 では新たに、言語ネゴシエーションが適合するものを + 見つけるのに失敗した時に、優雅にフォールバックできるような + ネゴシエーションアルゴリズムが幾つか追加されました。</p> + + <p>サーバのページをクライアントがリクエストしたけれども、 + ブラウザの送ってきた <code>Accept-Language</code> に合致するページが一つも + 見つからなかった場合に、サーバは "No Acceptable Variant" + か "Multiple Choices" レスポンスをクライアントに返します。 + これらのエラーメッセージを返さないように、 + このような場合には Apache が <code>Accept-Language</code> を無視して、 + クライアントのリクエストに明示的には合致しないドキュメントを + 提供するように設定できます。 + <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code> + ディレクティブは、これらのエラーの一つか両方をオーバーライドするために + 使用できて、 + <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code> + ディレクティブの内容を使ってサーバの判断を代行するようにできます。</p> + + <p>サーバは他に適合するものが見つからなければ、 + 言語サブセットで適合するものを試そうともします。 + 例えばクライアントが英国英語である <code>en-GB</code> 言語で + ドキュメントをリクエストした場合、サーバは HTTP/1.1 + 規格では、単に <code>en</code> とマークされているドキュメントを + マッチするものとすることは通常は許されていません。 + (英国英語は理解できるけど一般的な英語は理解できないという読み手は + 考えられないので、Accept-Language ヘッダで <code>en-GB</code> + を含んで <code>en</code> を含まないのはほぼ確実に設定の間違いである、 + ということに注意してください。 + ですが不幸なことに、多くのクライアントではデフォルトで + このような設定になっています。) + しかしながら、他の言語にはマッチせず、"No Acceptable Variants" + エラーを返したり、 + <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code> + にフォールバックしようとしているときは、 + サブセット指定を無視して、<code>en-GB</code> を <code>en</code> + にマッチします。 + Apache はクライアントの許容言語リストに暗黙に + 非常に低い品質値の親言語を加えることになります。 + しかし、クライアントが "en-GB; q=0.9, fr; q=0.8" とリクエストして、 + サーバが "en" と "fr" と設計されたドキュメントを持っている場合は、 + "fr" ドキュメントが返されることに注意してください。 + このような処理は、HTTP 1.1 規格との整合性を維持して、 + 適切に設定されたクライアントともきちんと動作するために + 必要です。</p> + + <p>より高度なテクニック (Cookie や特殊な URL パス等) + においてもユーザの言語選択をサポートするため、 + Apache 2.0.47 からは、<code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> + が<a href="env.html">環境変数</a> <code>prefer-language</code> + を認識するようになりました。 + この変数が存在して、適切な言語タグが代入されているのであれば、 + <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> は合致する variant + を選択しようとします。合致するものが無ければ、 + 通常のネゴシエーション手順が適用されます。</p> + + <div class="example"><h3>Example</h3><p><code> + SetEnvIf Cookie "language=(.+)" prefer-language=$1<br /> + Header append Vary cookie + </code></p></div> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="extensions" id="extensions">Transparent Content Negotiation +の拡張</a></h2> + +<p>Apache は transparent content negotiation プロトコル +(RFC 2295) を次のように拡張しています。 +特定のコンテントエンコーディングのみが利用可能である variant +に印を付けるために、新たに <code>{encoding ..}</code> +要素を variant リスト中に使っています。 +リスト中のエンコードされた variant を認識し、 +<code>Accept-Encoding</code> リクエストヘッダに従って許容される +エンコードをもった variant は、どれでも候補 variant +として使用するように、 +RVSA/1.0 アルゴリズム (RFC 2296) の実装が拡張されました。 +RVSA/1.0 の実装では、最適な variant が見つかるまで、 +計算した品質数値は小数点以下 5 桁まで丸めません。</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="naming" id="naming">リンクと名前の変換に関する注意点</a></h2> + + <p>言語ネゴシエーションを使っている場合は、 + ファイルが一つ以上の拡張子を持てて、 + 拡張子の順番は通常は考慮されない + (詳細は <a href="mod/mod_mime.html#multipleext">mod_mime</a> + を参照) ので、 + 幾つかの異なる名前の変換を選べることになります。</p> + + <p>典型的なファイルでは、MIME タイプ拡張子 (<em>例えば</em> + <code>html</code>) を持っていて、エンコーディング拡張子 + (<em>例えば</em> <code>gz</code>) を持っているかもしれなくて、 + このファイルに異なる言語 variant を用意していれば、 + もちろん言語拡張子 (<em>例えば</em> <code>en</code>) + を持っているでしょう。</p> + + <p>例:</p> + + <ul> + <li>foo.en.html</li> + + <li>foo.html.en</li> + + <li>foo.en.html.gz</li> + </ul> + + <p>ファイル名と、それに対して使えるリンクと使えないリンクの例です:</p> + + <table class="bordered"> + + <tr> + <th>ファイル名</th> + + <th>使えるリンク</th> + + <th>使えないリンク</th> + </tr> + + <tr> + <td><em>foo.html.en</em></td> + + <td>foo<br /> + foo.html</td> + + <td>-</td> + </tr> + + <tr> + <td><em>foo.en.html</em></td> + + <td>foo</td> + + <td>foo.html</td> + </tr> + + <tr> + <td><em>foo.html.en.gz</em></td> + + <td>foo<br /> + foo.html</td> + + <td>foo.gz<br /> + foo.html.gz</td> + </tr> + + <tr> + <td><em>foo.en.html.gz</em></td> + + <td>foo</td> + + <td>foo.html<br /> + foo.html.gz<br /> + foo.gz</td> + </tr> + + <tr> + <td><em>foo.gz.html.en</em></td> + + <td>foo<br /> + foo.gz<br /> + foo.gz.html</td> + + <td>foo.html</td> + </tr> + + <tr> + <td><em>foo.html.gz.en</em></td> + + <td>foo<br /> + foo.html<br /> + foo.html.gz</td> + + <td>foo.gz</td> + </tr> + </table> + + <p>上の表を見て、拡張子なしのリンク (<em>例えば</em> <code>foo</code>) + がいつでも使えることに気が付くでしょう。 + この利点は、ドキュメントとして応答するファイルの + 実際のファイルタイプを隠蔽して、リンクの参照を変更することなく + 後からファイルを変更できる、 + <em>例えば</em> <code>html</code> から <code>shtml</code> + に、あるいは <code>cgi</code> に変更できる点です。</p> + + <p>リンクに MIME タイプを使い続けたい (<em>例えば</em> + <code>foo.html</code>)時は、言語拡張子は + (エンコーディング拡張子もあればそれも含めて) + MIME タイプ拡張子の右側になければなりません + (<em>例えば</em> <code>foo.html.en</code>)。</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="caching" id="caching">キャッシュに関する注意事項</a></h2> + + <p>キャッシュが一つの表現を保存しているときは、 + リクエスト URL と関連づけられています。 + 次にその URL がリクエストされた時に、キャッシュは + 保存されている表現を使用できます。しかし、 + リソースがサーバでネゴシエーション可能であれば、 + 最初のリクエストでキャッシュされて続くキャッシュヒットでは + 間違った応答を返してしまうということになりかねません。 + これを防ぐために、Apache はコンテントネゴシエーションの + 後に返された応答全てに、HTTP/1.0 クライアントでは + キャッシュ不可能の印をつけます。 + また、ネゴシエーションされた応答のキャッシュを可能にする + HTTP/1.1 プロトコルの機能も Apache はサポートします。</p> + + <p>HTTP/1.0 準拠のクライアントからのリクエストに対しては、 + (ブラウザであろうとキャッシュであろうと) + ネゴシエーションを受けた応答のキャッシュを許すために、 + <code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code> + ディレクティブを使用できます。 + このディレクティブは、サーバ設定ファイルやバーチャルホストに書くことができ、 + 引数をとりません。 + HTTP/1.1 クライアントからのリクエストには効力を持ちません。</p> + + <p>HTTP/1.1 クライアントに対しては、レスポンスのネゴシエーション次元 + を示すために <code>Vary</code> HTTP レスポンスヘッダを送ります。 + キャッシュは、これを使って後続のリクエストに対してローカルコピーで応答できるか + どうかを決定できます。 + ネゴシエーション次元とは関係なしにローカルコピーの使用を優先するようにするには、 + <code>force-no-vary</code> <a href="env.html#special">環境変数</a>を + 設定します。</p> + +</div></div> +<div class="bottomlang"> +<p><span>翻訳済み言語: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="./ja/content-negotiation.html" title="Japanese"> ja </a> | +<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">コメント</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/content-negotiation.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p> +<p class="menu"><a href="./mod/">モジュール</a> | <a href="./mod/directives.html">ディレクティブ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html">用語</a> | <a href="./sitemap.html">サイトマップ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/content-negotiation.html.ko.euc-kr b/docs/manual/content-negotiation.html.ko.euc-kr new file mode 100644 index 0000000..f7e57dd --- /dev/null +++ b/docs/manual/content-negotiation.html.ko.euc-kr @@ -0,0 +1,632 @@ +<?xml version="1.0" encoding="EUC-KR"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko"><head> +<meta content="text/html; charset=EUC-KR" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title> (Content Negotiation) - Apache HTTP Server Version 2.4</title> +<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" /> +<script src="./style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="./images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="./mod/"></a> | <a href="./mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html"></a> | <a href="./sitemap.html">Ʈ</a></p> +<p class="apache">Apache HTTP Server Version 2.4</p> +<img alt="" src="./images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="./">Version 2.4</a></div><div id="page-content"><div id="preamble"><h1> (Content Negotiation)</h1> +<div class="toplang"> +<p><span> : </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="./ko/content-negotiation.html" title="Korean"> ko </a> | +<a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div> +<div class="outofdate"> ֽ ƴմϴ. + ֱٿ ϼ.</div> + + + <p>ġ HTTP/1.1 Ծ (content + negotiation) Ѵ. media type, , , + ڵ ȣ ڿ + ǥ Ѵ. ҿ + û óϴ ɵ ִ.</p> + + <p>⺻ ϵǴ <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> + Ѵ.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#about"> </a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#negotiation">ġ </a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#methods"></a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#better">ǰ ϱ</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#extensions">ڿ(transparent) Ȯ</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#naming">۸ũ ̸Ģ Ͽ</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#caching">ij Ͽ</a></li> +</ul><h3></h3><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="about" id="about"> </a></h2> + + <p>ڿ ٸ ǥ ִ. , ٸ + ٸ media type Ȥ ΰ ٸ ǥ + ִ. ǥ ϴ Ѱ ڿ + ְ ϰ ϴ ̴. + ڵ ϴ ͵ ϴ. ̴ û + Ϻη ȣϴ ǥ + ϴ. , Ҿ, + ٸ ʹٰ ˷ ִ. + û ȣ Ÿ. Ҿε ǥ + ûѴٸ .</p> + +<div class="example"><p><code>Accept-Language: fr</code></p></div> + + <p>̷ ȣ ǥ ٸ 쿡 ȴ.</p> + + <p> û Ҿ + , Ҿ ȣϰ, media type + , Ϲ ؽƮ ٴ HTML, ٸ media type ٴ + GIF JPEG ȣѴٰ ˷ش.</p> + +<div class="example"><p><code> + Accept-Language: fr; q=1.0, en; q=0.5<br /> + Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; q=0.6, image/*; q=0.5, */*; q=0.1 +</code></p></div> + + <p>ġ HTTP/1.1 Ծ ǵ ' ֵ(server driven)' + Ѵ. ġ <code>Accept</code>, + <code>Accept-Language</code>, <code>Accept-Charset</code>, + <code>Accept-Encoding</code> û Ѵ. + , ġ RFC 2295 RFC 2296 ǵ + 'ڿ(transparent)' û Ѵ. + RFC ǵ ' (feature negotiation)' + ʴ´.</p> + + <p><strong>ڿ(resource)</strong> (RFC 2396) URI ϴ + . ġ ڿ + <strong>ǥ(representations)</strong> Ѵ. ǥ + media type, , ڵ Ʈ + ִ. ڿ ǥ (δ ִ) ȴ. + ڿ ǥ ִٸ ڿ + <strong>ϴٰ(negotiable)</strong> θ, ̶ + ǥ <strong>(variant)</strong>̶ Ѵ. + ڿ + <strong>(dimension)</strong> Ѵ.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="negotiation" id="negotiation">ġ </a></h2> + + <p>ڿ ϱ ʿϴ. + ΰ ϳ ´:</p> + + <ul> + <li> ϵ type map (<em> + </em>, <code>*.var</code> ) ϰų,</li> + + <li> ʾƵ ϸ Ģ ãƼ + ϴ 'MultiViews' Ѵ.</li> + </ul> + + <h3><a name="type-map" id="type-map">type-map ϱ</a></h3> + + <p>type map <code>type-map</code>̶ ڵ鷯 + (Ȥ ġ ȣȯ MIME type + <code>application/x-type-map</code>) . + Ϸ <code>type-map</code> ڵ鷯 + Ȯڸ ؾ Ѵ. Ͽ + ϴ .</p> + +<div class="example"><p><code>AddHandler type-map .var</code></p></div> + + <p>Type map شϴ ڿ ̸ ƾ ϰ, + ־ Ѵ. HTTP + ٷ ȴ. ٷ + Ѵ. ȿ . (̷ + ʿ䰡 , ־ ) + ִ map ϴ ̴. + map . ̸ <code>foo.var</code>, + <code>foo</code> ڿ Ѵ.</p> + +<div class="example"><p><code> + URI: foo<br /> +<br /> + URI: foo.en.html<br /> + Content-type: text/html<br /> + Content-language: en<br /> +<br /> + URI: foo.fr.de.html<br /> + Content-type: text/html;charset=iso-8859-2<br /> + Content-language: fr, de<br /> +</code></p></div> + <p>typemap ϸ Ȯ , Multiviews + Ͽ, 켱 ϶. ٸ ǰ + ٸ, (JPEG, GIF, ASCII-art شϴ) + media type "qs" Ķͷ ǰ(source quality) ǥ + ִ:</p> + +<div class="example"><p><code> + URI: foo<br /> +<br /> + URI: foo.jpeg<br /> + Content-type: image/jpeg; qs=0.8<br /> +<br /> + URI: foo.gif<br /> + Content-type: image/gif; qs=0.5<br /> +<br /> + URI: foo.txt<br /> + Content-type: text/plain; qs=0.01<br /> +</code></p></div> + + <p>qs 0.000 1.000 ̴. qs 0.000 + õ ϶. 'qs' 1.0 + ȴ. qs Ŭ̾Ʈ ɷ° ٸ + Ͽ 'ǰ' Ÿ. , + Ÿ JPEG ASCII Ϻٴ + ǰ . ڿ ASCII artٸ + ASCII ǥ JPEG ǥ ǰ ִ. + Ƿ qs ǥϷ ڿ + ٸ.</p> + + <p>ϴ <a href="mod/mod_negotiation.html#typemaps">mod_negotation + typemap</a> ϶.</p> + + +<h3><a name="multiviews" id="multiviews">Multiviews</a></h3> + + <p><code>MultiViews</code> 丮 ɼ̹Ƿ, + <code>httpd.conf</code> + <code class="directive"><a href="./mod/core.html#directory"><Directory></a></code>, + <code class="directive"><a href="./mod/core.html#location"><Location></a></code>, + <code class="directive"><a href="./mod/core.html#files"><Files></a></code> + Ȥ (<code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> + Ǿٸ) <code>.htaccess</code> + <code class="directive"><a href="./mod/core.html#options">Options</a></code> þ + ִ. <code>Options All</code> <code>MultiViews</code> + ϶. Ѵ.</p> + + <p><code>MultiViews</code> ϸ Ͼ: + <code>/some/dir/foo</code> û ް + <code>/some/dir/foo</code> <code>MultiViews</code> ϸ + <code>/some/dir/foo</code> <em></em> , + 丮 ̸ foo.* ϵ ϴ + type map . Ŭ̾Ʈ û media type + content-encoding ߿ Ѵ.</p> + + <p><code>MultiViews</code> 丮 Ҷ + ã <code class="directive"><a href="./mod/mod_dir.html#directoryindex">DirectoryIndex</a></code> þ + ȴ. ٸ,</p> +<div class="example"><p><code>DirectoryIndex index</code></p></div> + <p><code>index.html</code> <code>index.html3</code> + ִٸ ̵ ߿ ϳ Ѵ. + <code>index.cgi</code> ִٸ, װ Ѵ.</p> + + <p>丮 ϳ Charset, Content-Type, + Language, Encoding Ǵϴ <code>mod_mime</code> + Ȯڸ ٸ, <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code> þ + Ǵ. þ ڵ鷯, , ٸ Ȯ MultiViews + θ Ѵ.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="methods" id="methods"></a></h2> + + <p>ġ type-map ̳ 丮 ִ ϸ + ־ ڿ ԵǸ '' + ϱ ϳ Ѵ. ġ + ϱ Ȯ Ͼ ڼ + ʿ . ñ Ѵ.</p> + + <p>ΰ ִ:</p> + + <ol> + <li><strong>ġ ˰ Ͽ ֵϴ + </strong> Ϲ 쿡 Ѵ. ġ ˰ + Ʒ ڼ Ѵ. ˰ ϸ ġ + Ư + ǰ(quality factor) 'Ѵ'. ġ ǰ + ϴ Ʒ ڼ Ѵ.</li> + + <li><strong>ڿ(Transparent) </strong> + RFC 2295 ǵ û 쿡 + Ѵ. '' + οѴ. ˰ + ȴ. ڿ ߿ ġ + RFC 2296 ǵ ' ˰(remote variant + selection algorithm)' û ִ.</li> + </ol> + +<h3><a name="dimensions" id="dimensions"> </a></h3> + + <table> + + <tr valign="top"> + <th></th> + + <th></th> + </tr> + + <tr valign="top"> + <td>Media Type</td> + + <td> <code>Accept</code> ȣ Ÿ. + ǰ ִ. ǰ + ("qs" Ķ) ִ.</td> + </tr> + + <tr valign="top"> + <td>Language</td> + + <td> <code>Accept-Language</code> ȣ + Ÿ. ǰ ִ. + (Ȥ ƹ ) ִ.</td> + </tr> + + <tr valign="top"> + <td>Encoding</td> + + <td> <code>Accept-Encoding</code> ȣ + Ÿ. ǰ ִ.</td> + </tr> + + <tr valign="top"> + <td>Charset</td> + + <td> <code>Accept-Charset</code> ȣ + Ÿ. ǰ ִ. + media type Ķͷ Ÿ ִ.</td> + </tr> + </table> + + +<h3><a name="algorithm" id="algorithm">ġ ˰</a></h3> + + <p>ġ '' (ִٸ) + ϱ Ʒ ˰ Ѵ. ˰ + . Ѵ:</p> + + <ol> + <li>, شϴ <em>Accept*</em> + ˻ϰ, ǰ ű. + <em>Accept*</em> Ƶ ʴ ĺ + Ѵ. 4 ܰ .</li> + + <li> + ĺ ϳ Ͽ '' ã´. + ˻ Ͼ. ˻翡 õ + ܵȴ. ˻ ̸ + ϰ 3 ܰ . + ˻縦 Ѵ. + + <ol> + <li><code>Accept</code> ǰ + media type ǰ Ͽ + Ѵ.</li> + + <li> (language) ǰ + Ѵ.</li> + + <li><code>Accept-Language</code> (ִٸ) + Ȥ <code>LanguagePriority</code> + þ (ִٸ) + Ѵ.</li> + + <li> (text/html media type Ÿ) + 'level' media Ķ Ѵ.</li> + + <li><code>Accept-Charset</code> + charset media Ķ ã´. + ٸ ISO-8859-1 ȣѴ. + <code>text/*</code> media type + Ư հ ISO-8859-1 + Ѵ.</li> + + <li>ISO-8859-1 <em>ƴ</em> charset media Ķ + Ѵ. ٸ, + Ѵ.</li> + + <li> ڵ Ѵ. + user-agent ڵ ִٸ + Ѵ. ʰ ڵ ڵȵ + ִٸ ڵȵ Ѵ. + ڵǾų ڵȵ + Ѵ.</li> + + <li>content length Ѵ.</li> + + <li> ù Ѵ. ̴ type-map + տ ų, 丮 + ϸ ASCII ڵ Ͽ տ ̴.</li> + </ol> + </li> + + <li> ˰ '' ߴ. ̰ + . HTTP <code>Vary</code> + Ÿ ȴ. ( ij ڿ ijҶ + ִ.) .</li> + + <li> ܰ迡 ߴٸ ( ϱ ) + ȵ . ("No acceptable + representation" ϴ) 406 밡 + HTML . , HTML + <code>Vary</code> Ÿ.</li> + </ol> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="better" id="better">ǰ ϱ</a></h2> + + <p>ġ ġ ˰ Űʰ + ǰ Ѵ. ϰ Ȯ ʴ + (˰) ؼ. + θ ̴ Ϻδ ߸ ϵ + <code>Accept</code> . ϰ ùٸ + ٸ, ʴ´.</p> + +<h3><a name="wildcards" id="wildcards">Media Type ϵī</a></h3> + + <p><code>Accept:</code> û media type ȣ + Ÿ. , * ڿ̶ ϱ "image/*" + "*/*" 'ϵī' media type ִ. + û:</p> + +<div class="example"><p><code>Accept: image/*, */*</code></p></div> + + <p>"image/" ϴ type ٸ type + ǹѴ. + ڽ ٷ ִ type ߰ ϵī带 . + :</p> + +<div class="example"><p><code> + Accept: text/html, text/plain, image/gif, image/jpeg, */* +</code></p></div> + <p> type ȣ ٸ ǥ ִٸ + װ͵ Ÿ ؼ. + ǰ ̴.</p> +<div class="example"><p><code> + Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01 +</code></p></div> + <p> type ǰ ⺻ ( ) + 1.0 . ϵī */* ȣ 0.01 Ƿ + type ´ 쿡 ٸ type + ȴ.</p> + + <p><code>Accept:</code> q <em></em> + "*/*" ִٸ, ġ ٶ ൿ q 0.01 + Ѵ. , "type/*" ϵī忡 ("*/*"ٴ + ȣϵ) 0.02 Ѵ. <code>Accept:</code> + q media type ִٸ ̷ Ư ߰ + <em>ʴ´</em>. + û ûѵ óѴ.</p> + + +<h3><a name="exceptions" id="exceptions">(language) </a></h3> + + <p>ġ 2.0 ε巴 ϱ + ˰ ܸ ߰ߴ.</p> + + <p>Ŭ̾Ʈ û + <code>Accept-language</code> ´ Ѱ + ã , Ŭ̾Ʈ + "No Acceptable Variant" "Multiple Choices" . + ̷ ϱ <code>Accept-language</code> + ϰ Ŭ̾Ʈ û Ȯ + ġ ִ. <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code> + þ ̷ ϳ Ȥ Ѵٸ ϰ + <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code> + þ Ǵϵ Ѵ.</p> + + <p>, ´ ã θ ã + ִ. Ŭ̾Ʈ ϴ + <code>en-GB</code> û , HTTP/1.1 ǥؿ + <code>en</code>θ ǥõ Ϲ + Ѵ. ( ϴ ڰ Ϲ + Ƿ <code>Accept-Language</code> + <code>en-GB</code> ϰ <code>en</code> + Ȯ ߸ ϶. + Ŭ̾Ʈ ̷ ⺻ִ.) ٸ + ã Ͽ "No Acceptable Variants" ų + <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code> + ư Ѵٸ, Ծ ϰ + <code>en-GB</code> <code>en</code> Ѵ. + Ϲ ġ θ ſ ǰ + Ŭ̾Ʈ Ͽ ߰Ѵ. Ŭ̾Ʈ + "en-GB; q=0.9, fr; q=0.8" ûϰ "en" "fr" + ִٸ, "fr" õ ϶. ̴ HTTP/1.1 + ǥ Ű, ùٷ Ŭ̾Ʈ ȿ + ϱ̴.</p> + + <p>ڰ ȣϴ ˾Ƴ (Ű Ư + URL- ) ϱ ġ 2.0.47 + <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> <code>prefer-language</code> + <a href="env.html">ȯ溯</a> νѴ. ȯ溯 + ϰ ± Ѵٸ, + <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> شϴ Ϸ + õѴ. ٸ Ϲ Ѵ.</p> + + <div class="example"><h3></h3><p><code> + SetEnvIf Cookie "language=(.+)" prefer-language=$1 + </code></p></div> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="extensions" id="extensions">ڿ(transparent) Ȯ</a></h2> + +<p>ġ ڿ Ȯ (RFC 2295) +ȮѴ. ο <code>{encoding ..}</code> Ư +content-encoding ĪѴ. RVSA/1.0 ˰ +(RFC 2296) Ͽ ڵ ν ְ, ڵ +<code>Accept-Encoding</code> û ´ ڵ +鵵 ĺ ϵ ȮǾ. RVSA/1.0 + ã ǰ Ҽ 5ڸ ݿø +ʴ´.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="naming" id="naming">۸ũ ̸Ģ Ͽ</a></h2> + + <p>(language) Ѵٸ Ȯڸ + Ȯ Ƿ ϸ ٸ + ̸Ģ ִ. (ڼ <a href="mod/mod_mime.html#multipleext">mod_mime</a> + ϶.)</p> + + <p> MIME-type Ȯ (<em> </em>, + <code>html</code>), 쿡 encoding Ȯ (<em> + </em>, <code>gz</code>), Ͽ ִ + Ȯڸ (<em> </em>, <code>en</code>) + .</p> + + <p>:</p> + + <ul> + <li>foo.en.html</li> + + <li>foo.html.en</li> + + <li>foo.en.html.gz</li> + </ul> + + <p> ϸ Ͽ ȿϰ ȿ + ۸ũ δ:</p> + + <table class="bordered"> + + <tr> + <th>ϸ</th> + + <th>ȿ ۸ũ</th> + + <th>ȿ ۸ũ</th> + </tr> + + <tr> + <td><em>foo.html.en</em></td> + + <td>foo<br /> + foo.html</td> + + <td>-</td> + </tr> + + <tr> + <td><em>foo.en.html</em></td> + + <td>foo</td> + + <td>foo.html</td> + </tr> + + <tr> + <td><em>foo.html.en.gz</em></td> + + <td>foo<br /> + foo.html</td> + + <td>foo.gz<br /> + foo.html.gz</td> + </tr> + + <tr> + <td><em>foo.en.html.gz</em></td> + + <td>foo</td> + + <td>foo.html<br /> + foo.html.gz<br /> + foo.gz</td> + </tr> + + <tr> + <td><em>foo.gz.html.en</em></td> + + <td>foo<br /> + foo.gz<br /> + foo.gz.html</td> + + <td>foo.html</td> + </tr> + + <tr> + <td><em>foo.html.gz.en</em></td> + + <td>foo<br /> + foo.html<br /> + foo.html.gz</td> + + <td>foo.gz</td> + </tr> + </table> + + <p> ǥ ۸ũ Ȯڵ ̸ + (<em> </em>, <code>foo</code>) + ִ. ־, + <em> </em> ̷ũ Ͼʰ + <code>html</code> <code>shtml</code>̳ + <code>cgi</code> ִٴ ̴.</p> + + <p> ۸ũ MIME-type (<em> </em>, + <code>foo.html</code>) ϰ ʹٸ (encoding Ȯڰ + ִٸ ̰͵ Ͽ) Ȯڸ MIME-type Ȯں + ʿ (<em> </em>, <code>foo.html.en</code>) + ξѴ.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="caching" id="caching">ij Ͽ</a></h2> + + <p>ij ǥ ϸ ǥ û URL Ų. + URL ûϸ ij ǥ Ѵ. + ڿ ù° û + ijǾ û ij ߸ ִ. + ̸ ġ ȯǴ û + HTTP/1.0 Ŭ̾Ʈ ij ϵ ǥø Ѵ. , ġ + ij ϴ HTTP/1.1 + Ѵ.</p> + + <p><code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code> + þ HTTP/1.0 ȣȯ Ŭ̾Ʈ( Ȥ ij) + û ij ְ Ѵ. þ + ȣƮ ϸ, ƱԸƮ ʴ´. + þ HTTP/1.1 Ŭ̾Ʈ û 谡 .</p> + + <p>HTTP/1.1 Ŭ̾Ʈ ġ + ˷ִ <code>Vary</code> HTTP . + Ͽ û ij 纻 ü ִ + Ǵ ִ. ij 纻 + Ѵٸ <code>force-no-vary</code> <a href="env.html#special">ȯ溯</a> Ѵ.</p> + +</div></div> +<div class="bottomlang"> +<p><span> : </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="./ko/content-negotiation.html" title="Korean"> ko </a> | +<a href="./tr/content-negotiation.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/content-negotiation.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p> +<p class="menu"><a href="./mod/"></a> | <a href="./mod/directives.html">þ</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="./glossary.html"></a> | <a href="./sitemap.html">Ʈ</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file diff --git a/docs/manual/content-negotiation.html.tr.utf8 b/docs/manual/content-negotiation.html.tr.utf8 new file mode 100644 index 0000000..e09e3bc --- /dev/null +++ b/docs/manual/content-negotiation.html.tr.utf8 @@ -0,0 +1,680 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="tr" xml:lang="tr"><head> +<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> +<!-- + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + This file is generated from xml source: DO NOT EDIT + XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + --> +<title>İçerik Uzlaşımı - Apache HTTP Sunucusu Sürüm 2.4</title> +<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> +<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> +<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="./style/css/prettify.css" /> +<script src="./style/scripts/prettify.min.js" type="text/javascript"> +</script> + +<link href="./images/favicon.ico" rel="shortcut icon" /></head> +<body id="manual-page"><div id="page-header"> +<p class="menu"><a href="./mod/">Modüller</a> | <a href="./mod/directives.html">Yönergeler</a> | <a href="http://wiki.apache.org/httpd/FAQ">SSS</a> | <a href="./glossary.html">Terimler</a> | <a href="./sitemap.html">Site Haritası</a></p> +<p class="apache">Apache HTTP Sunucusu Sürüm 2.4</p> +<img alt="" src="./images/feather.png" /></div> +<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div> +<div id="path"> +<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Sunucusu</a> > <a href="http://httpd.apache.org/docs/">Belgeleme</a> > <a href="./">Sürüm 2.4</a></div><div id="page-content"><div id="preamble"><h1>İçerik Uzlaşımı</h1> +<div class="toplang"> +<p><span>Mevcut Diller: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="./tr/content-negotiation.html" title="Türkçe"> tr </a></p> +</div> + + + <p>Apache HTTPD, içerik uzlaşımını HTTP/1.1 belirtiminde bahsedildiği şekliyle + destekler. Bir özkaynağın en iyi gösterimini, tarayıcının sağladığı + karakter kodlaması, karakter kümesi, dil, ortam türü gibi kullanıcı + tercihlerine bağlı olarak seçebilir. Ayrıca, tarayıcının kullanıcı + tercihlerini tam yansıtamadığı durumlarda istekleri daha akıllıca ele + alabilmeyi sağlayacak bir takım özelliklere de sahiptir.</p> + + <p>İçerik uzlaşımı öntanımlı olarak derlenen + <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> modülü tarafından sağlanır.</p> +</div> +<div id="quickview"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#about">İçerik Uzlaşımı Hakkında</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#negotiation">httpd’de İçerik Uzlaşımı</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#methods">Uzlaşım Yöntemleri</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#better">Üstünlük Değerleriyle Oynamak</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#extensions">Şeffaf İçerik Uzlaşımının Genişletilmesi</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#naming">Hiperbağlar ve İsimlendirme Uzlaşımları</a></li> +<li><img alt="" src="./images/down.gif" /> <a href="#caching">Arabellekler Hakkında</a></li> +</ul><h3>Ayrıca bakınız:</h3><ul class="seealso"><li><a href="#comments_section">Yorumlar</a></li></ul></div> +<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="about" id="about">İçerik Uzlaşımı Hakkında</a></h2> + + <p>Bir özkaynağın bir çok farklı gösterimi olabilir. Örneğin, bir belgenin + farklı ortam türleri ve/veya farklı diller için gösterimleri olabilir. + En uygun seçimi yapmanın tek yolu kullanıcıya bir liste verip seçmesini + istemektir. Bununla birlikte sunucunun bu seçimi kendiliğinden yapması + da mümkündür. Tarayıcılar isteğin bir parçası olarak kullanıcı + tercihlerini de gönderdiğinden bu istendiği gibi çalışır. Örneğin bir + tarayıcı, kullanıcısınının mümkünse Fransızca içerik tercih ettiğini + yoksa İngilizce içeriğe de razı olabileceğini belirtebilirdi. + Tarayıcılar bu tercihleri başlıkta belirtirler. Tarayıcı sadece Türkçe + içerik istendiğini şöyle belirtebilirdi:</p> + + <div class="example"><p><code>Accept-Language: tr</code></p></div> + + <p>Bu tercihin yerine getirilebilmesininin sadece, desteklenen diller + arasında bu dilin varlığına ve istenen belgenin bu dilde bir + gösteriminin bulunmasına bağlı oluşuna dikkat ediniz.</p> + + <p>Daha karmaşık bir istek örneği olarak, tarayıcının Fransızca ve + İngilizce içerik kabul etmeye ayarlandığını fakat Fransızcayı tercih + ettiğini ve çeşitli ortam türlerini kabul etmekle birlikte salt metin ve + diğer metin türlerinden ziyade HTML tercih ettiğini, ayrıca, diğer ortam + türleri üzerinde GIF veya JPEG tercih ettiğini fakat başka çare yoksa + her ortam türüne de izin verdiğini belirtiyor olsun:</p> + + <div class="example"><p><code> + Accept-Language: fr; q=1.0, en; q=0.5<br /> + Accept: text/html; q=1.0, text/*; q=0.8, image/gif; q=0.6, image/jpeg; + q=0.6, image/*; q=0.5, */*; q=0.1 + </code></p></div> + + <p>httpd, HTTP/1.1 belirtiminde tanımlanan şekliyle ‘sunucu yönetiminde’ + içerik uzlaşımını destekler. <code>Accept</code>, + <code>Accept-Language</code>, <code>Accept-Charset</code> ve + <code>Accept-Encoding</code> istek başlıklarını tamamen destekler. + httpd ayrıca, RFC 2295 ve RFC 2296’da tanımlanan bir deneysel uzlaşım + olarak ‘şeffaf’ içerik uzlaşımını da destekler. Fakat ‘özellik + uzlaşımını’ bu RFC’lerde tanımlandığı gibi desteklemez.</p> + + <p>Bir <strong>özkaynak</strong> bir URI (RFC 2396) tarafından betimlenen + kavramsal bir öğedir. Apache gibi bir HTTP sunucusu, ortam türü, + karakter kümesi, kodlama ve saire ile tanımlanmış bir bayt dizisi + şeklindeki her gösterimiyle, özkaynaklara kendi isim alanları dahilinde + erişim sağlar. Her özkaynağın aynı anda bir veya daha fazla gösterimi + mevcut olabileceği gibi hiç mevcut olmayabilir de. Eğer çok sayıda + gösterim mevcutsa, bu özkaynağın <strong>uzlaşılabilir</strong> + olduğundan ve her gösteriminin bir <strong>çeşitlilik</strong> + oluşturduğundan bunun da uzlaşımın <strong>boyutlar</strong>ından + kaynaklandığından bahsedilebilir.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="negotiation" id="negotiation">httpd’de İçerik Uzlaşımı</a></h2> + + <p>Bir özkaynak üzerinde uzlaşılırken gösterim çeşitlerinin her biri + hakkında sunucuya bilgi verilmesi gerekir. Bu iki yolla yapılabilir:</p> + + <ul> + <li>Ya gösterim çeşitlerini içeren dosyaların isimleriyle eşleşmeyi + sağlayan bir tür eşlemi kullanılır (bir <code>*.var</code> dosyası + gibi).</li> + + <li>Ya da sunucu örtük bir dosya ismi kalıbı eşleşmesinin ardından + sonuçlar arasından seçim yapar; buna ‘Çoklu Görünüm’ araması adı + verilir.</li> + </ul> + + <h3><a name="type-map" id="type-map">Bir türeşlem dosyası kullanmak</a></h3> + + <p>Bir türeşlem dosyası, <code>type-map</code> eylemcisi ile ilişkili bir + belgedir (ya da eski httpd yapılandırmaları ile geriye uyumluluk için, + <code>application/x-type-map</code> <a class="glossarylink" href="./glossary.html#mime türü" title="sözlüğe bakınız">MIME türü</a>nde + bir belgedir). Bu özelliği kullanmak için, yapılandırmada bir tür + eşleyici olarak her dosya ismi uzantısı için bir <code>type-map</code> + eylemcisi tanımlamalısınız. Bu, sunucu yapılandırma dosyasında en iyi + şöyle yapılabilir:</p> + + <pre class="prettyprint lang-config">AddHandler type-map .var</pre> + + + <p>Türeşlem dosyaları kendilerini tanımlayan özkaynak ile aynı isimde + olmalı ve isim bir <code>.var</code> uzantısı içermelidir. Aşağıdaki + örneklerde özkaynak ismi <code>foo</code> olduğundan türeşlem dosyasının + ismi <code>foo.var</code>'dır.</p> + + <p>Bu dosya her gösterim çeşidi için bir girdi içermelidir; bu girdiler + ardarda belirtilen HTTP biçem başlık satırlarından oluşur. Farklı + gösterimlerin girdileri bir boş satırla diğerlerinden ayrılır. Aynı + girdi içinde boş satır kullanılamaz. Bir eşlem dosyasını bir birleşik + öğenin tamamı için bir girdi ile başlatmak adet olmuştur (ise de, bu + gerekli değildir, hele yoksayılacaksa hiç gerekli değildir). Eşlem + dosyası için aşağıda bir örnek verilmiştir.</p> + + <p>Bu dosyadaki URI'ler türeşlem dosyasının yerine görelidir. Dolayısıyla, + bu dosyaların aynı dizinde bulunması beklenirse de bu gerekli değildir. + Aynı sunucuda bulunan tüm dosyalar için türeşlem dosyasındaki gibi mutlak + veya göreli URI'ler belirtebilirsiniz.</p> + + <div class="example"><p><code> + URI: misal<br /> + <br /> + URI: misal.en.html<br /> + Content-type: text/html<br /> + Content-language: en<br /> + <br /> + URI: misal.fr.de.html<br /> + Content-type: text/html;charset=iso-8859-2<br /> + Content-language: fr, de<br /> + </code></p></div> + + <p>Ayrıca, <code>MultiViews</code> etkin olsa bile bir türeşlem dosyasının + dosya ismi uzantılarının taranmasına göre öncelik alacağına dikkat + ediniz. Eğer gösterimler bu örnekteki resim dosyasında olduğu gibi + farklı kaynak üstünlüklerine sahipseler, ortam türünün <code>qs</code> + parametresi kullanılarak kaynak üstünlükleri belirtilebilir: </p> + + <div class="example"><p><code> + URI: misal<br /> + <br /> + URI: misal.jpeg<br /> + Content-type: image/jpeg; <strong>qs=0.8</strong><br /> + <br /> + URI: misal.gif<br /> + Content-type: image/gif; <strong>qs=0.5</strong><br /> + <br /> + URI: misal.txt<br /> + Content-type: text/plain; <strong>qs=0.01</strong><br /> + </code></p></div> + + <p><code>qs</code> değerleri 0.000-1.000 değer aralığı içinde + belirtilebilir. 0.000 <code>qs</code> değerine sahip gösterimin asla + seçilmeyeceğine dikkat ediniz. Bir <code>qs</code> değeri belirtilmeyen + gösterimlerin kaynak üstünlüğü 1.000 kabul edilir. <code>qs</code> + parametresinin belirttiği değer istemcinin yeteneklerinden bağımsız + olarak olası gösterimler arasında göreli bir üstünlük ifade eder. + Örneğin bir fotoğraf sözkonusu olduğunda bir JPEG dosyasının kaynak + üstünlüğü bir ASCII çiziminkinden yüksek olacaktır. Diğer taraftan özgün + resim bir ASCII çizim olduğu takdirde, ASCII çizim, bir JPEG gösterimine + göre öncelikli olacaktır. Bu nedenle <code>qs</code> değeri özkaynağın + doğasına bakarak belirlenir.</p> + + <p>Tanınan başlıkların tam listesini <a href="mod/mod_negotiation.html#typemaps">mod_negotiation</a> modülünün + belgesinde bulabilirsiniz.</p> + + + <h3><a name="multiviews" id="multiviews">Çoklu Görünümler</a></h3> + + <p><code>MultiViews</code>, <code>httpd.conf</code> dosyasındaki veya + (<code class="directive"><a href="./mod/core.html#allowoverride">AllowOverride</a></code> yönergesinin + değerine bağlı olarak) <code>.htaccess</code> dosyalarındaki <code class="directive"><a href="./mod/core.html#directory"><Directory></a></code>, <code class="directive"><a href="./mod/core.html#location"><Location></a></code> veya <code class="directive"><a href="./mod/core.html#files"><Files></a></code> bölümleri içinde + <code class="directive"><a href="./mod/core.html#options">Options</a></code> yönergeleri ile + belirtilebilen, dizine özgü bir seçenektir. Yalnız, dikkatli olun, + <code>Options All</code> yaparak <code>MultiViews</code> seçeneğini + etkin kılamazsınız; seçeneği ismiyle açıkça belirtmelisiniz.</p> + + <p><code>MultiViews</code> şöyle etki eder: Sunucudan, + <code>MultiViews</code> seçeneğinin etkin olduğu <code>/bir/dizin</code> + dizininden <code>filanca</code> dosyası için bir istekte bulunulmuşsa + fakat dizinde bu dosya yoksa, sunucu dizin içeriğini + <code>filanca.*</code> dosyaları için tarar ve bu dosyalar için + istemcinin ismiyle talep ettiği ortam türlerini ve kodlamaları + kullanarak bir türeşlem dosyası uydurup bu gösterimler arasından + istemcinin gereksinimlerine en uygun gösterimi seçer.</p> + + <p><code>MultiViews</code> ayrıca, sunucunun bir dizin içeriğini + listelemeye çalıştığı durumda <code class="directive"><a href="./mod/mod_dir.html#directoryindex">DirectoryIndex</a></code> yönergesi ile belirtilen dosya için de bir + arama tertipleyebilir. Eğer yapılandırma dosyalarında</p> + + <pre class="prettyprint lang-config">DirectoryIndex index</pre> + + + <p>şeklinde bir atama varsa ve dizinde <code>index.html</code> ve + <code>index.html3</code> dosyaları varsa sunucu bunlar arasından hakem + sıfatıyla bir seçim yapacaktır; ama bu ikisi yerine dizinde sadece + <code>index.cgi</code> mevcutsa sunucu sadece bu dosyayı + çalıştıracaktır.</p> + + <p>Okunan dizinde bulunan dosyalar arasında <code>mod_mime</code> + tarafından tanınan karakter kümesi, içerik türü, dil ve kodlama + başlıklarına uygun gösterim uzantılarından birine sahip bir dosya yoksa + sonuç <code class="directive"><a href="./mod/mod_mime.html#multiviewsmatch">MultiViewsMatch</a></code> + yönergesiyle yapılan tanıma bağlı olur. Bu yönerge hangi diğer dosya + uzantılarının, eylemcilerin veya süzgeçlerin çok gösterimli uzlaşımla + ilintileneceğini belirler.</p> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="methods" id="methods">Uzlaşım Yöntemleri</a></h2> + + <p>httpd’nin, bir türeşlem dosyası veya dizin içindeki bir dosya + sayesinde belli bir özkaynağın gösterim çeşitlerinin bir listesini elde + ettikten sonra ‘en uygun’ gösterime karar vermek için kullanabileceği + iki yöntem vardır. httpd’nin içerik uzlaşım özelliklerinin kullanımı + sırasında uzlaşımın nasıl yerine getirileceği ile ilgili ayrıntıları + bilmek aslında gerekli değildir. Bununla birlikte belgenin kalanında bu + konu açıklanmaya çalışılmıştır.</p> + + <p>İki uzlaşım yöntemi vardır:</p> + + <ol> + <li>Normal durumda <strong>sunucu yönetiminde httpd uzlaşım + algoritması</strong> kullanılır. Bu algoritma aşağıda ayrıntılı olarak + açıklanmıştır. Bu algoritma kullanıldığı zaman, httpd, en iyi sonuca + ulaşmak için bazen belli boyutların üstünlük katsayılarıyla ‘oynar’. + httpd’nin bu katsayılarla oynama işini nasıl yaptığı aşağıda daha + ayrıntılı açıklanmıştır.</li> + + <li>İstemci bu işlem için özellikle RFC 2295’te tanımlanan mekanizmanın + kullanılmasını isterse <strong>şeffaf içerik uzlaşımı</strong> + kullanılır. Bu uzlaşım yöntemi, en uygun gösterimin seçilmesi + konusunda tarayıcıya tam denetim imkanı verir; dolayısıyla sonuç + tarayıcının bu işlem için kullandığı algoritmanın başarısına bağlıdır. + Şeffaf uzlaşım sürecinin bir parçası olarak, tarayıcı, RFC 2296’da + tanımlanan ‘gösterim çeşidini uzaktan seçme algoritması’nın + çalıştırılmasını httpd’den isteyebilir.</li> + </ol> + + <h3><a name="dimensions" id="dimensions">Uzlaşımın Boyutları</a></h3> + + <table> + + <tr valign="top"> + <th>Boyut</th> + + <th>Açıklama</th> + </tr> + + <tr valign="top"> + <td>Ortam Türü</td> + + <td>Tarayıcı ortam türü tercihlerini <code>Accept</code> başlık alanı + ile belirtir. Her öğenin kendine özgü bir üstünlük katsayısı + olabilir. Gösterimin açıklaması da ayrıca bir kaynak üstünlüğüne + (<code>qs</code> parametresi) sahip olabilir.</td> + </tr> + + <tr valign="top"> + <td>Dil</td> + + <td>Tarayıcı dil tercihlerini <code>Accept-Language</code> başlık + alanı ile belirtir. Her öğenin kendine özgü bir üstünlük katsayısı + olabilir. Gösterimler bir kaç dilde olabileceği gibi hiç bir dille + ilişkilendirimemiş de olabilir.</td> + </tr> + + <tr valign="top"> + <td>Kodlama</td> + + <td>Tarayıcı kodlama tercihlerini <code>Accept-Encoding</code> başlık + alanı ile belirtir. Her öğenin kendine özgü bir üstünlük katsayısı + olabilir.</td> + </tr> + + <tr valign="top"> + <td>Karakter Kümesi</td> + + <td>Tarayıcı karakter kümesi tercihlerini <code>Accept-Charset</code> + başlık alanı ile belirtir. Her öğenin kendine özgü bir üstünlük + katsayısı olabilir. Gösterim çeşitleri karakter kümesini ortam + türünün bir parametresi olarak belirtebilirler.</td> + </tr> + </table> + + + <h3><a name="algorithm" id="algorithm">httpd Uzlaşım Algoritması</a></h3> + + <p>httpd, tarayıcıya döndürülecek en uygun gösterim çeşidini (varsa) + seçmek için aşağıdaki algoritmayı kullanabilir. Bu algoritma pek de + yapılandırılabilir değildir. Şöyle çalışır:</p> + + <ol> + <li>Önce her uzlaşım boyutu için ilgili <em>Accept*</em> başlık alanına + bakılıp her gösterim çeşidine bir üstünlük katsayısı atanır. Eğer + boyutlardan bazıları için ilgili <em>Accept*</em> başlığı + uygulanabilir değilse bu boyut elenir ve sonuçta hiçbir gösterim + çeşidi kalmasza 4. adıma atlanır.</li> + + <li>‘En uygun’ gösterim çeşidi bir eleme süreciyle seçilir. Bu süreç + sırasında aşağıdaki sınamalar sırayla uygulanır. Sınamalardan + geçemeyen bir gösterim çeşidi elenir. Sınamaların bir aşamasında tek + bir gösterim çeşidi kalırsa bu en uygun eşleşme olarak seçilmiş olur + ve 3. adıma atlanır. Eğer birden fazla gösterim çeşidi kalırsa sonraki + sınamaya geçilir. + + <ol> + <li><code>Accept</code> başlığındaki üstünlük katsayısı ile + gösterimin ortam türünde belirtilen kaynak üstünlüğünün çarpımı en + büyük olan gösterim çeşidi seçilir.</li> + + <li>En yüksek dil üstünlük katsayısına sahip gösterim çeşidi seçilir. + </li> + + <li>En uygun dil eşleşmesine sahip gösterim çeşidini seçmek için + önce varsa <code>Accept-Language</code> başlığındaki dil + sıralamasına bakılır, aksi takdirde <code>LanguagePriority</code> + yönergesi ile atanmışsa oradaki dil sıralamasına bakılır.</li> + + <li>En yüksek ‘seviyeden’ ortam parametresine (text/html ortam türü + sürümünü belirtmekte kullanılır) sahip gösterim çeşitleri + seçilir.</li> + + <li><code>Accept-Charset</code> başlık satırında belirtilene bakarak + en uygun karakter kümesine sahip gösterim çeşitleri seçilir. + Alenen dışlanmadıkça ISO-8859-1 kabul edilebilir karakter + kümesidir. <code>text/*</code> ortam türüne sahip gösterim + çeşitlerinden belli bir karakter kümesi ile ilişkilendirilmemiş + olanların karakter kümesinin ISO-8859-1 olduğu varsayılır.</li> + + <li>ISO-8859-1 karakter kümesi ile ilişkilendirilmemiş gösterim + çeşitleri seçilir. Böyle hiçbir gösterim yoksa bütün gösterimler + seçilir.</li> + + <li>En uygun kodlamaya sahip gösterim çeşitleri seçilir. Tarayıcı + tarafından kabul edilebilir kodlamaya sahip gösterim çeşitleri + varsa bunlar seçilir. Yoksa kodlanmış ve kodlanmamış gösterim + çeşitleri karışık olarak mevcutsa sadece kodlanmamış olanlar + seçilir. Eğer bütün gösterim çeşitlerinin sadece kodlanmış ya da + sadece kodlanmamış gösterimleri mevcutsa hepsi seçilir.</li> + + <li>En küçük içerik uzunluğuna sahip gösterim çeşitleri seçilir.</li> + + <li>Kalan gösterim çeşitlerinin ilki seçilir. Bu ilk, ya türeşlem + dosyasında listelenen ilk çeşittir ya da gösterimler bir dizinden + okunuyorsa ASCII kod sıralamasına göre ilk sıradaki dosya ismine + sahip gösterimdir.</li> + </ol> + </li> + + <li>Algoritma, artık seçilmiş en uygun gösterim çeşidine sahipse bu + artık yanıt olarak döndürülebilir. HTTP yanıt başlığı + <code>Vary</code>’ye uzlaşım boyutları atanır (tarayıcı ve + arabellekler özkaynağı kaydederken bu bilgiyi kullanırlar) + ve algoritma sonlandırılır.</li> + + <li>Buraya gelinmişse hiçbir gösterim seçilmemiş demektir (hiçbiri + tarayıcı tarafından kabul edilebilir bulunmadığından dolayı). + Gövdesinde mevcut gösterim çeşitlerini listeleyen bir HTML belgesi 406 + durum koduyla döndürülür (406: ‘kabul edilebilir bir gösterim yok’). + Ayrıca HTTP <code>Vary</code> başlığında gösterim çeşitliliğinin + boyutları belirtilir.</li> + </ol> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="better" id="better">Üstünlük Değerleriyle Oynamak</a></h2> + + <p>httpd bazen yukarıdaki httpd uzlaşım algoritmasının kesin sonucunun + beklenenden farklı olması için üstünlük değerleriyle oynar. Bunu tam ve + doğru bilgi göndermeyen tarayıcılar için algoritmadan en iyi sonucu elde + etmek amacıyla yapar. Bazen günümüzün en tanınmış tarayıcıları bile çoğu + durumda yanlış bir seçimle sonuçlanmayacaksa <code>Accept</code> başlık + bilgilerini göndermemektedir. Eğer tarayıcı eksiksiz ve doğru bilgi + gönderirse httpd bu değerlerle oynamayacaktır.</p> + + <h3><a name="wildcards" id="wildcards">Ortam Türleri ve Dosyaismi Kalıpları</a></h3> + + <p><code>Accept:</code> istek başlığı ortam türü tercihlerini yansıtır. + Ayrıca, * bir dizge ile eşleşmek üzere "image/*" veya "*/*" gibi ortam + türü kalıpları da içerebilir. Dolayısıyla şöyle bir istek,</p> + + <div class="example"><p><code>Accept: image/*, */*</code></p></div> + + <p>diğer türler gibi "image/" ile başlayan ortam türlerini kabul + edilebilir kılacaktır. Bazı tarayıcılar ortam türlerini örtük olarak + elde etmek amacıyla hep bu tür kalıplar gönderirler. Örnek:</p> + + <div class="example"><p><code> + Accept: text/html, text/plain, image/gif, image/jpeg, */* + </code></p></div> + + <p>Bunun amacı, açıkça listelenmiş türlerin tercih edildiğini, fakat + farklı gösterimler varsa onların da kabul edilebileceğini belirtmektir. + Üstünlük değerlerini doğrudan kullanarak tarayıcılar gerçekte ne + istediklerini şuna benzer şekilde belirtebilirler:</p> + + <div class="example"><p><code> + Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01 + </code></p></div> + + <p>Açıkça belirtilen türler için üstünlük katsayısı belirtilmemiştir, + dolayısıyla üstünlük katsayılarının 1.0 (en yüksek) olduğu + varsayılmaktadır. */* kalıbı 0.01 gibi çok daha düşük bir öncelik + belirtmektedir. Bu bakımdan, ancak, açıkça belirtilen türlerden + hiçbirinin bulunmaması halinde diğer türler eşleşecektir.</p> + + <p>Eğer <code>Accept:</code> başlığı <em>hiçbir</em> <code>q</code> + katsayısı içermiyorsa ve başlıkta "*/*" belirtilmişse, httpd istenen + davranışı taklit etmek için bu kalıba 0.01 katsayısını atar. Keza + "type/*" kalıbına da 0.02 katsayısını atar (yani, */* kalıbına göre + tercihli olur). Eğer <code>Accept:</code> alanındaki her ortam türü bir + <code>q</code> katsayısı içeriyorsa bu özel değerler uygulanmaz. + Dolayısıyla gerekli bilgiyi açıkça bildiren tarayıcılardan gelen + istekler umulduğu gibi işlem görecektir.</p> + + + <h3><a name="exceptions" id="exceptions">Dil Uzlaşımında İstisnalar</a></h3> + + <p>httpd 2.0’dan itibaren, uzlaşım algoritmasına, bir eşleşme bulmak + konusunda algoritma başarılı olamadığı takdirde hoş bir son çareye izin + vermek için bazı istisnalar eklenmiştir.</p> + + <p>İstemci sunucudan bir sayfa istediğinde, sunucu, tarayıcı tarafından + gönderilen <code>Accept-language</code> başlığıyla eşleşen tek bir sayfa + bulamadığı takdirde istemciye ya “Kabul edilebilir bir gösterim çeşidi + yok” ya da “Çok sayıda seçim belirtilmiş” yanıtını döndürür. Bu hata + iletilerinden kaçınmak için bu gibi durumlarda httpd + <code>Accept-language</code> başlığını yoksaymaya ayarlanabilir. Böylece + istemcinin isteğine tam olarak uymasa da bir belge sağlanır. Bu hata + iletilerinin birini veya her ikisini de geçersiz kılmak için <code class="directive"><a href="./mod/mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></code> yönergesi + kullanılabilir ve sunucunun kararını <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code> yönergesine + dayanarak vermesi sağlanabilir.</p> + + <p>Sunucu ayrıca, tam bir eşleşme bulunmadığı zaman lehçelerle de eşleşme + arayabilir. Örneğin, bir istemci Britanya İngilizcesi + (<code>en-GB</code>) ile yazılmış belgeler için istekte bulunursa, + sunucu normalde HTTP/1.1 standardına göre bir belgenin basitçe + <code>en</code> olarak imlenmesine izin vermez. (Bir okuyucu Britanya + İngilizcesini anlıyor ama genel İngilizceyi anlamıyor diye + <code>Accept-Language</code> başlığında <code>en</code> değil de + <code>en-GB</code>’yi belirtmesinin hemen hemen daima bir yapılandırma + hatasına yol açacağına dikkat ediniz. Maalesef, mevcut istemcilerin çoğu + öntanımlı yapılandırmalarında buna benzer şeyler yapmaktadır.) Bununla + birlikte, başka bir dille eşleşme mümkün değilse ve sunucu “Kabul + edilebilir bir gösterim çeşidi yok” hatasını döndürmeye hazırsa veya + <code class="directive"><a href="./mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code> son + çaresine ayarlanmışsa alt küme belirtimini yok sayacak ve + <code>en</code> belge isteklerine <code>en-GB</code> belgelerle yanıt + verecektir. httpd, lehçenin üyesi olduğu anadili, istemcinin kabul + edilebilir diller listesine örtük olarak düşük bir üstünlük değeri ile + ekler. Yalnız şuna dikkat edin, eğer istemci tercihini "en-GB; q=0.9, + fr; q=0.8" olarak belirtirse ve sunucuda sadece "en" ve "fr" belgeleri + varsa sunucu "fr" belge ile yanıt verecektir. HTTP/1.1 belirtimi ile + uyumluluğu sağlamak ve düzgün yapılandırılmış istemcilerle gerektiği + gibi çalışabilmek için bu gereklidir.</p> + + <p>Gelişmiş tekniklerin (çerezler, özel URL yolları gibi) desteklenmesi + sırasında, kullanıcının tercih ettiği dili saptamak için httpd 2.0.47 + sürümünden beri <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> modülü + <code>prefer-language</code> <a href="env.html">ortam değişkenini</a> + tanımaktadır. Değişken mevcutsa ve uygun bir dil yaftası içeriyorsa + <code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> uygun gösterimi seçmeyi deneyecektir. + Böyle bir gösterim çeşidi mevcut değilse normal uzlaşım işlemi + uygulanacaktır.</p> + + <div class="example"><h3>Örnek</h3><pre class="prettyprint lang-config">SetEnvIf Cookie "language=(.+)" prefer-language=$1 +Header append Vary cookie</pre> +</div> + +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="extensions" id="extensions">Şeffaf İçerik Uzlaşımının Genişletilmesi</a></h2> + + + <p>httpd, şeffaf içerik uzlaşımı protokolünü (RFC 2295) şöyle genişletir: + Sadece içerik kodlamasına özgü olmak üzere gösterim çeşidi listelerinde + gösterim çeşitlerini imlemek için yeni bir <code>{encoding ..}</code> + elemanı kullanılır. RVSA/1.0 algoritmasının (RFC 2296) gerçeklenimi, + listedeki kodlanmış gösterim çeşitlerini tanımak ve onları + <code>Accept-Encoding</code> başlık alanıyla ilgili olarak kabul + edilebilir kodlamalara aday gösterim çeşitleri olarak kullanmak üzere + genişletilmiştir. RVSA/1.0 gerçeklenimi, en uygun gösterim çeşidi + seçiminin öncesinde hesaplanmış üstünlük katsayısını virgülden sonra beş + haneye yuvarlamaz.</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="naming" id="naming">Hiperbağlar ve İsimlendirme Uzlaşımları</a></h2> + + <p>Eğer dil uzlaşımı kullanıyorsanız ve birden fazla dosya ismi uzantısına + sahip dosyalarınız varsa uzantıların sıralamasının normalde uygunsuz + düştüğü farklı isimlendirme yaklaşımlarında bulunabilirsiniz (ayrıntılar + için <a href="mod/mod_mime.html#multipleext">mod_mime</a> belgesine + bakınız).</p> + + <p>Bir MIME türü uzantısına sahip bir dosyanın (<code>html</code> gibi), + kodlanmış bir gösterimi (<code>gz</code> gibi) mevcut olabilir. Bu + dosyanın ayrıca farklı dillerdeki gösterimleri için de bir uzantısı + (<code>en</code> gibi) olabilir.</p> + + <p>Örnekler:</p> + + <ul> + <li>misal.en.html</li> + + <li>misal.html.en</li> + + <li>misal.en.html.gz</li> + </ul> + + <p>Hiperbağ olarak geçerli ve geçersiz bazı dosya ismi örnekleri:</p> + + <table class="bordered"> + + <tr> + <th>Dosya ismi</th> + + <th>Geçerli Hiperbağ</th> + + <th>Geçersiz Hiperbağ</th> + </tr> + + <tr> + <td><em>misal.html.en</em></td> + + <td>misal<br /> + misal.html</td> + + <td>-</td> + </tr> + + <tr> + <td><em>misal.en.html</em></td> + + <td>misal</td> + + <td>misal.html</td> + </tr> + + <tr> + <td><em>misal.html.en.gz</em></td> + + <td>misal<br /> + misal.html</td> + + <td>misal.gz<br /> + misal.html.gz</td> + </tr> + + <tr> + <td><em>misal.en.html.gz</em></td> + + <td>misal</td> + + <td>misal.html<br /> + misal.html.gz<br /> + misal.gz</td> + </tr> + + <tr> + <td><em>misal.gz.html.en</em></td> + + <td>misal<br /> + misal.gz<br /> + misal.gz.html</td> + + <td>misal.html</td> + </tr> + + <tr> + <td><em>misal.html.gz.en</em></td> + + <td>misal<br /> + misal.html<br /> + misal.html.gz</td> + + <td>misal.gz</td> + </tr> + </table> + + <p>Yukarıdaki tabloya bakarak hiperbağlarda bir dosya ismini uzantısız + olarak (<code>misal</code> gibi) kullanmanın daima mümkün olduğunu + farkedeceksiniz. Böylece bir belgenin asıl türünü gizleyebilir ve + sonradan bir hiperbağ değişikliği yapmaksızın örneğin + <code>html</code>’den <code>shtml</code> veya <code>cgi</code>’ye + geçebilirsiniz.</p> + + <p>Hiperbağlarda MIME türlerini (<code>misal.html</code> gibi) kullanmaya + devam etmek istiyorsanız dil uzantısı MIME türü uzantısının sağında + kalmalıdır (<code>misal.html.en</code> gibi).</p> +</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div> +<div class="section"> +<h2><a name="caching" id="caching">Arabellekler Hakkında</a></h2> + + <p>Bir arabellek, bir gösterimi istek URL’si ile ilişkilendirerek saklar. + Böylece, sonradan aynı URL için bir istek yapıldığında kaydettiği + gösterimi kullanabilir. Fakat özkaynak sunucuyla uzlaşılan türdeyse + arabelleğe ilk istenen çeşit saklanmış olacağından isteğe yanlış + gösterimle yanıt verilmiş olacaktır. Bunun olmaması için httpd, normal + olarak içerik uzlaşımının sonucu olarak döndürülen tüm yanıtları + HTTP/1.0 istemciler tarafından arabelleklenemez olarak imler. httpd + ayrıca, uzlaşımlı yanıtların arabelleklenmesini mümkün kılan HTTP/1.1 + protokolünü de destekler.</p> + + <p>HTTP/1.0 uyumlu istemcilerden (bir tarayıcı veya arabellek) gelen + istekler için, uzlaşıma konu yanıtların arabelleklenmesini mümkün kılmak + üzere <code class="directive"><a href="./mod/mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></code> yönergesi kullanılabilir. Bu yönerge + argümansızdır ve sunucu genelinde veya sanal konakların + yapılandırılmasında kullanılabilir. Bunun HTTP/1.1 istemcilerinden gelen + isteklere bir etkisi yoktur.</p> + + <p>HTTP/1.1 istemciler için, httpd, yanıtın uzlaşım boyutlarını göstermek + üzere bir <code>Vary</code> HTTP yanıt başlığı gönderir. Arabellekler bu + bilgiyi sonraki istekleri yerel kopyadan sunarken kullanabilirler. Bir + arabelleğin uzlaşım boyutlarına bakmaksızın yerel kopyasını kullanmaya + teşvik etmek için <code>force-no-vary</code> <a href="env.html#special">ortam değişkenini</a> etkin kılabilirsiniz.</p> + +</div></div> +<div class="bottomlang"> +<p><span>Mevcut Diller: </span><a href="./en/content-negotiation.html" hreflang="en" rel="alternate" title="English"> en </a> | +<a href="./fr/content-negotiation.html" hreflang="fr" rel="alternate" title="Français"> fr </a> | +<a href="./ja/content-negotiation.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | +<a href="./ko/content-negotiation.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | +<a href="./tr/content-negotiation.html" title="Türkçe"> tr </a></p> +</div><div class="top"><a href="#page-header"><img src="./images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Yorumlar</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div> +<script type="text/javascript"><!--//--><![CDATA[//><!-- +var comments_shortname = 'httpd'; +var comments_identifier = 'http://httpd.apache.org/docs/2.4/content-negotiation.html'; +(function(w, d) { + if (w.location.hostname.toLowerCase() == "httpd.apache.org") { + d.write('<div id="comments_thread"><\/div>'); + var s = d.createElement('script'); + s.type = 'text/javascript'; + s.async = true; + s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; + (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); + } + else { + d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); + } +})(window, document); +//--><!]]></script></div><div id="footer"> +<p class="apache">Copyright 2023 The Apache Software Foundation.<br /><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> altında lisanslıdır.</p> +<p class="menu"><a href="./mod/">Modüller</a> | <a href="./mod/directives.html">Yönergeler</a> | <a href="http://wiki.apache.org/httpd/FAQ">SSS</a> | <a href="./glossary.html">Terimler</a> | <a href="./sitemap.html">Site Haritası</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- +if (typeof(prettyPrint) !== 'undefined') { + prettyPrint(); +} +//--><!]]></script> +</body></html>
\ No newline at end of file |