<-
Apache > HTTP Server > �ĵ� > �汾2.2
���� ��л | �������� | ��ƪ���ߣ��𲽹� | ��ҳ�����£�2006��1��2�� | ��ȡ���°汾

������

Apache֧��HTTP/1.1�淶�ж��������Э�̣������Ը���������ṩ�IJ���ѡ��һ����Դ����ʵ�ý�����͡����ԡ��ַ����ͱ���ı��ַ�ʽ������ʵ����һЩ����������Ͳ���������Э����Ϣ�������ܴ����������

����Э����mod_negotiationģ��֧�֣�����Ĭ�ϱ������������

top

����������(Content Negotiation)

һ����Դ���ܻ��ж��ֲ�ͬ�ı�����ʽ�����磬���ܻ��в�ͬ���Ի���ý�����͵İ汾��������ϡ���õ�ѡ�񷽷����ṩһ������ҳ�Թ�ѡ�񡣵����������������������ͷ��Ϣ���ṩ����ѡ��ı�����ʽ����˾��п����÷����������Զ�ѡ�񡣱��磬��������Ա���ϣ�������������Ϣ�����û�У�Ӣ���Ҳ�С������������ı�����ʽ����������Է�����

Accept-Language: fr

ע�⣺����ѡ����Ϣ�������ڶ��ֿ�ѡ�����Ա�����ʽʱ����Ч��

������һ�������ӵ�������������������Խ��ܷ����Ӣ�������Ƿ�����ܸ���ý�����ͣ������HTML�������ļ��������ı�����Ҳ���ԣ������GIF��JPEG��������ý������Ҳ���ԣ�����������ý��������Ϊ���ձ�����ʽ��

Accept-Language: fr; q=1.0, en; q=0.5
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

Apache֧��HTTP/1.1�淶�ж����"����������"������Э�̣� ������ȫ��֧��Accept��Accept-Language��Accept-Charset��Accept-Encoding����ͷ����Щ��RFC2295��RFC2296�ж����ʵ��Э��Э�飬���Dz�֧����ЩRFC�ж����"����Э��"��

��Դ(resource)��һ����URI(RFC2396)�ж���ĸ����ϵ�ʵ�塣һ��HTTP������������Apache����������ʽ(representation)�ṩ�������ƿռ�����Դ�ķ��ʣ����ֱ�����ʽ���Ѷ����ý�����͡��ַ����ͱ�����ֽ������ɡ��κ�һ���ض���ʱ�̣�һ����Դ����û�У�������һ���������ж��������ʽ������ж��������ʽ���ڣ���Ƹ���Դ����Э�̵�(negotiable)������ֱ�����ʽ��Ϊ����(variant)����һ����Э�̵���Դ�ĸ��ֱ��ֵ�����;����Ϊ��Ԫ(dimension)��

top

Apache�������

����ʹ����������;��֮һ��������ṩ�йظ����ֵ���Ϣ����ʵ�ֶ���Դ��Э�̣�

ʹ�����ͱ��ļ�

���ͱ���һ����type-map�������������ĵ�(���߼�������Apache���õ�MIME������application/x-type-map )��Ҫʹ��������ܣ������������н������������Զ���һ���ļ���׺Ϊtype-map����õķ������������ļ����������ã�

AddHandler type-map .var

���ͱ��ļ�Ӧ��������������Դͬ�����Ҷ�ÿ����Ч���ֶ���һ����(entry)��ÿ����������������HTTPͷ����ɣ���ͬ���ֵĿ��ÿ��зֿ������в������п��С�ϰ���ϣ����ͱ���һ�������������ʵ���Ͽ���Ϊ��ʼ(�ⲻ�DZ���ģ������Ҳ�ᱻ����)��������һ��������Դfoo������Ϊfoo.var�����ͱ��ļ���

URI: foo

URI: foo.en.html
Content-type: text/html
Content-language: en

URI: foo.fr.de.html
Content-type: text/html;charset=iso-8859-2
Content-language: fr, de

ע�⣺��ʹ��MultiViews����Ϊ On �����ͱ���Ȼ�������ļ���׺���������ͬ�ı��־��в�ͬ����ԴƷ�ʣ��Ϳ��Զ�ý������ʹ��"qs"��������ʾ���ֲ�ͬ��������ʾ��һ��ͼƬ�� jpeg, gif, ASCII-art ������Ч���֣�

URI: foo

URI: foo.jpeg
Content-type: image/jpeg; qs=0.8

URI: foo.gif
Content-type: image/gif; qs=0.5

URI: foo.txt
Content-type: text/plain; qs=0.01

qs��ȡֵ��Χ��0.000��1.000��ȡֵΪ0.000�ı�����Զ���ᱻѡ��û��ָ��qsֵ�ı�����qsֵΪ1.0��qsֵ��ʾһ������������������ֵ�"Ʒ��"�������ڱ���һ����Ƭʱ��jpegͨ�����ַ���ͼ�и��ߵ�Ʒ�ʣ������Ҫ���ֵı�������һ��ASCII-art ����ô��Ȼ�ַ���ͼ�ͻ��jpeg�ļ��и��ߵ�Ʒ�ʡ���ˣ�qs��ֵȡ���ڱ��������ֵ���Դ����

mod_negotation���ͱ��ĵ�����������HTTPͷ���б�

Multiviews

MultiViews��һ�����ÿ��Ŀ¼��ѡ�Ҳ����˵������httpd.conf��.htaccess(�����ȷ������AllowOverride)�ļ��е�<Directory>��<Location>��<Files>���ö��У���Optionsָ����ָ����ע�⣬Options All ����������MultiViews ���������ȷ��ָ����

MultiViews��Ч���ǣ�����������յ���/some/dir/foo�����󣬶�/some/dir/foo�������ڣ��������/some/dir������MultiViews �����������������Ŀ¼�����е�foo.* �ļ�������Ч��α��һ��˵����Щfoo.* �ļ������ͱ������������ͬ��ý�����ͼ����ݱ��룬��ѡ����������ʵ�ƥ�䷵�ظ��ͻ���

MultiViews�������ڷ���������һ��Ŀ¼ʱ������DirectoryIndexָ���������ļ�������������ˣ�

DirectoryIndex index

��index.html��index.html3���棬�����������һ��Ȩ�⣻�����û�У�������index.cgi �����������ִ������

���һ��Ŀ¼��û���κ��ļ�����mod_mime����ʶ��ı�ʾ���ַ������������͡����Ժͱ���ĺ�׺����ô������ȡ����MultiViewsMatchָ������ã����ָ���������MultiViewsЭ���н�ʹ�õĴ���������������������׺���͡�

top

Э�̵ķ���

Apache��һ�����ͱ����ij��Ŀ¼���ļ����еõ�һ����Դ�����б��Ժ󣬻�ʹ�����ַ���֮һѡ����ܵ�"���"���ַ��ظ��ͻ���ʹ��Apache������Э�̹��ܲ�����Ҫ�˽���ϸ�ڣ������ĵ�����Щ����������ϸ˵����������Ȥ���˿�����

Э�������ַ�����

  1. ʹ��Apache�㷨�ķ���������Э�� ��ͨ������µ�Ĭ�Ϸ�����ʹ������㷨(��������ϸ������)��Ϊ�˵õ����õ�Ч����Apache��ʱ��"����"һ���ض���Ԫ(dimension)��Ʒ�����ӣ��䷽���Ժ����ϸ������
  2. ͸������Э�� �����������ȷ����RFC2295�ж���Ļ��Ʒ�������ʱ��ʹ�á����ַ������Ը����������"���"����ѡ�����ȫ���ƣ������Ч��Ҳȡ���������ʹ�õ��㷨����Ϊ͸��Э�̹��̵�һ���֣����������Ҫ��Apacheִ��RFC2296�ж����"Զ�̱���ѡ���㷨"��

Э�̵ı�Ԫ(Dimension)

��Ԫ˵��
ý�������������Acceptͷ��ָ����ѡ����и�����Ʒ�����ӹ�������������Ҳ������Ʒ������(����"qs")��
�����������Accept-Languageͷ��ָ����ѡ����и�����Ʒ�����ӹ��������ֿ����������һ���������Թ�����
�����������Accept-Encodingͷ��ָ����ѡ����и�����Ʒ�����ӹ�����
�ַ����������Accept-Charsetͷ��ָ����ѡ����и�����Ʒ�����ӹ��������ֿ���ָ��һ���ַ�����Ϊý�����͵�һ��������

ApacheЭ���㷨

Apacheʹ�������㷨ѡ����ܵ�"���"���ַ��ظ�����������㷨���ܱ������á���������£�

  1. ���ȣ���ÿ��Э�̱�Ԫ��������ʵ���Accept* ͷ������ÿ������ָ��һ��Ʒ�ʡ����һ����Ԫ��Accept* ͷָʾ������������֣����޳����������û�б����ˣ���ת������4��
  2. ˳��ִ�����µIJ��ԣ�ʹ�����޳��ķ�����ѡ��"���"���֡�����ͨ�����Եı��ֽ����޳���ÿ��������ɺ������ʣһ�����֣�����Ϊ���ƥ�䣬ת������3���������һ�����������һ�����ԡ�
    1. ��Acceptͷ��Ʒ�����ӳ��Ըñ���ý�����͵Ļ�ԭƷ�����ӣ�ѡ��˻�����ߡ�
    2. ѡ������Ʒ��������ߵı��֡�
    3. ʹ��Accept-Languageͷ�е�����˳��(������ڵĻ�)������ʹ��LanguagePriorityָ���е�����˳��(������ڵĻ�)ѡ����ƥ������ԡ�
    4. ѡ�����"�ȼ�"ý������ı���(����ȷ��text/html��ý������)��
    5. ѡ��Accept-Charsetͷ��ָ��������ַ���ý������ı��֡����û����ȷָ������ʹ��ISO-8859-1�ַ���������text/* ý�����Ͷ�û����ȷ����һ���ض��ַ��������ı��֣���ʹ��ISO-8859-1��
    6. ѡ����֮�����ַ�������ISO-8859-1�ı��֣����û�������ı��֣���ѡ�����еı��֡�
    7. ѡ����ѱ���ı��֡���������û�������Խ��ܵı���ı��֣���ѡ��֮������������ڻ�ϱ���Ļ���δ����ı��֣���ѡ��δ����ı��֡�������еı��ֶ��DZ���ģ��������б��ֶ���δ����ģ���ѡ�����еı��֡�
    8. ѡ�����ݳ�����С�ı��֡�
    9. ѡ��ʣ����ֵ���ǰһ����������ֻ������ͱ��ļ��еĵ�һ�������Ŀ¼�ж�ȡ���ֱ�ʱ����ASCII����˳��ĵ�һ���ļ���
  3. ��ʱ�����㷨�Ѿ�ѡ����һ��"���"���֣�����֮������Ϊ��Ӧ��HTTP��Ӧͷ��Vary��ָ��Э�̵ı�Ԫ(������ͻ���������ô���Ϣ�������Դ)��
  4. ���û��һ�����ֱ�ѡ��(��Ϊû��һ�ֿ��Ա����������)���򷵻�һ��״ֵ̬Ϊ406��Ӧ�壬������һ��HTML��ʽ����Ч�����б�ͬ������HTTPͷ��Vary��ָ���˱��ֵı�Ԫ��
top

����Ʒ��ֵ

Apache��ʱ��ı䰴��ApacheЭ���㷨Ӧ�ñ��ϸ������Ʒ��ֵ���Ӷ��������û�з��������ľ�ȷ����Ϣʱ��ø��õ�Ч������Щ�ܳ��õ���������������£��ᷢ�͵��±���ѡ������Acceptͷ��Ϣ�����һ�����������������������ȷ����Ϣ���򲻻��д��Ҳ�����

ý��������ͨ���

Accept: ����ͷָ����ý�����͵���ѡ�Ҳ���԰���"ͨ��"ý�����ͣ���"image/*"��ƥ���κ��ַ�����"*/*"�����ԣ����һ�����������

Accept: image/*, */*

��ָ�����Խ����κ���"image/"��ͷ�����ͣ��������κ�����(���ǰ���"image/*"���Ƕ����)����Щ������ͻ��������й��µ�����ȷָ����������ͺ��渽��ͨ�����ͣ����磺

Accept: text/html, text/plain, image/gif, image/jpeg, */*

��Ŀ���DZ�������ȷ�г�������ѡ�������ͬ�ı���Ҳ���ԡ������÷����Dz����ԣ�����"*/*"��ʵ����ͨ�������������ͣ����Բ��Ƽ������ã���Ӧ�ö�"*.*"����һ���ϵ͵�Ʒ��(��ѡ)ֵ0.01���磺

Accept: text/html, text/plain, image/gif, image/jpeg, */*; q=0.01

��ȷָ��������û��Ʒ��ֵ��������Ʒ��ֵ��Ĭ�ϵ����ֵ1.0����"*/*"�ǽϵ͵�0.01�����ԣ�ֻ����û��ƥ����ȷָ�����͵ı���ʱ���Ż᷵���������͡�

���Accept: ͷû��ָ���κ�q���ӣ���ôApache����"*/*"��qֵΪ0.01��ģ�������Ƽ�����Ϊ����������"type/*"��qֵΪ0.02��ʹ֮������"*/*"�����Accept: ͷ���κ�ý������ָ����q���ӣ�������ʹ����Щ����ֵ����ʹ��ȷ������Ϣ�������������������

����Э�̵�����

��Apache 2.0�е�Э���㷨�У�������һЩ����Ĺ���������������Э��ƥ��ʧ�ܵ�����£����������Э��

ͨ�������ͻ��������������һ�������������Accept-language��ƥ���Ψһ��ҳ��ʱ���������᷵��һ��"No Acceptable Variant" ���� "Multiple Choices" ��Ӧ�����ǣ��п���ͨ������Apache��������Щ����µ�Accept-language ��������һ�����Ƿdz�ƥ��ͻ�������ı����Ա�����Щ������Ϣ�ij��֡�ForceLanguagePriorityָ��������������ִ�����Ϣ�����ӹ���LanguagePriorityָ����Ƶķ������ö����ơ�

������������ƥ��ʧ��ʱ�����������Ӽ���ƥ�䡣���磬���һ���ͻ�������һ��������en-GB��Ӣ��Ӣ���ҳ�棬��������ֻ֧��HTTP/1.1��׼�ļ򵥵�en ��(ע�⣬��Accept-Language��ָ��en-GB������en���������Ǹ�������Ϊ���ƺ���ʾ�Ķ����˶�Ӣ��Ӣ��ȴ��������Ӣ������ҵ��ǣ�������еĿͻ��˵�Ĭ������ȴ��������)�����û�п���ƥ������ԣ���������������������Ӽ����趨������"No Acceptable Variants"���󣬻��߰�LanguagePriorityָ������Э��Apache���������ڿͻ��ɽ������Ե��б��и���һ�����кܵ�Ʒ��ֵ�ĸ����ԣ����ǣ�����ͻ�����"en-GB; q=0.9, fr; q=0.8" ��ô������"fr"���ı��������ѭHTTP/1.1��׼��ʹ��ȷ���õ�����������������DZ���ġ�

Ϊ��֧������ȷ���û���ѡ���Եĸ߼�����(����cookies�������URL·��)����2.0.47�汾��mod_negotiationģ�鿪ʼ֧��prefer-language����������������ڲ��Ұ���һ�����Ա�ǩ��mod_negotiationģ�齫�᳢��ѡ��һ��ƥ��ı��֡���������������ı��֣�����ʹ������ͨ����Э�̹��̡�

ʾ��

SetEnvIf Cookie "language=(.+)" prefer-language=$1

top

͸������Э�̵���չ

Apache�ڱ����б���ʹ����һ���µ�{encoding ..}Ԫ������DZ��֣��Ӷ���չ��͸������Э��Э��(RFC2295)��ʵ��RVSA/1.0�㷨(RFC2296)��Ŀ����ʶ���б��б�����ı��֣���Ϊ���Ա�Accept-Encoding����ͷ���ܵĺ�ѡ���֡���ѡ����ѱ���֮ǰ��RVSA/1.0��ʵ�ֲ����Ʒ��������������������㡣

top

����������ת��˵��

���ʹ������Э�̣������ļ������в�ֹһ����׺����˾Ϳ���ѡ��ͬ������ת�������׺˳��ͨ�����޹ؽ�Ҫ��(�μ�mod_mime�ĵ�)��

һ�����͵���MIME���ͺ�׺���ļ�(��html)�����׺�����DZ����׺(��gz)��Ҳ���������Ա��ֺ�׺(��en)

���磺

�ļ�������Ч����Ч���������ӣ�

�ļ�����Ч������Ч����
foo.html.enfoo
foo.html
-
foo.en.htmlfoofoo.html
foo.html.en.gzfoo
foo.html
foo.gz
foo.html.gz
foo.en.html.gzfoofoo.html
foo.html.gz
foo.gz
foo.gz.html.enfoo
foo.gz
foo.gz.html
foo.html
foo.html.gz.enfoo
foo.html
foo.html.gz
foo.gz

���Կ������ϱ���ʹ��û���κκ�׺�ij���(��foo)���ǿ��еģ����ŵ��ǿ�������rsp. �ļ�����ʵ���ͣ��������ڽ��������ģ����磬�����޸ij����������ı�htmlΪshtml��cgi ��

���ϣ���ڳ����м���ʹ��MIME����(��foo.html)�������Ժ�׺(������һ�������׺)���������MIME���ͺ�׺���ұ�(��foo.html.en)��

top

����˵��

�����������һ�����ض�URL�����ı�����ʽ(representation)����ô��һ�θ�URL������ʱ������Ϳ���ʹ���������ǣ���������Դ�ڷ��������ǿ�Э�̵ģ������ֻ�е�һ������ı�������ȷ�ģ���������ڻ��������ж�ȡ���Ľ���Ǵ���ġ�Ϊ������������ķ�����Apacheͨ��������Э��֮�󷵻ص���Ӧ���Ϊ�����Ա�HTTP/1.1�ͻ��˻��塣����Apache��֧��HTTP/1.1Э��Ĺ�������������Э�̵�����

������HTTP/1.0�ͻ��˵�����(������򻺴�)��CacheNegotiatedDocsָ��������������Э�̵����󡣴�ָ��Ӧ�ó������������������������������У�û�в��������Ҷ�����HTTP/1.1�ͻ��˵�����û��Ӱ�졣

��������HTTP/1.1�淶�Ŀͻ��ˣ�Apache����һ��VaryӦ��ͷ��ָ����Ӧ���Э�̱�Ԫ���������ʹ�������Ϣ���ж�һ�����������Ƿ���Դӱ��ظ������ṩ����Ϊ�˹�������ʹ�ñ��ظ���������Э�̱�Ԫ��������force-no-vary����������

top

������Ϣ

�����й�����Э�̵���Ϣ�����Բμ�Alan J. Flavell��Language Negotiation Notes������ע�⣬���ĵ�����û�������԰���Apache2.0�еĸı䡣