- 浏览: 338638 次
- 性别:
- 来自: 北京
博客专栏
-
高性能PHP框架Yii分析...
浏览量:84898
文章分类
最新评论
-
huxiaoyunhust:
价值观这种东西,说不好听是口号,其实是公司每天潜移默化的感染, ...
关于企业价值观的一点点感悟 -
silentime:
stef831018 写道你想多了,企业价值观就两个字:利益怎 ...
关于企业价值观的一点点感悟 -
stef831018:
你想多了,企业价值观就两个字:利益
关于企业价值观的一点点感悟 -
guoyuqiangf8:
关于企业价值观的一点点感悟 -
silentime:
mangguo 写道推荐大家去看看我写的python入门,可以 ...
python如何打印变量的类型
该功能使得服务器可以根据agent指定的http头来选择合适的资源。
涉及的http头包括: Accept-*
涉及的Apache中的知识: 类型表
1。 需要模块 : modules/mod_negotiation.so
2。 需要在目录的Options中添加: MultiViews; 如: Options FollowSymLinks MultiViews Indexes
3。 参考文档: http://apache.jz123.cn/content-negotiation.html
4。 该功能可能会影响到rewrite,参考: http://www.linuxpk.com/4941.html
apache根据你给的资源名称a,查找所有的a.*资源,加入有两种资源: a.txt 和a.php, 在类型表中查出:
.txt 对应文档类型为: text/plain
.php 对应文档类型为: application/x-httpd-php
如果请求时使用的 accept为:
text/plain ,则返回a.txt
如果请求时使用的 accept为:
application/x-httpd-php
,则返回a.php
如果请求时使用的accept为: text/none ,找不到这种类型,则协商失败,apache返回406,并返回所有可用的类型列表,如:
Not Acceptable
An appropriate representation of the requested resource /a could not be found on this server.
Available variants:
Apache可以协商的内容基本有四类:
- 文档类型: content-type, 通过accept来说明
- 语言: language, 通过accept-language来说明
- 字符集: charset, 通过accept-charset来说明
- 编码: encoding, 通过accept-encoding来说明; (注意是传输过程的编码,不是字符的编码)
相关源码参考:
modules/mappers/mod_negotiation.c
- typedef struct {
- apr_pool_t *pool;
- request_rec *r;
- neg_dir_config *conf;
- char *dir_name;
- int accept_q; /* 1 if an Accept item has a q= param */
- float default_lang_quality; /* fiddle lang q for variants with no lang */
- /* the array pointers below are NULL if the corresponding accept
- * headers are not present
- */
- apr_array_header_t *accepts; /* accept_recs */
- apr_array_header_t *accept_encodings; /* accept_recs */
- apr_array_header_t *accept_charsets; /* accept_recs */
- apr_array_header_t *accept_langs; /* accept_recs */
- apr_array_header_t *avail_vars; /* available variants */
- int count_multiviews_variants; /* number of variants found on disk */
- int is_transparent; /* 1 if this resource is trans. negotiable */
- int dont_fiddle_headers; /* 1 if we may not fiddle with accept hdrs */
- int ua_supports_trans; /* 1 if ua supports trans negotiation */
- int send_alternates; /* 1 if we want to send an Alternates header */
- int may_choose; /* 1 if we may choose a variant for the client */
- int use_rvsa; /* 1 if we must use RVSA/1.0 negotiation algo */
- } negotiation_state;
typedef struct { apr_pool_t *pool; request_rec *r; neg_dir_config *conf; char *dir_name; int accept_q; /* 1 if an Accept item has a q= param */ float default_lang_quality; /* fiddle lang q for variants with no lang */ /* the array pointers below are NULL if the corresponding accept * headers are not present */ apr_array_header_t *accepts; /* accept_recs */ apr_array_header_t *accept_encodings; /* accept_recs */ apr_array_header_t *accept_charsets; /* accept_recs */ apr_array_header_t *accept_langs; /* accept_recs */ apr_array_header_t *avail_vars; /* available variants */ int count_multiviews_variants; /* number of variants found on disk */ int is_transparent; /* 1 if this resource is trans. negotiable */ int dont_fiddle_headers; /* 1 if we may not fiddle with accept hdrs */ int ua_supports_trans; /* 1 if ua supports trans negotiation */ int send_alternates; /* 1 if we want to send an Alternates header */ int may_choose; /* 1 if we may choose a variant for the client */ int use_rvsa; /* 1 if we must use RVSA/1.0 negotiation algo */ } negotiation_state;
对于协商的表达方式都是一样的,如:
Accept: */*
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
其中“,”和“;”的分隔或许不太好明白其含义,其实,其格式是这样的:
name;q=N;charset=TEXT
如果要表达多组,则用“,”分隔;如:
name;q=N;charset=TEXT,name;q=N;charset=TEXT
其中,q、charset都是可以省略的,如:
Accept: */*
只有一组说明,而且是省略了q和charset
相关源码参考:
modules/mappers/mod_negotiation.c
- typedef struct accept_rec {
- char *name; /* MUST be lowercase */
- float quality;
- float level;
- char *charset; /* for content-type only */
- } accept_rec;
typedef struct accept_rec { char *name; /* MUST be lowercase */ float quality; float level; char *charset; /* for content-type only */ } accept_rec;
关于文档类型的协商依赖的是: docs/conf/mime.types
如:
文档类型 资源扩展名
text/html html htm
text/css css
text/plain txt text conf def list log in
关于语言和字符集的协商依赖的是: docs/conf/charset.conv
如:
# Lang-abbv Charset Language
#---------------------------------
en ISO-8859-1 English
UTF-8 utf8 UTF-8
Unicode ucs Unicode
th Cp874 Thai
ja SJIS Japanese
ko Cp949 Korean
zh Cp950 Chinese-Traditional
zh-cn GB2312 Chinese-Simplified
zh-tw Cp950 Chinese
。。。
其中,第一列是语言的缩写,协商时一般用缩写; 第二列是字符集
---------------------------
内容可能是根据多个条件来协商的,那么对于一个协商的资源可能涉及到多个扩展名的,如:
content.en.html.gz
该资源如果写成了:
content.html.en.gz
也是可以找到的,只是在做超链接的时候,如果写成了: content.gz.html.en 就找不到了
参考: http://httpd.apache.org/docs/2.2/content-negotiation.html#naming
关于内容协商与cache
对于http1.0来讲,经过协商的内容是不建议cache的;在http1.1中添加了vary的http头,用来告知客户端内容是根据哪些条件来协商的,这样客户端可以尽可能的利用cache,如果协商条件不变的话就可以使用cache的。
====================
参考资料:
http://httpd.apache.org/docs/2.2/content-negotiation.html
http://httpd.apache.org/docs/2.2/mod/mod_negotiation.html
原文地址:http://phpor.net/blog/post/786/
发表评论
-
《高性能PHP应用开发》读书笔记
2014-12-24 09:20 794注:只记录了一些关键点,部分知识点/内容请看到的朋友 ... -
HTTP API Design Guide(HTTP API接口设计指南)
2014-09-09 18:27 3511原文在这里:https://github.com/inte ... -
IE系列不支持圆角等CSS3属性的解决方案
2013-07-23 23:38 1279IE系列浏览器不支持CSS的圆角(border-radius ... -
[转]HTTP缓存算法
2013-01-04 14:34 1350原文地址:http://www.p ... -
【转】漫谈社区PHP 业务开发
2012-11-19 10:07 1117原文地址:http://stblog.baidu-tech.c ... -
【转】javascript中的urlencode
2012-09-20 23:04 1149原文地址:http://www.cnblo ... -
Yii分析13:Yii核心组件之AssetManager
2012-04-10 00:37 4396我们通过使用来讲解CAssetManager的使用和工 ... -
Yii分析12:Yii核心web组件之会话类CHttpSession
2012-03-06 09:44 3228CHttpSession提供session级的数据管理和配置 ... -
Yii分析11:Yii核心组件之错误处理类CErrorHandler
2012-02-24 09:57 4133类如其名,CErrorHandler在Yii中主要的功能 ... -
Yii分析10:Yii核心组件之数据库类CDbConnection
2012-02-17 09:18 8538数据库类几乎是每个PHP框架必不可少的组件之一,Yii的 ... -
Javascript面向对象之十装饰者模式-《javascript设计模式》笔记
2012-01-18 14:59 1490装饰者模式的含义是将要装饰的对象作为一个成员放在装饰者的内部, ... -
Javascript面向对象之九适配器模式-《javascript设计模式》笔记
2012-01-18 14:58 1304关于适配器模式的定义:适配器模式(有时候也称包装样式或者包装) ... -
Javascript面向对象之八门面模式-《javascript设计模式》笔记
2012-01-17 14:43 1346关于门面模式的定义:门面模式为了系统提供一个 统一的高层接口供 ... -
Javascript面向对象之七组合模式-《javascript设计模式》笔记
2012-01-17 14:42 1376关于组合模式的定义:组合模式(Composite Patter ... -
Javascript面向对象之五工厂模式-《javascript设计模式》笔记
2012-01-13 11:31 1197工厂模式和单例模式(http://blog.sina.com. ... -
Javascript面向对象之四链式调用-《javascript设计模式》笔记
2011-12-30 14:22 13761.链式调用:jquery可能是目前大家最常用到的js框架了, ... -
Javascript面向对象之三单例模式-《javascript设计模式》笔记
2011-12-30 14:21 13091.单例模式概述源自百 ... -
Javascript面向对象之二继承-《javascript设计模式》笔记
2011-12-29 10:49 11631.关于继承:百度百科对继承的解释是:继承是指一个对象直接使用 ... -
Javascript面向对象之一对象成员的定义-《javascript设计模式》笔记
2011-12-29 10:48 1685序: 刚接触javascript的时候,觉得这语言有点儿 ... -
Yii分析9:CController控制视图(Cview)的展现
2011-11-30 00:01 4876《The Definitive Guide to ...
相关推荐
标题中的"apache2.4.35"和"apache2.4.23"指的是Apache服务器的两个不同版本,其中2.4.35是较新的版本,而2.4.23则相对旧一些。 Apache 2.4系列是Apache服务器的一个主要分支,引入了许多新特性和性能优化。以下是...
这份文档涵盖了从Apache HTTP Server的版本升级指导、新特性介绍到详细的服务器配置指南,特别是它包含了服务器的全局配置、特定模块配置、环境变量设置、错误处理、日志文件管理、URL映射、动态共享对象(DSO)支持...
内容协商 动态共享对象(DSO) 环境变量 日志文件 从URL到文件系统的映射 性能调整 安全方面的提示 服务器全局配置 SSL/TLS 加密 CGI脚本的Suexec执行 URL重写指南 虚拟主机 如何.../指南 认证、授权、...
`content-negotiation.html`讨论了内容协商,这是Apache2的一种特性,允许服务器根据客户端的能力和偏好(如语言、编码或版本)来提供最合适的资源。 `suexec.html`可能涵盖了suEXEC工具的使用,这是一个安全机制,...
- **内容协商**:探讨了如何根据客户端请求的偏好(如语言、媒体类型)来提供最合适的网页内容。 - **过滤器应用**:介绍了一系列用于处理和修改内容的Apache过滤器,包括压缩、加密等功能。 ### 6. 索引优化 - **...
内容协商 动态共享对象(DSO) 环境变量 日志文件 从URL到文件系统的映射 性能调整 安全方面的提示 服务器全局配置 SSL/TLS 加密 CGI脚本的Suexec执行 URL重写指南 虚拟主机 如何.../指南 认证、授权、...
内容协商 动态共享对象(DSO) 环境变量 日志文件 从URL到文件系统的映射 性能调整 安全方面的提示 服务器全局配置 SSL/TLS 加密 CGI脚本的Suexec执行 URL重写指南 虚拟主机 如何.../指南 认证、授权、...
7. **内容协商**:服务器可以根据客户端的偏好(如语言、编码等)提供最合适的资源版本,提高用户体验。 在`Win32-2.2.34 VC10`目录下,你可以找到适用于32位Windows系统的编译版本。VC10指的是使用Visual Studio ...
7. **内容协商**:根据客户端的Accept头信息,Apache可以自动选择最适合的资源版本,如HTML、XML、JSON等。 8. **缓存机制**:通过mod_cache模块,Apache可以缓存静态内容,提高响应速度。 9. **URL重写**:mod_...
9. **安全强化**:除了基本的SSL/TLS支持,Apache 2.4还引入了更多安全特性,如HTTP/2的优先级协商,以及抵御跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的防护。 10. **模块更新**:许多核心模块如`mod_headers`, ...
6. **模块支持**:介绍了Dynamic Shared Object (DSO) 支持,内容协商以及自定义错误响应。 7. **多处理模块(MPMs)**:文档解释了Apache中多种MPMs的工作原理及其配置方法。 8. **环境变量**:探讨了Apache...
10. **URL映射与内容协商**:Apache通过mod_rewrite模块可以实现URL重写和内容协商,这对于网站的SEO和动态内容分发至关重要。 11. **虚拟主机**:Apache支持在同一台服务器上运行多个独立的网站,源代码会揭示如何...
4. **安全性增强**:Apache 2.4增加了更多安全特性,如HTTP/2的ALPN支持,用于TLS协议协商,以及新的模块如mod_security,提供Web应用防火墙功能。 5. **配置改进**:配置文件语法有所调整,使得配置更加简洁且易于...
为了优化基于Apache的网络通信模型,开发者还可以考虑使用HTTP/2协议,它允许在一个TCP连接上复用多个HTTP请求,减少了TCP握手和SSL/TLS协商的开销。此外,还可以启用HTTP压缩来减小传输的数据量,或者使用缓存技术...
内容协商 自定义错误响应 动态共享对象(DSO)支持 Apache的环境变量 过滤器(Filter) 词汇表 Apache处理器的使用 Apache HTTP Server Version 2.2 文档 编译与安装 启动Apache Apache许可证 2.0 版 日志文件 多路处理...
5. **content-negotiation.html** - 内容协商:Apache支持内容协商,允许服务器根据客户端的能力和偏好返回合适的响应,比如选择不同的语言或编码。这部分会讲解如何配置服务器以实现这一功能。 6. **install.html*...
内容协商是Apache服务器根据客户端能力(如浏览器类型、语言偏好等)提供最合适的资源的方式。这个主题可能包括如何设置HTTP头部,以使服务器自动选择最佳的内容版本。 6. **suexec.html** - suEXEC机制 suEXEC是...
Apache SSL(Secure Sockets Layer)加密机制是网络服务器安全配置中的关键组成部分,它为Web通信提供了数据加密、服务器身份验证和消息完整性检查等安全保障。在本文中,我们将深入探讨Apache SSL加密机制的工作...
内容协商 动态共享对象(DSO) 环境变量 日志文件 从URL到文件系统的映射 性能调整 安全方面的提示 服务器全局配置 SSL/TLS 加密 CGI脚本的Suexec执行 URL重写指南 虚拟主机 如何.../指南 认证、授权、...