HyperText Transfer Protocol
:超文本传输协议,带有超级连接的文本,用于实现在文档间跳转的,一开始也仅仅支持纯文本文档;http/0.9
协议:出现最初仅仅支持纯文本,也就是纯ASCII
;HTML(TyperText Mark Language)
:表示的是用于编写超文本的语言,用于将字体解释为字符的显示属性,例如大小等,在通过浏览器进行浏览时,不会将修饰字符显示出现,而是将修饰后的结果显示出来;URI(Uniform Resource Indentifier)
:用于防止超文本文档出重明的情况出现;URL(Uniform Resource Locator)
:是URI的子集,用于描述互联网资源的统一表示格式;web资源
:例如http://www.linux.com/logo.gif
就是一个web资源
,多个资源会被整合为一个html文档;Web对象
:就是html
文档就是将分散在多台Web
服务器上面的资源整合成一个页面,并进行显示的;GET
:用于获取资源到本地;POST
:通过表单提交数据到远程服务器;PUT
用于上传文件;DELETE
:用于删除远程浏览器的文件;HTTP/1.0
之后引入MIME(Multipurpose Interent Main EXtension)
,表示多用途互联网邮件扩展,最早是应用于邮件的SMTP(Simple Mail Transmission Protocol)
协议,为了解决邮件只能够简单的传输纯文本文档;MIME
实现的功能:将非文本数据文件在传输前重新编码为文本格式在进行传输,接收方能够使用相反的方式还原为原来的格式,还能够使用对应的应用程序打开这种文件;HTTP
协议使用MIME
进行扩展之后,网页浏览更加丰富
动态网页
Java,Applet,JRE
等编程语言开发的脚本,在server
上面执行一次后,将生成的结果生成HTML
文档,并且返回给Client
,也就是说动态网页在服务器上面存储的需要执行的脚本,并且每执行一次,就会生成HTML
,发送给Client
,在脚本的执行过程中,Web
服务器需要根据不同类型的脚本调用不同类型的应用程序来执行脚本,脚本的执行并不是Web
服务器负责的;HTTP
请求报文语法格式 <method><request-RUL><version>
<headers> //http协议的首部
<entity-body> 报文主体
http
协议首部类似 GET: /2.html
Host:www.linux.com
http
响应报文格式 <version><status(状态码)><reason-phrase(用于解释状态的意义)>
<headers(内容的格式)>
<entity-body>
GET / HTTP/1.1
Host:www.linux.com
Connection:keep-alive
HTTP/1.1 200 OK
X-powered_By:PHP/5.2.17
Vary:Accept-Encoding,Cookie,User-Agent
Cache-Control:max-age=3,must-revalidate
Content-Encoding:gzip
Content-Length:6931
HTTP
常见的状态码 1xx
: 表示纯粹的信息,很少使用;2xx
:成功类状态码; 200
:请求资源正常;3xx
:表示重定向类的信息 301
表示永久重定向;302
:临时重定向;304
:没有发生任何改变,可以使用缓存;4xx
:客户端错误类状态码 403
:服务器端设置,资源访问被拒绝;404
请求不存在的资源文件;5xx
服务器错误的信息,由于服务器故障导致无法响应;(Header Filed)
,每个首部域都由名称(name)
和值value
组成,中间是用逗号分隔,另外,相应报文通常还包括Body
的主体,既相应给Client
的内容;Web
服务器需要完成的操作 client
的连接请求;HTTP
请求相应报文;HTTP
信息;HTTP
事物记录进日志文件;HTTP / 1.1
支持的特性包括:加强缓存管理;并且支持长连接功能;DNS
解析,网络延迟,TCP/IP
的三次握手以及四次断开,然后Server
将数据进行返回,用户的请求十分频繁时,上述的过程就会进行重复;引入长连接,在用户第一次获得资源之后,连接并不进行断开,而是使用较小的资源来维护用户已经建立的连接,但是缺点是维护大量用户的这种连接请求,也会导致资源的大量开销,也就是在并发量较小时,较少用户访问的请求时间,并发量较大时,新用户的请求就需要等待;client
占用过多的时间,而是接收请求,并且进行转交,对于处理请求的是否完成的判断包含两种方式,一种是进行轮询查询的,但是效率低下,所以引入的是事件驱动机制的方式,也就是每个处理进程一个状态值,用于查看状态值,来确定某个特定的事件是否发生,基于事件的驱动方式也包括两种: (A)
,A
创建并且管理进程B
,A
进程用于将用户的请求分发给大量的B
进程,B
进程结合事件驱动以及通知机制来管理用户的请求,但是不实际处理用户的请求,在请求被之后的进程处理完成之后,来进程进程的响应; HTTTP
协议来说通常是C/S
结构: Client
:browser, spider
,常见的包括IE
,firefox
,chrome
,Opera
,Safari
;server
:Apache
,nginx
,lighttpd
,thtppd
等;IIS
,tomcat
,Websphere(IBM,JSP(JAVA))
:用于解析JAVA企业级服务,Weblogic(Oracle)
,JBoss(RedHat)
:核心是Tomcat,都可以提供Wbe服务;HTTPD
支持的特性: HTTPD
实现创建进程,避免用户请求到达后创建进程的时间开销;HTTPD
按需创建维护适当的空闲进程,销毁不需要多于的进程;HTTPD
是模块化设计,各种模块支持运行时添加,支持运行时配置,支持单独编译模块;HTTPD
:支持虚拟主机配置,一台物理服务器,运行了一个Web服务程序,但是可以服务多个站点; IP
的虚拟主机;(mod_ssl)
协议;nginx
:多进程响应用户请求的模型,可以响应更多的用户请求,稳定性和功能的丰富性不及HTTPD
,Nginx
多用于进行反向代理;
HTTPD
的MPM
:
prefork
:预先生成进程,一个请求用一个进程相应;work
:基于线程来工作的,一个请求使用一个线程相应; Event
:表示基于事件的驱动的,一个进程处理多个请求;HTTPD
工作情况 root
的进程是master process
,用于创建空闲进程,接收并且分发用户请求;apache
的进程是apache work process
;/etc/httpd/
;/etc/httpd/conf/httpd.conf
;/etc/httpd/modules
;/etc/httpd/logs ----> /var/log/messages
,日志文件一般包括两种:访问日志access_log
,错误日志:err_log
;/var/www/
: html
:用于静态文件;cgi-bin
:用于处理动态文件;/etc/httpd/conf/magic
:用于定义如何识别本地主机接收的MIME编码的文件;/etc/httpd/conf.d/ welcome.conf
:欢迎页面;CGI(Common Gateway Interface)
:
HTTPD
服务器并不负责处理动态内容,也就是不负责动态脚本的执行等工作,CGI
是用于Web
服务器和其他的应用程序服务器通信的一种机制,使Web
服务器启动某个特殊的进程来处理动态的网页请求的一种机制,用户的访问请求类似于Client ------> httpd (index.cgi) ---> Spawn Process (index.cgi)---->httpd----->Client
;fastcgi
:
Web
服务器和应用程序服务器分离,用于加快Web
访问速度,用于实现动静分离;FASTCGI
的工作通常不是用户请求到达时,创建进程向应用程序服务器发起解释请求,而是在用户到达之前就创建一定数量的进程来等待动态用户请求,并且维护一定数量的进程,避免进程的频繁创建和销毁,并且动态进程的创建和销毁不再由Web
服务器进行管理,而是交给专门的进程进程管理,通过配置应用程序服务器工作在不同的套接字,可以实现将应用程序服务器和Web
服务进行分离;