httpd协议及其功能介绍

一、http协议

1、http协议的版本:

http/0.9: 诞生于1991,仅用于传输html文档,不能包含图片

http/1.0: 引入了MIME,支持多媒体数据的处理,keep-alive(保持连接),有缓存功能

http/1.1: 支持更多的请求方法,更精细的缓存控制,持久连接

http/1.0和http/1.1之所以能够传输多媒体数据,是因为引入了MIME

MIME: Multipurpose Internet Mail Extension

MIME引入了base64的编码机制,能够实现将二进制数据编码成文本发送,并能够让接收方还原回原来的格式;

2、HTTP报文:

HTTP事务:一次请求以及与其对应的响应

HTTP资源请求的方法:GET、PUT、HEAD(只发报文首部响应就可以,你有没有告诉我一声)、POST、DELETE

1)HTTP请求:request

HTTP请求报文

报文格式:

<method> <request-URL> <version>起始行,请求行

<headers>(名称+值)

<entity-body>  实体 (两次回车加一个空白行到这里)

2)HTTP响应:response

HTTP响应报文

报文格式:

<version> <status> <reason-phrase> 起始行,响应行

<headers>

<entity-body>

<method>: 请求方法, 希望服务器端执行的动作,如GET、HEAD、POST等

<request-url>: 请求的资源,可以是相对路径,也是完整的URL

<version>:协议版本,格式HTTP/<major>.<minor>,如http/1.0

<headers>:HTTP首部

<status>: 状态码

<reason-phrase>:原因短语,数字状态码易读信息

<entity-body>: 主体部分

HTTP请求方法:

GET:请求获取一个资源,需要服务器发送

HEAD:跟GET相似,但其不需要服务发送资源而仅传回响应首部;

POST:支持HTML表单提交,表单中有用户填入的数据,这些数据会发送到服务器端,由服务器存储至某位置(例如发送处理程序)

PUT:与GET相反,向服务写入文档;例如发布系统

DELETE:请求删除URL指向的资源

OPTIONS:探测服务器端对某资源所支持的请求方法

TRACE:跟踪请求要经过的防火墙、代理或网关等

扩展方法:LOCK、MKCOL、COPY、MOVE

3)HTTP协议:是一种stateless(无状态)协议

一次HTTP事务结束后,连接即行断开,所以效率会低很多,因此为了提高效率,要为http提供加速方式

(1)并行请求:多线程,但第一次是单线程的,只请求一个资源

(2)持久连接(保持连接):三次握手连接后不断开,直到最后一个请求结束后,再一次一次性断开。

但这样,持久连接也会有缺陷了,如果一个用户接进来以后,连接时间过长,这势必会造成资源被占用,所以也要有解决方法:

①:设定超时时长

②:限制最大资源请求

4)HTTP状态码:

1xx: 信息性状态码

2xx:成功状态码

200: OK

201: Created,接受并保存

3xx:重定向状态码

301:Moved Permanently, 永久重定向。在响应报文中使用首部“Location: URL”指定资源现在所处的位置;

302:Found,临时重定向,本资源有,但暂时不在本地。在响应报文中使用首部“Location: URL”指定临时资源位置;

304:Not Modified,没修改这个资源,就可以使用缓存了。条件式请求中使用;

4xx:客户端类的错误 ,例如服务器端资源不存在

403:Forbidden,请求被服务器拒绝,原因可能是没有权限

404:Not Found,服务器无法找到请求的URL

405:Method Not Allowed,不允许使用此方法请求相应的URL

5xx:服务器类的错误

500:Internal Server Error,服务器内部错误;如服务器端脚本无权限执行

502:Bad Gateway,代理服务器从上游收到了一条伪响应;

503:Service Unavailable,服务器此时无法提供服务,但将来可能可用;

5)HTTP首部:

(1)通用首部:请求和响应都可以使用的;

Connection:定义C/S之间关于请求/响应的有关选项

对于http/1.0, Connection: keep-alive

Via: 显示了报文经过的中间节点,意思就是找谁代理的

Cache-Control:缓存控制、缓存指示,能不能缓存,能缓存多久,在http/1.1中比较长见

Pragma

(2)请求首部:

Client-IP:

下四层的请求都是由内核处理的(内核空间),上面的就是用户空间了

Host: 请求的主机名和端口号,虚拟主机环境下用于不同的虚拟主机

Referer:指明了请求当前资源的原始资源的URL

User-Agent: 用户代理,使用什么工具发出的请求。爬虫也是一种用户代理

①、Accept首部:用户标明客户自己更倾向于支持的能力

Accept: 指明服务器能发送的媒体类型(有主类型和子类型)

Accept-Charset: 支持使用的字符集

Accept-Encoding: 支持使用的编码方式

Accept-Language: 支持使用语言

②、条件请求首部:

Expect:

If-Modified-Since: 是否在指定时间以来修改过此资源,如果改过,就发状态码,再发送资源

If-None-Match

跟安全相关的请求首部:

Authorization: 客户端提交给服务端的认证数据,如帐号和密码

Cookie: 客户端发送给服务器端身份标识。session是服务器端的,session是靠cookie去实现的

Cookie2

(3)响应首部:

Age:

Server: 向客户端标明服务器程序名称和版本

①、协商首部:

Accept-Ranges: 对当前资源来讲,服务器所能够接受的范围类型

Vary: 首部列表,服务器会根据列表中的内容挑选出最适合的版本发送给客户端。比如,比较繁忙的服务器会把资源经过压缩以后再发送给客户端,但客户端上有些低版本的浏览器不支持压缩格式,所以在服务器端会提供多种版本

②、跟安全相关的响应首部:

Set-Cookie: 服务器端在某客户端第一次请求时发给令牌

Set-Cookie2:

WWW-Authentication: 质询,即要求客户提供帐号和密码

(4)实体首部:用于指定实体属性

Location: 资源的新位置

Allow: 允许对此资源使用的请求方法

①、内容首部:

Content-Encoding

Content-Language

Content-Length

Content-Location

Content-Range

Content-Type

②、缓存首部:

ETag: 实体标签

Expires: 过期期限

Last-Modified: 上一次的修改时间

二、httpd功能特性介绍

httpd俗称apache,是目前市场份额最高的网络服务,它是高度模块化的,它的模块不但可以在编译时选择,而且在选择完成以后,这个模块到底启不启用也可以定义。

core + modules

DSO模块: Dynamic Shared Object

MPM: Multipath Processing Module,多道处理模块,非一个模块,而是对一种特性的称谓

prefork:

一个进程一个请求,预先forck好多个,prefork是基于事件分离器来工作的,而select的文件数最大不能超过1024个,也就是说prefork最多能处理1024个进程

worker:

一个进程多个线程,一个线程一个请求

event:

一个线程响应多个请求。event是基于事件驱动(event-driven)的,主要目的在于实现单线程响应多个请求;

1)监听套接字

Listen [IP:]port

此指令可以出现多次, 用于指定监听多个不同的套接字:

Listen 80

Listen 172.16.251.93:8080

2)配置使用keep alive

KeepAlive {On|Off}

KeepAliveTimeout 2

MaxKeepAliveRequests 50

3)MPM

<IfModule prefork.c>

StartServers: 默认启动的工作进程数;

MinSpareServers: 最少空闲进程数;

MaxSpareServers: 最大空闲进程数;

ServerLimit: 最大活动进程数;

MaxClients: 并发请求的最大数;

MaxRequestsPerChild: 每个子进程在生命周期内所能够服务的最多请求个数;

</IfModule>

<IfModule worker.c>

StartServers:启动的子进程的个数

MaxClients: 并发请求的最大数;

MinSpareThreads:最小空闲线程数;

MaxSpareThreads:最大空闲线程数;

ThreadsPerChild:每个子进程可生成的线程数;

MaxRequestsPerChild:每个子进程在生命周期内所能够服务的最多请求个数,0表示不限定;

</IfModule>

4)DSO模块加载方式

LoadModule module_name /path/to/module

如果使用相对路径,则对于ServerRoot所定义的位置而言;例如:

LoadModule php5_module /usr/lib64/httpd/modules/php5.so

让服务重载配置文件方能生效;

httpd -M: 列出已经装载的所有DSO及非DSO模块

httpd -l: 列出支持使用的非DSO模块

5)配置站点根目录

DocumentRoot /path/to/somewhere

6)配置页面访问属性

<Direcotry "/path/to/somewhere">

Options:

Indexes: 缺少指定的默认页面时,允许将目录中的所有文件以列表形式返回给用户;危险;

FollowSymLinks: 允许跟随符号链接所指向的原始文件;

None: 所有都启用;

All: 所有都启用;

ExecCGI: 允许使用mod_cgi模块执行CGI脚本;

Includes: 允许使用mod_include模块实现服务器端包含(SSI);

MultiViews:允许使用mod_negotiation实现内容协商;

SymLinksIfOwnerMatch:在链接文件属主属组与原始文件的属主属组相同时,允许跟随符号链接所指向的原始文件;

<Directory>

7)基于主机的访问控制

<Direcotry "/path/to/somewhere">

Options

AllowOverride None

Order Deny,Allow

Allow

Deny

<Directory>

二者都匹配或二者都无匹配项时,则以后者为准;否则,则以匹配到的为准;

Allow from

Deny from

IP, Network Address

172.16

172.16.0.0

172.16.0.0/16

172.16.0.0/255.255.0.0

8)配置日志功能

/var/log/httpd/

access.log: 访问日志,其需要记录的内容需要自定义

error.log: 错误日志

访问日志:

CustomLog "/path/to/access_log_file" Format_Name

LogFormat Format_String  Format_Name

%h: 客户端地址

%l: 远程登录名,通常为-

%u: 认证时的远程用户名,没有认证时为-

%t: 收到请求时的时间;

%r: 请求报文的起始行;

%>s: 响应状态码;

%b: 响应报文的长度,单位为字节

%{Header_Name}i: 记录指定请求报文首部的内容(value);

详情请参考:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

错误日志:

ErrorLog

9)路径别名

Alias /alias/ "/path/to/somewhere"

意味着访问http://Server_IP/alias/时,其页面文件来自于/path/to/somewhere这个位置;

10)设定默认字符集

AddDefaultCharset

11)基于用户的访问控制

虚拟用户:

文件:/etc/httpd/conf/.htpasswd

SQL数据库:

dbm:

ldap

认证类型(auth):

basic: 基本认证,帐号和密码明文发送;

digest:摘要认证,hash编程之后发送;

认证提供者(authentication provider):帐号和密码的存放位置

authn

授权机制(authorization):根据什么进行授权

(1) 编辑配置文件,为需要认证的目录配置认证机制

<Directory "/www/htdocs/fin">

Options None

AllowOverride AuthConfig

AuthType Basic

AuthName "Private Area"

#AuthBasicProvider file

AuthUserFile /etc/httpd/conf/.htpasswd

Require valid-user

</Directory>

(2) 使用htpasswd命令生成认证库

htpasswd

-c: 创建文件,创建第一个用户时使用

-m: 密码基于MD5编码存储

(3) 如果要基于组进行认证

<Directory "/www/htdocs/fin">

Options None

AllowOverride AuthConfig

AuthType Basic

AuthName "Private Area"

#AuthBasicProvider file

AuthUserFile /etc/httpd/conf/.htpasswd

AuthGroupFile /etc/httpd/conf/.htgroup

Require group GroupName

</Directory>

组文件:

组名: 用户1 用户2 用户3

12)虚拟主机

一个物理服务器提供多个站点; 使用虚拟主机得先取消中心主机

Web: Socket(IP, port)

基于不同的IP实现不同的虚拟主机

变化IP

基于不同的port实现不同的虚拟主机

变化port

基于不同的FQDN实现不同的虚拟主机

变化ServerName的值

NameVirtualHost *:80

<virtualhost IP:port>

ServerName

DocumentRoot ""

<Directory "">

Options

</Directory>

ServerAlias

ServerAdmin

</virtualhost>

虚拟主机的单独配置:

用户认证

访问日志

错误日志

别名

脚本别名

13)服务器status页面

内生的status信息,且此信息可以通过web预以显示

配置文件系统路径访问属性

<Directory [~] "">

</Directory>

<File [~] "">

</File>

配置URL访问属性

<Location  [~] "">

</Location>

<LocationMatch "">

</LocationMatch>

如果某要配置其属性的URL能映射到某具体文件系统路径,建议使用<Directory>;

处理器:是当文件被调用时,Apache内部表示形式;一般每种文件类型都有其隐式处理器;

显式的定义使用的处理器 SetHandler

<Location /URL>

SetHandler server-status

</Location>

定义访问控制机制

基于IP控制

基于用户控制

示例:

<Location /server-status>

SetHandler server-status

AuthType Basic

AuthName "Server Status"

AuthUserFile "/etc/httpd/conf/.htpasswd"

Require valid-user

Order deny,allow

Allow from all

</Location>

httpd协议及其功能介绍

时间: 2024-08-29 16:06:57

httpd协议及其功能介绍的相关文章

keepalived高可用的常用功能介绍

Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器.本篇文章会介绍keepalived的安装,配置,还有keepalived的一些脚本,keepalived+nginx高可用实现和keepalived双机互为主从的实现. keep

Exchange2016正式版功能介绍及全新安装配置

Exchange2016功能介绍及全新安装配置 说到Exchange服务相信很多人都在关注,微软在2015年更新了很多服务,从功能上来说确实做了很多优化及提升,具体就不多说了,微软在2015年10月1日发布了Exchange2016正式版,版本还是分为标准版和企业版,此次发布为多语言版本 同样微软在2015年发布了那些新产品呢 : 我们还是说说Exchange2016,从安装及官网文档上看微软从Exchange2010到Exchange2016角色上缩减了很多,从Exchange2010的Mai

国际版本Office365与国内版本office365的功能介绍

说到office365相信大家也会同时想到windows azure,两个都是微软推出的云层次的功能服务.当然功能服务对于微软来说都会定义不同版本,比如最常见的操作系统,分为企业.专业.家庭等--对于微软推出的云服务来说也本例外,目前不管是office365还是windows azure,分为国内版本及国际版本,在功能上有一定差别,数据中心的托管中心也有差别,比如国际主要分布在美国,而国内版本分布在中国了,在中国委派给世纪互联做运营管理,当然具体的权限及操作还是在美国微软.在中国主要分布在北京和

Oracle EBS WMS功能介绍(二)

(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 出货物流逻辑主要包括 1.      打包,可以进行多层嵌套式的打包,并通知用户为订单所做的特殊打包方法.打包可以在拣货时做,也可以作为一个独立的操作来做. 2.      为行程进行码头预约,可以使仓库经理计划出库运输公司的预约,码头门的可用性和仓库内的待装区的使用. 3.      拣货方法,为不同订单的拣货需要选择不同的拣货方法. 4.      管理拣货,可以使订单基于移动手持应用拣

bootloader功能介绍/时钟初始化设置/串口工作原理/内存工作原理/NandFlash工作原理

bootloader功能介绍 初始化开发板上主要硬件(时钟,内存,硬盘), 把操作系统从硬盘拷贝到内存,然后让cpu跳转到内存中执行操作系统. boot阶段 1.关闭影响CPU正常执行的外设 -关闭看门狗(watch dog)   WTCON 0xE2700000 -关闭中断 CPSR I和F位设置为1,关闭,不响应任何中断. 2.初始化时钟 -倍频到1Ghz,为外设分频 *串口驱动 3.初始化内存控制器,DDRAM -验证内存,往里面写一个值,然后再读出来 4.初始化硬盘,nand Flash

Python中生成器和迭代器的功能介绍

生成器和迭代器的功能介绍 1. 生成器(generator) 1. 赋值生成器 1. 创建 方法:x = (variable for variable in iterable) 例如:x = (i for i in range(10)) print(x) >>> <generator object <genexpr> at 0x00000000006B85C8> 返回值:generator #使用元祖推导式的时候回变成一个生成器. 2. 调用 方法:x.__nex

友盟新功能介绍:在线参数-备用

作为开发者您是否也碰到过这些挠头问题: 刚上线不久的应用就要修改说明文字?应用添加广告后,如何平衡用户流失和广告收入情况?如何对游戏中的道具进行合理定价? 为帮助开发者告别频繁地更新应用版本,更好的比较版本之间的用户行为及习惯,友盟针对Android开发者新推出在线参数功能.通过在线参数功能,开发者可以远程动态修改应用中的参数值,灵活调整运营策略.iOS版本近期推出. 获得更多信息和体验在线参数功能请访问www.umeng.com 什么是在线参数 在线参数是友盟推出的新功能,可以让您动态修改应用

Python中set的功能介绍

Set的功能介绍 1.集合的两种函数(方法) 1. 集合的内置函数 交集 格式:x.__and__(y)等同于x&y 例如:s1 = {'a',1,} s2 = {'b',1,} s3 = {'b','d'} print(s1.__and__(s2)) >>> {1} print(s1.__and__(s3)) >>> set() 返回值:set #y只能是集合,当两个集合没有交集时,返回值为空集合. 判断是否是包含关系 格式:x.__contains__(y)

EXCEL基础内容学习笔记(二)Excel文档的基本组成与功能介绍

一.基本组成 (一)工作簿.工作表与单元格 (1)工作簿:一个Excel文档即为一个工作簿. (2)工作表:工作簿中的每个表. (3)单元格:打开Excel文档,在工作表中单击,出现的加粗四边形即为单元格.单元格由行和列组成,命名时由行和列说明,称为单元格名称或地址. 一个工作簿中有若干个工作表,每个工作表有许多单元格组成. 二.功能介绍 (1)标题栏:Excel文档最上端. (2)选项卡 (3)工作区:每一个打开的选项卡都含有若干工作区. (4)名称框:所选择的单元格的名字. (5)编辑栏:可