HTTP-----HyperText Transfer Protocol超文本传输协议
http/0.9:仅纯文本(超链接),ASCII
HTML:HyperText Mark Language
URI:Uniform Resource Idetnifier,统一资源标识符
统一:路径格式上的统一
URL:Uniform Resource Locator 统一资源定位符
protocol://Host:Port/path/to/file
HTTP方法:获取web资源/对象的方法
http/0.9: GET
http/1.0: PUT, POST, DELETE, HEAD
http/1.0引入MIME机制
MIME:Multipurpose Internet Mail Extension,多用途互联网邮件扩展
将非文本数据在传输前重新编码为文本格式再传输,接收方能够用相反的方式将其还原成以前的格式,还能够调用相应的程序打开此文件
缓存机制
动态网页:
服务器端存储的文档非HTML格式,而是编程语言开发的脚本,脚本在接受参数后在服务器运行一次,运行完成后会生成HTML文档,把生成的文档发给客户端
包含静态内容(图片等)和动态内容
动态内容才需要运行
HTTP报文:请求报文、响应报文
HTTP请求报文语法:
<method><request-URL><version>
<headers>
<entity-body>
HTTP响应报文语法:
<version><status><reason-phrase>
<headers>
<entity-body>
状态代码:
1xx:纯信息
2xx:成功类信息
3xx:重写向类信息
301:永久重定向
302:临时重定向
304:not-modified,使用缓存的内容响应客户端
4xx:客户端错误类信息
5xx:服务器端错误类信息
请求报文:
GET / HTTP/1.1
Host: www.bj.com
Connection: keep-alive
响应报文:
HTTP/1.1 200 OK
X-Powerd=By: PHP/5.2.17
Vary: Accept-Encoding,Cookie,User-Agent
Cache-Control: max-age=3,must-revalidate
Content-Encoding: gzip
Content-Length: 6931
上面两个报文的第一行通常称为报文的"起始行(start line)";后面的标签格式称为报文首部域(Header field),每个首部域都由名称(name)和值(value)组成,中间用逗号分隔。另外,响应报文通常还有一个称作Body的信息主体,即响应给客户端的内容
web服务器的主要操作:
1、建立连接----接受或拒绝客户端连接请求
2、接收请求----通过网络读取HTTP请求报文
3、处理请求----解析请求报文并做出相应的动作
4、访问资源----访问请求报文中所请求的资源
5、构建响应----使用正确的商务部生成HTTP响应报文
6、发送响应----向客户端发送生成的响应报文
7、记录日志----当已经完成的HTTP事务记录进日志文件
HTTP/1.1
增强了缓存机制的管理
长连接机制
超时时间
每个长连接请求文件个数的限制
web服务器响应多个请求的方式:
1、单进程/单线程机制
依次处理每个请求
2、多进程/多线程机制
每个请求生成子进程响应
3、一个进程响应多个请求
事件驱动机制
通知机制
4、多进程响应多个请求
软件介绍
客户端代理软件
IE, firefox, chroome, opera, safari
服务器端软件
httpd, nginx, lighttpd, IIS, thttpd, tengine
应用程序服务器
IIS, Tomcat(JSP,open source), Websphere(IBM,JSP,commodity), Weblogic(Oracle,JSP,commodity)
JBoss(redhat,JSP)
httpd安装及配置
ASF:Apache Software Foundation
web: httpd
Tomcat
Hadoop
httpd:
Web Server, Open Source
2.4, 2.2, 2.0
httpd特性:
事先创建进程
按需维持适当的进程
模块化设计,核心较小,各种功能都能通过模块添加;模块可以在运行时启用
支持运行配置,支持单独编译模块
支持多种虚拟主机的配置
基于IP的虚拟主机
基于端口的虚拟主机
基于域名的虚拟主机
支持https协议(mod_ssl)
支持用户认证
支持基于IP或主机名的访问控制机制
支持每目录的访问控制
支持URL重写
RedHat(httpd):
rpm软件
源码编译
httpd:
/usr/sbin/httpd
Master process: httpd, root root
Worker process: httpd, apache apache
/etc/init.d/httpd(script)
Port: 80/tcp, 443/tcp
Workdir: /etc/httpd
/etc/httpd/conf:配置文件目录
主配置文件:httpd.conf
/etc/httpd/conf.d/*.conf
/etc/httpd/modules:模块目录
/etc/httpd/logs---> /var/log/httpd: 日志目录
访问日志access_log, 错误日志error_log
/var/www/
html:静态页面路径
cgi-bin:提供动态内容的路径
CGI:Common Gateway Interface 通用网关接口
让web服务器启动某应用程序解析动态页面的机制
开发动态网页的语言:
perl, python, java(Servlet JSP), php
FastCGI:
事先启动解析动态页面的进程(由一个单独的master process管理),当客户端请求动态页面时,由web process将请求交给一个空间的动态解析进程完成页面解析
此种方式静态页面的响应、动态页面的请求可以分别运行在不同的服务器
httpd安装及启动
# yum install -y httpd
# /etc/init.d/httpd start
# netstat -tnlp | grep :80
tcp 0 0 :::80 :::* LISTEN 2716/httpd
# ps aux | grep httpd
root 2716 0.0 0.3 11676 3424 ? Ss 23:47 0:00 /usr/sbin/httpd
apache 2719 0.0 0.2 11676 2124 ? S 23:47 0:00 /usr/sbin/httpd
apache 2720 0.0 0.2 11676 2124 ? S 23:47 0:00 /usr/sbin/httpd
apache 2721 0.0 0.2 11676 2124 ? S 23:47 0:00 /usr/sbin/httpd
apache 2722 0.0 0.2 11676 2124 ? S 23:47 0:00 /usr/sbin/httpd
apache 2723 0.0 0.2 11676 2124 ? S 23:47 0:00 /usr/sbin/httpd
apache 2724 0.0 0.2 11676 2124 ? S 23:47 0:00 /usr/sbin/httpd
apache 2725 0.0 0.2 11676 2124 ? S 23:47 0:00 /usr/sbin/httpd
apache 2726 0.0 0.2 11676 2124 ? S 23:47 0:00 /usr/sbin/httpd
httpd配置文件:
# grep -i "section" /etc/httpd/conf/httpd.conf
### Section 1: Global Environment
### Section 2: 'Main' server configuration
### Section 3: Virtual Hosts
directive value
指令不区分大小写
value区分大小写
1、显示系统版本、IP、软件版本相关信息
ServerTokens Prod
2、服务器根目录
ServerRoot "/etc/httpd"
3、PID文件
PidFile run/httpd.pid
4、TCP 3次握手第二次连接的超时时间
Timeout 60
5、长连接相关配置
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MPM: Multi Path Module 多处理模块
定义httpd响应多个用户请求的工作模型
mpm_winnt
prefork
多进程/多线程机制,预先生成进程
一个请求用一个进程响应
httpd 2.2,默认
worker
一个进程响应多个请求,一个进程使用多个线程响应多个请求
一个请求用一个线程响应
web服务启动多个进程,每个进程生成多个线程响应多个用户请求
event
一个进程同时处理多个请求
基于事件驱动模型
httpd 2.4,默认
显示httpd支持的模块
# httpd -l
Compiled in modules:
core.c
prefork.c
http_core.c
mod_so.c
配置httpd使用worker模型
# vim /etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker
6、prefork模型相关属性配置
<IfModule prefork.c>
StartServers 8 //启动8个空闲进程
MinSpareServers 5 //最少空闲进程,保证最少有5个空闲进程
MaxSpareServers 20 //最大空闲进程
ServerLimit 256 //为MaxClients指定上限值, 关闭httpd服务调整
MaxClients 256 //最多同时允许256个请求连接
MaxRequestsPerChild 4000 //每个子进程最多响应4000个请求
</IfModule>
7、worker模型相关属性配置
<IfModule worker.c>
StartServers 4 //默认启动4个进程
MaxClients 300
MinSpareThreads 25 //最少空闲线程
MaxSpareThreads 75 //最大空闲线程
ThreadsPerChild 25 //每个进程可生成25个线程
MaxRequestsPerChild 0
</IfModule>
8、指定监听地址及端口
Listen 80
9、装载模块
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
10、httpd子配置文件路径及名称
Include conf.d/*.conf
11、指定运行worker process进程的用户及用户组
User apache
Group apache