Apache HTTP Server �汾2.2
Apache֧��HTTP/1.1�淶�ж��������Э�̣������Ը���������ṩ�IJ���ѡ��һ����Դ����ʵ�ý�����͡����ԡ��ַ����ͱ���ı��ַ�ʽ������ʵ����һЩ����������Ͳ���������Э����Ϣ�������ܴ����������
��������mod_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)��
����ʹ����������;��֮һ��������ṩ�йظ����ֵ���Ϣ����ʵ�ֶ���Դ��Э�̣�
*.var
�ļ�)��ȷָ�������ֵ��ļ��������ͱ���һ����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
��һ�����ÿ��Ŀ¼��ѡ�Ҳ����˵������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Э���н�ʹ�õĴ������������������������͡�
Apache��һ�����ͱ����ij��Ŀ¼���ļ����еõ�һ����Դ�����б��Ժ�ʹ�����ַ���֮һѡ����ܵ�"���"���ַ��ظ��ͻ���ʹ��Apache������Э�̹��ܲ�����Ҫ�˽���ϸ�ڣ������ĵ�����Щ����������ϸ˵����������Ȥ���˿�����
Э�������ַ�����
��Ԫ | ˵�� |
---|---|
ý������ | �������Accept ͷ��ָ����ѡ����и�����Ʒ�����ӹ�������������Ҳ������Ʒ������(����"qs")�� |
���� | �������Accept-Language ͷ��ָ����ѡ����и�����Ʒ�����ӹ��������ֿ����������һ���������Թ����� |
���� | �������Accept-Encoding ͷ��ָ����ѡ����и�����Ʒ�����ӹ����� |
�ַ��� | �������Accept-Charset ͷ��ָ����ѡ����и�����Ʒ�����ӹ��������ֿ���ָ��һ���ַ�����Ϊý�����͵�һ�������� |
Apacheʹ�������㷨ѡ����ܵ�"���"���ַ��ظ�����������㷨���ܱ������á���������£�
Accept
ͷ��Ʒ�����ӳ��Ըñ���ý�����͵Ļ�ԭƷ�����ӣ�ѡ��˻�����ߡ�Accept-Language
ͷ�е�����˳��(������ڵĻ�)������ʹ��LanguagePriority
ָ���е�����˳��(������ڵĻ�)ѡ����ƥ������ԡ�Accept-Charset
ͷ��ָ��������ַ���ý������ı��֡����û����ȷָ������ʹ��ISO-8859-1�ַ���������text/*
ý�����Ͷ�û����ȷ����һ���ض��ַ��������ı��֣���ʹ��ISO-8859-1��Vary
��ָ��Э�̵ı�Ԫ(������ͻ���������ô���Ϣ�������Դ)��Vary
��ָ���˱��ֵı�Ԫ��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
Apache�ڱ����б���ʹ����һ���µ�{encoding ..}
Ԫ������DZ��֣��Ӷ���չ��������Э��Э��(RFC2295)��ʵ��RVSA/1.0�㷨(RFC2296)��Ŀ����ʶ���б��б�����ı��֣���Ϊ���Ա�Accept-Encoding
����ͷ���ܵĺ�ѡ���֡���ѡ����ѱ���֮ǰ��RVSA/1.0��ʵ�ֲ����Ʒ��������������������㡣
���ʹ������Э�̣������ļ������в�ֹһ��������˾Ϳ���ѡ��ͬ������ת�������˳��ͨ�����ؽ�Ҫ��(�μ�mod_mime�ĵ�)��
һ�����͵���MIME���ͺ����ļ�(��html
)����������DZ����(��gz
)��Ҳ���������Ա��ֺ�(��en
)
���磺
�ļ�������Ч����Ч���������ӣ�
�ļ��� | ��Ч���� | ��Ч���� |
---|---|---|
foo.html.en | foo foo.html | - |
foo.en.html | foo | foo.html |
foo.html.en.gz | foo foo.html | foo.gz foo.html.gz |
foo.en.html.gz | foo | foo.html foo.html.gz foo.gz |
foo.gz.html.en | foo foo.gz foo.gz.html | foo.html |
foo.html.gz.en | foo foo.html foo.html.gz | foo.gz |
���Կ������ϱ���ʹ��û���κκ��ij���(��foo
)���ǿ��еģ����ŵ��ǿ�������rsp. �ļ�����ʵ���ͣ��������ڽ��������ģ����磬�����ij����������ı�html
Ϊshtml
��cgi
��
���ϣ���ڳ����м���ʹ��MIME����(��foo.html
)�������Ժ�(������һ�������)���������MIME���ͺ����ұ�(��foo.html.en
)��
�����������һ�����ض�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
����������
�����й�����Э�̵���Ϣ�����Բμ�Alan J. Flavell��Language Negotiation Notes������ע�⣬���ĵ�����û����������Apache2.0�еĸı䡣