web  service  之http基础原理

web   service

mac:设备与设备之间的通信,主机与路由器,路由器与路由器

ip:主机与主机

tcp/utp:传输层:提供进程地址

tcp:传输控制协议,面向连接的协议,通信前需要建立虚拟链路,建立三次握手

utp:无连接的协议:

socket:套接字:IPC的一种实现通信,允许位于同一主机或不同主机间进程之间进行通信,数据交换,socket  api

SOCK_SITEAM:tcp套接字

SOCK_DGRAM:udp套接字

SOCK_RAW:裸套接字

0-1023:永久的分配给固定的应用使用,22/tcp(ssh),只能使用root来启动

1024-41951:为注册端口,要求不严格,分配给程序注册为某应用使用

41951+:客户端程序随机端口:动态端口,私有端口

 /proc/sys/net/ipv4/ip_local_port_range   --用于向外连接的端口范围

socket  Domain(根据其所使用的 地址):

      AF_INET:address  Family,IPv4

      AF_unix:同一个主机间的通信(客户机和主机在同一主机)不同进程

每类套接字都至少提供了两种socket:流(tcp),数据报(utp)

流:可靠地传递,面向连接,无边界

数据报:不可靠地传递,有边界,无连接

套接字相关的系统调用:

       socket(0:创建一个套接字

       bind():绑定

       listen():监听

       accept():接收请求

       connect():请求连接建立

       write():发动

       read():接收


http协议

http:hyper  text  transfer protocol    超文本标记语言

       html:编程语言,超文本标记语言

       css:Cascading   Style  sheet

       js:javascript(在浏览器执行的脚本)

      MIME:多用途互联网扩展----实现通过文本格式发送非文本格式数据

web资源:web  resource

     静态文件:jpg,.gif,.html,.txt,.js,.css,mp3,

     动态文件:-php,jsp

     媒体:

          媒体类型(MIME类型):maior/minor

URL:是Uniform Resoure Locator(统一资源定位器)的缩写。就是WWW页的地址。

其URL地址格式排列为:scheme://host:Port/path
一次完整的http请求过程:

    (1):建立连接服务端接收客户端请求:

    (2):接收请求:接收来自于网络的请求报文中对某资源的一次请求的过程

         并发访问响应模型(web  I/O)

        单进程I/0结构:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应

         多进程I/0结构,并行多启动多个进程,每个进程响应一个请求

         复用I/O结构:一个进程处理多个用户请求

                     多线程模型: 一个进程生成多个线程,线程处理用户请求

          复用的多进程I/O结构,生成多个进程,每个进程生成线程处理多个请求          

    (3):处理请求:对请求的资源进程解析,并获取请求的资源以及请求方法等相关信息

                      元数据;请求报文首部

                                 <methed>  <URL> <version>

                                 host:www.baidu.com  请求的主机名称

    (4):获取资源(访问资源):获取请求报文中请求的资源

                     web服务器:即存放了web资源的服务器,负责向请求者提供对方请求的静态资源

                     或动态运行后生成的资源,这些资源放置于本地文件系统某路径下,,


    (5):构建相应报文

    (6):发送响应报文

    (7):记录日志

 

httpd:apache

httpd
centos 6  yum包 2.2
centos 7  yum包  2.4
安装方式:
rpm和编译安装
centos 6 :
程序环境
配置文件:/etc/httpd/conf/httpd.conf/httpd
          /etc/httpd/conf/http.d/*.conf
服务脚本: /etc/init.d/httpd/
          配置文件:/etc/sysconfig/httpd/
主程序文件:
          /usr/sbin/httpd
          /usr/sbin/httpd.event
          /usr/sbin/httpd.worker
日志文件目录:
          /var/log/httpd
                access_log:访问日志
                error_log:错误日志
站点文档目录:
           /var/www/html
[root@servername1 yum.repos.d]# grep  "Section"   /etc/httpd/conf/httpd.conf
### Section 1: Global Environment
### Section 2: 'Main' server configuration
### Section 3: Virtual Hosts
常用配置:
1、修改监听的ip和Port
       Listen [ip:port]
2、持久连接
    Persistent  Conection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的资源请求
     断开:
         KeepAlive Off是否持续连接
         KeepAliveTimeout 15  断开连接前的时间
        测试:
             telnet  HOST port
             get  hhtP/1.1
             host:hostname or  ip
3、MPM
    httpd2.2默认事prefork,     查看静态默认的模块
    httpd  -l
    查看静态编译以及动态装载的模块
    httpd  -M
    更改模块的文件/etc/sysconfig/httpd/
PV:page  view  页面
UV:user  view  用户

4、DSO  动态共享对象
路径/usr/lib64/httpd/modules
配置指令实现模块加载
LoadModule  <mod_name>   <mod_path>   路径可用于相对路径/etc/httpd/co

5、定义'Main'  server的文档页面路径
DocumentRoot
文档路径映射:
DocumentRoot  指向路径为URL路径的起始位置
DocumentRoot "/var/www/html"


6、站点访问控制
可基于两种类型的路径指明对哪些资源进行访问控制
 文件系统路径:
      <Directort  "">  </Directort
  URl路径:
      <Location  "">   </Location>

访问控制机制:
   基于来源地址
    基于账号
7、定义默认主页面
  DirectoryIndex index.html index.html.var    
 Options Indexes 通过索引来获取页面
  FollowSymLinks  允许跟踪符号连接文件;
8、日志设定
错误日志路径: /etc/httpd/logs/error_log
错误日志的级别:
     debug,info,notice,warn,error,crit,alert,emerg
访问日志路径   /etc/httpd/logs/access_log
日志格式:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
%h:客户端地址
9、基于用户的访问控制
认证机制:WWW-Authenticate:响应吗为401,拒绝客户端请求,并要求用户提供账号和密码
认证:Authorization: 客户端用户填入账号和密码后再次发送请求报文,认证通过,则服务器响应的资源
认证类型:
    basic:明文
    digest:消息摘要
10、虚拟主机
有三种方式:
    基于IP:
          为每个虚拟主机准备至少一个ip地址:
    基于port:
          为每个虚拟机主机准备至少一个专用port,实践中很少使用
    基于hostnaem:
          为每个虚拟主机准备至少一个专用hostname
注意:一般使用虚拟主机,先禁用中心主机,
 禁用中心主机:注释DocumentRoot
每个虚拟主机都有专用配置:
 <VirtuaHost "IP:PORT">
       ServerName
       DocumentRoot""
 <VirtuaHost>
 ServerAlias:虚拟主机的别名:
 Errorlog
 CustomLog
 <Directory "">
 </Directory>
 基于IP 的虚拟主机:
 1、注释中心主机的页面
 2、
 <VirtualHost 192.168.1.221:80>
   ServerName   server1
   DocumentRoot  "/vhosts/web1/htdocs"
</VirtualHost>
<VirtualHost 192.168.1.222:80>
   ServerName   server1
   DocumentRoot  "/vhosts/web2/htdocs"
</VirtualHost>
基于端口的虚拟主机:
1、注释中心主机的页面
2、
<VirtualHost 192.168.1.221:80>
   ServerName   server1
   DocumentRoot  "/vhosts/web1/htdocs"
</VirtualHost>
<VirtualHost 192.168.1.221:8080>
   ServerName   server1
   DocumentRoot  "/vhosts/web2/htdocs"
</VirtualHost>
基于主机名的虚拟主机
1、开启NameVirtualHost *:80  
2、<VirtualHost 192.168.1.221:80>
   ServerName     web1.magedu.com
   DocumentRoot  "/vhosts/web1/htdocs"
</VirtualHost>
<VirtualHost 192.168.1.221:80>
   ServerName     web2.magedu.com
   DocumentRoot  "/vhosts/web2/htdocs"
</VirtualHost>
11、内置的status页面