http: Hyper Text Transfer Protocol
传输文本:HTML
设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法
html: Hyper Text Mark Language
html文本框架:
<html>
<head>
<title>TITLE</title>
</head>
<body>
<h1>H1</h1>
<p></p>
<h2>H1</h2>
<p> <a href="admin.html">ToGoogle</a> </p>
</body>
</html>
css: Cascading Style Sheet
html文档的生成方式:
静态:
动态:编程语言编写的程序可输出html格式的结果
php, jsp, asp .net
依赖脚本解释器:
php: php解释器
jsp: jvm
http协议报文:
request:
请求不同html文档
response:
C/S
C:User Agent//用户代理, Browser
S: Server
http协议:
http 0.9
http 1.0
MIME: Multipurpose Internet Mail Extesions
http 1.1
http 2.0
spdy
web服务器:
理解用户请求的资源格式不仅仅是纯html格式的文档
静态资源
动态资源:
application/php
web资源:
资源类型:MIME
major/minor
text/html
text/plain
p_w_picpath/jpeg
p_w_picpath/gif
vedio/mpeg4
application/vnd.ms-powerpoint
资源名称:URI(统一资源标识符) (Uniform Resource Idnentifier)
URL(统一资源定位符):
描述一个特定服务器上某资源的特定位置
http://www.magedu.com:80/download/bash-4.3.1-1.rpm
分为三部分:
scheme(方案):http://
服务器:www.magedu.com:80
特定服务器上的资源:/download/bash-4.3.1-1.rpm
CGI:Common Gateway Interface
简化版的http
http事务:一次请求及对应的响应
http方法:
GET:请求获取一个资源,需要服务器发送
HEAD:跟GET近似,但其不需要服务响应请求的资源,而返回响应首部
POST:基于HTML表单向服务器提交数据,服务器通常需要存储此数据;(位置:通常为关系型数据库)
PUT:与GET相反,向服务器发送资源;服务器通常需要存储此资源;(位置:通常为文件系统)
DELETE:删除URL指向的资源
OPTIONS:探测服务器端对请求的URL所支持使用的请求方法
TRACE:跟一次请求中间所经过的代理服务器、防火墙或网关等
http状态码:
1XX:信息性状态码
2XX:成功状态码
200:OK。请求已成功,请求所希望的响应头或数据体将随此响应返回。
201:CREATED。请求已经被实现,而且有一个新的资源已经依据请求的需要建立,且其URI已经随Location头信息返回。
3XX: 重定向类的状态码
301: Moved Permanently, 永久重定向
302: Found, 临时重定向,会在响应报文中使用“Location: 新位置”;
304: Not Modified
4XX:客户端类错误
403:Forbidden //请求被拒绝
404: Not Found
405: Method Not Allowed //不允许运用该方法请求本资源
5XX:服务器类的错误
500:Internal Server Error, 服务器内部错误
502:Bad Gateway, 代理服务器从上游服务器收到一条伪响应;
503:Service Unavailable, 服务暂时不可用
http协议:协议首部
Name: Value
Content-Type: p_w_picpaths/gif
分三类:
通用首部
请求首部
响应首部
http请求报文:
<method> <request-URL> <version>
<HEADERS>
<entity-body>
http响应报文:
<version> <status> <reason-phrase>
<HEADERS>
<entity-body>
解释:
<method>:请求方法
<request-URL>: 请求的资源,可以是相对路径,如/p_w_picpaths/log.jpg,也可以绝对路径,如http://www.magedu.com/p_w_picpaths.banner.jpg
<version>: http协议版本,格式HTTP/<major>.<minor>,例如HTTP/1.0, HTTP/1.1
<headers>:各种所可以使用的首部
<status>: 状态码
<reason-phrase>: 原因短语,指状态码的易读信息
注意:http协议是无状态,stateless
cookie:
Set-Cookie
Set-Cookie2
Cookie:
回顾:
http事务:
web资源:URL
scheme://server:port/path/to/resource
http方法:GET, POST, HEAD, PUT, DELETE, OPTIONS, TRACE
http状态码:403, 404, 301, 302, 304, 502
http协议报文:
请求:
<method> <request-URL> <version>
<HEADERS>
<entity-body>
响应:
<version> <status> <reason-phrase>
<HEADERS>
<entity-body>
http协议:无状态
http协议版本:
http 0.9: 仅用于传输html文档
http 1.0:引入MIME机制,从而支持多媒体数据;引入keep-alive(持久连接);缓存
http 1.1:更多请求方法,更精细缓存控制;持久连接(persistent);
1.2、http协议首部
通用首部
请求首部
响应首部
实体首部:表明实体类型和属性
扩展首部:非标准首部,可由程序员自行创建;X-Forward-For, X-Via
1.2.1、通用首部
Connection: 定义C/S之间关于请求、响应的有关选项
Connection: keep-alive
Cache-Control: 缓存控制
1.2.1、请求首部
Client-IP:
Host: 请求的主机
Referer: 指明了请求当前资源原始资源的URL
User-Agent: 用户代理
Accept首部:
Accept: 服务端能够发送的媒体的类型
Accept-Charset:
Accept-Encoding:
Accept-Language:
条件式请求:
跟安全相关请求:
Authorization:
Cookie:
1.2.3、响应首部
Age:
Server: 向客户说明自己的程序名称和版本
协商首部:
Vary: 首部列表,服务器会根据列表中的内容挑一个最适用的版本发送给客户端
跟安全相关:
WWW-Authentication:
Set-Cookie
1.2.4、实体首部
Location: 资源的新位置
Allow: 允许对此资源使用的请求方法
内容相关的首部:
Content-Encoding:
Content-Language:
Content-Length:
Content-Location:
Content-Type:
缓存相关:
ETag
Expires
Last-Modified:
1.3、一次Web资源请求的具体过程(服务器的角度)
1.3.1 服务过程
建立连接
接收请求
处理请求
访问资源
构建响应
发送响应
记录日志
连接:
连接套接字:(client, cport <--> server, sport)
监听套接字:80端口
1.3.2、web服务器的I/O结构
单进程模型:串行
多进程模型:每个进程响应一个用户请求实现并发的效果
复用的I/O机制:一个进程生成多个线程,每个线程响应一个用户请求
复用的I/O机制:多个线程,每个线程响应多个用户请求;
1.3.3、web server
httpd
httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程的池。Apache是世界使用排名第一的Web服务器软件
nginx
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、腾讯等。
lighttpd
gws
App Server: (Web 应用服务器)
IIS
tomcat, jetty, resin
weblogic
websphere
httpd:
ASF: Apache Software Fundation
httpd,
a patchy server = apache
httpd,
1.3.4、httpd的特性
高度模块化:core + modules
DSO: Dynamic Shared Object
MPM:Multipath Processing Module//多道处理模块
统称,事实上有多个实现:
prefork: 每个进程响应一个用户请求,预先生成多个空闲进程;
select():1024 //并发能力上限
worker: 启动多个进程,每个进程生成多个线程,每个线程响应一个用户请求;
event: 启动多个线程,每个线程响应N个请求;
event-driven:事件驱动
httpd的功能特性:
丰富用户认证:基本认证和摘要认证
CGI:原生支持perl CGI
//通用网络接口,是外部应用程序与WEB服务器之间的接口标准,是两者之间传递信息的规程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
虚拟主机:
基于端口、IP、主机名
反向代理:
负载均衡
用户站点:
路径别名:
支持第三方模块
安装方式:
rpm包
源码编译