HTTP

HTTP:Hyertext Transfer Protocol:超文本传输协议(超链接)

超链接:在文档中实现跳转,(基于链接,能在文档中跳转)

Web:
     http/0.9:早期:仅支持纯文本(超链接,ASCII,

     HTML:编写超文本的语言,超文本标记语言(将分散在多个服务器中的资源整合成为一个页面并被浏览器使用)。


Browser:浏览器:客户端代理(火狐,IE)


URI:统一资源标识符----定义全局范围内,独立唯一资源的命名方式


   统一:路径格式上的统一

URI的子对象-->URL:统一资源定位符  ----用来描述 在互联网上的资源的统一表现格式--获取这个资源的格式和路径


protocol://host:port/path/to/file

例如:
http://www.magedu.com/download/linux.tar.gz


web资源(web对象):可以让客户端进行访问的文件

http://www.magedu.com/logo.gif

多个资源被整合为一个html文档

HTML语言:将分散在多个服务器上的资源整合成一个页面,并且能够在浏览器页面上进行显示!


资源获取的方式:http方法/1.0:PUT(从远程服务器获取一个文件到本地),POST(可以向服务器进行文件的上传),GET(从远程服务器获取文件在页面上进行显示),DELETE

http/1.0引进了MIME:多用途互联网邮件扩展


SMTP:简单邮件传输协议,早期:(传文本)
  
        MIME:将非文本数据在传输前重新编码为文本格式,接收方能够用相反的方式将其重新还原为原来的格式,还能够调用相应的程序来打开此文件
    


协议首部:
p_w_picpath(图片)/jpeg

浏览器有插件可以解析对应MIME传来各种格式的数据,(fLush插件)

动态网页:activeX,在服务器端存储的文档非HTML格式,而是编程语言开发的脚本,脚本接受参数(客户端的地址和浏览器类型)之后在服务器上运行,完成之后,会生成HTML文档,并把这个生成的文档发给客户端,


Java,Applet,JRE(环境)

web:index.php

web-->procotol(协议)-->php(运行index.php)-->生成HTML文档再返回给web服务器-->再返回给客户端

流程:客户端进行客户请求的时候,不是纯文本文档,是index.PHP格式文档,此时web服务器会调用PHP解释器来运行index.php格式的文档,生成HTML格式的文档再返回给web服务器,再返回给客户端,再通过客户端浏览器的插件进行解析成该客户端请求格式的内容!!)


index.html:
         一个网页 引用N个web对象:URL
 

动态网页:包含静态内容和动态内容
  
          动态内容部分才需运行才能返回给客户端


http--1.0/1、添加了缓存:
          2、引入了长连接的机制

IP:首部   source IP     Destination IP   

TCP:首部    source  port   Destination port

HTTP首部    GET 2.html(具体路径)  
            host:www.magedu.com   


 
HTTP报文:请求报文,响应报文



请求报文语法:
<method-资源获取方法> <request-URL-请求的资源是什么> <version资源协议的版本号>
<headers--HTTP协议的首部>

空白行

<entity-body-->报文主体

服务器相应相应报文:


<version--协议><status--状态码> <reason-phrase--解释status的意义>
<headers--相应报文的格式>

<entity-body>

status ----- 状态代码:
1xx:纯信息
2xx:"成功"类的信息(202)

3xx:重定向类的信息(301--永久重定向,302--临时重定向,304--没有发生任何改变)

4xx:客户端错误类的信息(404--客户端错误)

5xx服务器端错误的信息  (501,502,503。。。。。。)


请求报文:
GET /HTTP/1.1
host:www.magedu.com
connection: keep-alive


相应报文:
/HTTP/1.1 200 OK
x-Powered-By:php/5.2.17


上面两个报文的第一行通常称作报文“起始行(start line)”:后面的标签格式的内容称作首部域(header field),每个首部域都由名称(name)和值(value)组成,中间用逗号分隔,另外,响应报文通常还有一个称为body 的信息主体,即响应给客户端的内容,


web服务器的主要操作
1、建立连接--接受或者拒绝可独断连接请求
2、接受请求--通过网络读取HTTP请求报文
3、处理请求--解析请求报文并做出相应的动作
4、访问资源--访问请求报文中相关的资源
5、构建相应--使用正确的首部生成HTTP相应报文
6、发送相应--向客户端发送生成的相应报文
7、记录日志--当已经完成的HTTP事务记录进日志文件


C/S
     C:Clinet Agentg (browser(浏览器),spider(搜索引擎))

     S:Server
 
      Client->request-server-->
  
      标记用户资源@URL --报文请求格式

      server-response->client
 
      获取资源的方法   @GET ,HEAD POST PUT ,DELETE,TRACE,OPITIONS, connection.

协议首部   
Name:Value
host:www.magedu.com
connection:keep-alive
 



server 响应模型,
            
           1单进程,单线程
           2单进程,多线程
           3多进程 ,单线程
           4多进程,多线程

httpd:  1、prefork   2、work   3、event

客户端浏览器Client:
      1、IE

      2、Firefox   火狐
  
      3、chrome    谷歌
       
      4、Opera

      5、Safari
服务器端软件 Server:
 
       1、Apache-->httpd
 
       2、nginx

       3、lighttpd   德国研发的一个开源软件

       4、thttpd      一个嵌入式的web服务器

应用程序服务器:

        1、IIs ()

        2、tomcat(apache,JSP,open source)

        3、websphere(IBM,JSP,commodity)

        4、weblogic(Oracle,JSP,commodity)

        5、JBOSS(RedHat)重新封装的一个tomcat


 www.netcraft.com  最近全球互联网上web服务器各产品的比例。

apache:

软件基金会:
FSF:GUN,GPL

ASF:apache software  Fundation 

          web:httpd

  1、Hadoop提供并行处理环境,提供高性能框架
  2、tomcat:作为JSP实现规范和参照的应用程序

apahce基金会的主要项目访问路径       web:http://httpd.apache.org

httpd服务器软件:
     web server,open Source
   各种版本:2.2   2.4     2.0   1.3

httpd具有的特性:
        1、事先创建进程----web相应用户请求的时候,已经启动进程,空闲状态,如有请求,即刻可有用
        2、按需维持适当的进程----如有很大的访问请求,如完成请求,会适当关闭一些空闲的进程
        3、模块设计,核心比较小,各种功能都模块添加(包括php)
                                  ------支持运行时配置,支持单独编译模块
        4、支持多种方式的虚拟主机配置--- 
                      虚拟主机:   物理服务器只有一个,web程序也只有一个,根据用户不同的请求,但是可以有多个不同的站点(scoret:IP.port)
                               虚拟主机的类型: 1.基于IP的虚拟主机
                                                2.基于端口的虚拟主机
                                                3.基于域名的虚拟主机------
                                
                            
                        
 支持https协议 -----通过一个模块方式mod_ssl
 支持用户认证---
 支持基于IP或主机名的ACL(访问控制)
 支持每目录的访问控制(访问特殊目录的时候需要账号和密码)
 支持URL重写,/p_w_picpath/a.jpeg/bbs/p_w_picpaths/abc.jpeg


dhcp的安装-----3
      
rpm包的安装:

源码编译安装

httpd:
      /usr/sbin/httpd(多道处理模块--MPM:prefork)

          httpd:root,root(master process--主导进程)

          httpd:apache,apache(worker process--工作进程)
          服务脚本---/etc/rc.d/init.d/httpd
       
          port:(80/tcp),(ssl:443/tcp)

          etc/httpd:工作根目录,相当于程序安装目录

          /etc/httpd/conf:配置文件目录
           
                 主配置文件:httpd.conf

                    /etc/httpd/conf.d/*.conf   也是配置文件目录

                /etc/httpd/modules:模块目录

                /etc/httpd/log-->/var/log/httpd:日志目录

                     日志文件有两类:访问日志access_log,错误日志:err_log

                客户端请求服务器的页面目录: /var/www/
                     
                           ---html
                           ---cgi-bin   动态页面所提供的路径

                cgi:common gateway Interface---通用网管接口--就是web服务器与应用程序交流的一种协议
                      ----其实就是跟web服务器能够让额外的应用程序通信的一种机制,能够让web启动程序来处理动态内容。

                      Client  -->httpd(index.cgi-动态内容)-->spawn Process(发起这个程序进程)(index.cgi)-->httpd-->client

                  cgi: perl,python,java,(servlet,jsp),php

                  web静态服务器与动态程序服务器通信称为:fastcgi

    -----当用户发送请求当中,有静态和动态请求,静态请求,web服务器可以单独处理相应给用户,动态内容可以通过网络
         发给动态程序服务器进行处理,从而可以把静态和动态分离处理再返回给客户,这就是静态和动态分层次处理,

程序:有指令和数据组成

专业管理数据服务的服务器是数据库服务器!


httpd:
     指令  参数        directive  value
 
    指令不区分大小写,value则根据需要区分大小写!


MPM:Multi Path  Modules   多道处理模块

   1、mpm_winnet   win上专用的线程处理机制  
   2、prefork      在Linux上预先生成进程  -----------一个请求用一个进程相应
   3、worker      基于线程工作,一个进程相应多个用户请求,但是是多个线程来处理请求------一个请求用一个线程相应
   4、event       基于事件的请求,一个进程处理多个用户请求-----一个进程处理多个请求



虚拟主机:


apache服务:
     中心主机:
 
     虚拟主机:
                  1、IP虚拟
  
                  2、端口虚拟

                  3、域名虚拟

一个站点需要哪些东西(独立的资源):
                          1、不同的目录--Documentroot
                          2、servername 主机名
         

  虚拟主机与中心主机不能同时使用,得先取消中心主机,注释中心主机的DocumentRoot即可。

虚拟主机的定义:             

< virtuahost host>

</virtuahost>