• HTTP笔记1


    传输层:提供进程地址

      TCP:传输控制协议,面向连接的协议;通信前需要建立虚拟链路;结束后拆除链路。端口号:0-65535

      UDP:用户报文协议,无连接的协议。端口号:0-65535

    IANA(互联网数字分配机构)

      0-1023:知名端口,永久的分配给固定的应用使用,特权端口,22/TCP(SSH),80/TCP(HTTP),443/TCP(HTTPS),53/TCP|UDP(DNS),21/TCP(FTP)等。

      1024-41951:亦为注册端口,单要求并不严格分配给程序注册为某应用使用,11211/TCP, 11211/UDP (memcached), 3306/TCP(MySQL)等。

      41952-65535:客户程序随机使用的端口;动态端口,或私有端口,其范围的定义:/proc/sys/net/ipv4/ip_local_port_range

    Socket:IPC(进程间通信)的另一种实现,允许位于不同主机(甚至同一主机)上不同的进程之间进行通信,数据交换,Socket API, 1983年,4.2 BSD。

      SOCK_SREAM:TCP套接字

      SOCK_DGRAM:UDP套接字

      SOCK_RAW:裸套接字

    IPv4地址分类:

      IPv4共分为5大类:  

        A类:1.0.0.0-126.255.255.255,netmask:8,每个网络有2^24-2个可用IP

        B类:128.0.0.0-191.255.255.255,netmask:16,每个网络有2^16-2个可用IP

        C类:192.0.0.0-223.255.255.255,netmask:24,每个网络有2^8-2个可用IP

        D类:224.0.0.0-239.255.255.255,组播

        E类:240.0.0.0-255.255.255.255,科研等其他用途

      私有IP:

        A:10.0.0.0/8

        B:172.16.0.0/16-172.16.31.0.0/16

        C:192.168.0.0/24-192.168.255.0/24

      本地环回地址:

        127.0.0.0/8

      TCP协议特性:

        建立连接:三次握手

        将数据打包成段:校验和(CRC-32)

        确认、重传以及超时;

        排序:逻辑排序

        流量控制:滑动窗口算法

        拥塞控制:慢启动和拥塞避免算法

      Socket Domain:指明通信的“域”(范围),我们是在IPv4还是IPv6这个范围内通信,也就决定了我们通信的地址是IPv4格式还是IPv6格式。

        AF_INET:Adress Family,IPv4

        AF_INET6:Adress Family,IPv6

        AF_UNIX:同一主机上不同进程之间通信时使用。

        每类套接字都至少提供了两种socket:流、数据报。

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

          数据报:不可靠的传递、有边界、无连接。

      套接字相关的系统调用:  

        socket():创建一个套接字

        bind():绑定

        listen():监听

        accept():接收请求

        connet():请求连接建立

        write():发送

        read():接收

           send(), recv(), sendto(), recvfrom()

    HTTP:hpyer text transfer protocol(超文本传输协议),80/TCP

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

    <html>
        <head>
                <title>TITLE</title>
        </head>
        <body>
                <h1>这是一个标题</h1>
                <p>这是一个段落</p>
                <a href=https://www.baidu.com>这是一个连接</a>
        </body>
    </html>
    

      CSS:Cascading Style Sheet,层叠样式表

      js:javascript

      MIME:Multipurpose Internet Mail Extesion,多用途互联网邮件扩展协议,参考连接:https://baike.baidu.com/item/MIME/2900607?fr=aladdin

      工作机制:参考http://blog.csdn.net/hguisu/article/details/8680808

        http请求

        http响应

      Web资源:web resource

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

        动态文件:.php    .jsp...

        媒体: 

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

            text/html

            text/plain

            image/jpeg

            image/gif

      URI:Uniform Resource Identifier,统一资源标识符。

        URL:Uniform Resource Locator,统一资源定位符,用于描述某服务器特定资源的位置

          Scheme://Server:port/path/to/resoource

            http://www.magedu.com/images/logo.jpg

        URN:Uniform Resource Nameing,统一资源名称,目前较少使用

      http的协议版本

        HTTP/0.9:原型版本,功能简陋

        HTTP/1.0:第一个被广泛使用的版本,支持MIME.

        HTTP/1.1:在1.0的版本上改良了某些特性,如增强了缓存功能。

        HTTP/2.0:HTTP/NG下一代的HTTP

      一次完整的http请求处理过程: 

        1.建立或处理连接;接收请求或拒接请求。

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

          并发访问相应模型(Web I/O):

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

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

            复用I/O结构:一个进程响应N个请求;

              多线程模型:一个进程生成N个线程,每个线程响应一个用户请求;

              事件驱动:event-driven;

            复用的多进程I/O结构:启动M个进程,每个进程响应N个请求;

        3.处理请求,对请求报文进行解析,并获取请求的资源及请求方法等相关信息。

          元数据:请求报文首部

            <method><URL><VERSION>

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

            Connection:

        4.访问资源:获取请求报文中请求的资源。  

          web服务器即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态生成的资源;这些资源放置域本地文件某路径下,此路径通常称之为DocRoot.

          /www/var/html/

            images/1.jpg

          http://www.magedu.com/images/1.jpg

          web服务器资源路径映射方式:

            a.docroot

            b.alias

            c.虚拟主机docroot

            d.用户家目录docroot

        5.构建响应报文

          资源的MIME类型:

            显示分类

            魔法分类

            协商分类

          URL重定向:web服务器构建的响应并非客户端请求的资源,而是另外一个访问路径下的资源。

        6.发送响应报文

        7.记录日志

      http服务器程序

        httpd

        nginx

        lighttpd

        应用程序服务器:

          IIS

          Tomcat,Jetty,Jboss,Resin

          Webshpere,Weblogic,oc4j

        www.netcraft.com (查看各程序的使用主机量占比)

        httpd的安装配置和使用:

        httpd:apache

          a patchy server =apache

          ASF:apache software foundation(Apache软件基金会)

        httpd的特性:

          高度模块化:core+modules

          DSO:Dynamic Shared Object

          MPM:Multipath Processing Modules(多道处理模块)

            prefork:多进程模型,每个进程响应一个请求;一个主进程负责生成N个子进程,子进程也称为工作进程,每个子进程处理一个用户请求;即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达,最大不会超过1024个。

            worker:多线程模型,每个线程响应一个请求;一个主进程生产多个子进程,每个子进程负责生成多个线程,每个线程响应一个请求。

              m进程,n线程:m*n个请求

            event:事件驱动模型,每个线程响应N个请求;一个主进程生成m个子进程,每个进程字节n个请求

              httpd-2.2:event为测试使用

              httpd-2.4:event可生产使用

        httpd的功能特性:   

          虚拟主机

            IP、Port、FQDN

          CGI:Common Gateway Interface,通用网关接口

          反向代理

          负载均衡

          路径别名

          丰富的认证机制:basic|digest

          支持第三方模块

       CentOS 6:

          程序环境:

            配置文件:

              /etc/httpd/conf/httpd.conf

              /etc/httpd/conf.d/*.conf

            服务脚本:

              /etc/rc.d/init.d/httpd

              配置文件:/etc/sysconfig/httpd

            主程序文件:

              /usr/sbin/httpd

              /usr/sbin/httd.event

              /usr/sbin/httpd.worker

            日志文件目录:/var/log/httpd/  

                access_log:访问日志

                error_log:错误日志

            站点文档目录:/var/www/html

            模块文件路径:/uar/lib64/httpd/modules

            配置文件组成:

              ~]# grep "Section" /etc/httpd/conf/httpd.conf   
              ### Section 1: Global Environment  /*全局环境变量*/
              ### Section 2: 'Main' server configuration/*中心主机配置*/
              ### Section 3: Virtual Hosts/*虚拟主机配置*/

              配置格式:directive value

                directive:不区分字符大小写

                value:为路径时,取决于文件系统

            常用配置:

              1.修改监听的IP和Port:Listen [IP:]PORT(省略IP表示监听本机所有IP;Listen可以重复出现多次)

              2.持久连接:Persistent Connection;连接建立,每个资源获取完成后不会断开连接,而是继续等待其他的请求完成;

                如何断开:1.数量限制 100,2.时间限制:可配置

                副作用:对并发访问量较大的服务器,持久连接功能会使有些请求得不到响应。

                折中:使用较短的持久连接;(httpd-2.4支持毫秒级的持久时间)

                非持久连接:每次发起请求是都需要进行三次握手和四次断开。

                KeepAlive On|Off   --开启或关闭持久连接

                MaxKeepAliveRequests #   --最大连接数

                keepAliveTimeout #   --持久连接保持时间

              3.MPM:prefork|worker|event

                http-2.2不支持同时编译多个模块,只能编译时选定一个;rpm安装的包提供了三个二进制程序文件,分别用于实现对不同的MPM机制的支持;确认方法为:pa aux | grep httpd

              默认为/usr/sbin/httpd,其使用prefork

                查看模块列表:

                  查看静态编译的模块:    

    # httpd -l
    Compiled in modules:
       core.c
       prefork.c
       http_core.c
       mod_so.c
    

                  查看静态编译及动态装载模块:

    httpd -M
    

              更换使用的httpd程序:/etc/sysconfig/httpd/    修改"HTTPD="的值重启即可。

    #prefork的配置
        <IfModule prefork.c>
        StartServers    8
        MinSpareServers    5
        MaxSpareServers    20
        ServerLimit    256
        MaxClients    256  
        MaxRequestsPerChild    4000
        </IfModule>
    #worker的配置
        <IfModule worker>
        StartServers        4
        MaxClients          300
        MinSpareThreads    25
        MaxSpareThreads    75
        ThreadsPerChild        0
        </IfModule>
    

            PV,UV:PV:Page Vies:页面浏览量;UV:User View,用户浏览量(独立IP量)

          4.DSO 

            配置指令实现模块加载:LoadModule <mod_name> <mod_path>

            模块路径可使用相对地址:1.相对于ServerRoot(/etc/httpd)指向的路径而言:/etc/httpd/modules

          5.定义'Main' server的文档页面路径,DocumentRoot

            文档路径映射:DocumentRoot指向的路径为URL路径的启始位置:DocumentRoot "/var/www/html"

              test/index.html -->http://HOST:PORT

              /test/index.html

          6.站点访问控制:可基于两种类型的路径指明对哪些资源进行访问控制

            文件系统路径:  

              <Directory ""> </Directory>

              <File "">  </File>

              <FileMatch ""> </FileMatch>

            URL路径

              <Location ""> </Location>

              ...

          7.Directory中“基于来源地址”实现访问控制

            1.Options:所有可用特性:Indexes Includs

              FollowSymLinks  SymLinksifOwnerMatch  ExecCGI    MultiViews

                None,ALL

              Indexes:索引

              FollowSymlinks:运行跟踪符号链接文件

            2.基于来源地址的访问控制机制

              Order:检测次序

                Order allow,deny

                Order deny,allow

              Allow from  IPaddr

              Deny from  ipaddr

              来源地址: 

                1.IP

                2.NetAddr:

                  172.16

                  172.16.0.0  

                  172.16.0.0/16

                  172.16.0.0/255.255.0.0

          8.定义默认主页面:DirecotryIndex index.html    index.html.var

          9.日志设定:

            错误日志:ErrorLog logs/error_log

            Loglevel warn(日志级别):debug    info    notice   warn    error    crit     alert     emerg

            访问日志:CustomLog logs/access_log combined

            LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "{User-Agent}i"" combined

              %h:客户端IP地址

              %l:Remote logname(from identd,if supplied),远程登录名,-表示为空

              %u:Remote user,(from auth;may be bogus if return status (%s) is 401);

              %t:Time the request was received(standard english format),服务器收到请求的时间

              %r:First line of request,请求报文的首行信息(method url version)

              %>:响应状态码

              %b:响应报文的大小,单位是字节,不包括响应报文的首部;

              %{Referer}i:请求报文当中“referer”首部的值;当前资源的访问入口,及从哪个页面中的超链接跳转而来。

              %{User-Agent}i:请求报文当中“User-Agent”首部的值;即发出请求用到的应用程序。

            参考连接:http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats

          10.路径别名

            DocumentRoot "/www/htocs"

              http://www.magedu.com/download/

              bash-4.4.2-3.el6.x86_64.rpm

                -->/www/htdocs/download/

                bash-4.4.2-3.el6.x86_64.rpm

            Alias  /URL/ "/PATH/TO/SOMEDIR/"

              Alias /bbs/ "/forum/htdocs"

                http://www.magedu.com/bbs/index.html

                  -->/forum/htdocs/bbs/

          11.设定默认字符集

            AddDefaultCharset UTF-8

            GBK,GB2312,GB18030

          12.基于用户的访问控制

            认证质询:WWW-Authenticate,响应码为401,拒绝客户端请求,并说明要求客户提供账号和密码;

            认证:Authorization,客户端用户填入账号和密码后再次发送请求报文认证通过,则服务器发送响应的资源;

            认证类型:1.basic 明文   2.digest,消息摘要

            安全域:需要用户认证后方能访问的路径,应该通过名称对其进行标识,并用于告知用户认证的原因;

            用户的账号和密码存储于位置:

              虚拟账号:仅用于访问某服务器时用到的认证标识

              存储:文本文件、SQL数据库、LDAP、NIS

            basic认证:

              1.定义安全域

                <Directory "">

                  Options None

                  AllowOverride None

                  AuthTye Basic

                  AuthName "STRING"

                  AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"

                  Require  user  username1  username2

                  ......

                </Directory>

                  允许账号文件中的所有用户登录访问:

                    Require valid-user

              2.提供账号和密码存储(文本文件)

                使用htpasswd命令进行管理

                  htpasswd [option] passwordfile username

                    -c:自动创建passwordfile,因此仅应该在添加第一个用户时使用

                    -m:md5加密用户密码

                    -s:sha1加密用户密码

                    -D:删除指定用户

              3.实现基于组进行认证:

                <Directory>

                  Options None

                  AllowOverride  None

                  AuthType  Basic

                  AuthName  "STRING"

                  AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"

                  AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"

                  Require group GROUP1 GROUP2

                </Directory>

                要提供:用户账号文件和组文件

                  组文件:每一行第一一个组

                    GRP_NAME:user1 user2 user3

                示例:

                  <Dircectory "/www/htdocs/admin">

                    Options None

                    AllowOverride None

                    AuthType Basic

                    AuthName "Administrator private"

                    AuthUserFile "/etc/httpd/conf.d/.htpasswd"

                    AuthGroupFile "/etc/httpdconf.d/.htgroup"

                    Require group webadmin

                  </Directory>
          13.虚拟主机

            有三种实现方案:

              基于IP:为每个虚拟主机准备至少一个IP地址

              基于PORT:为每个虚拟主机准备至少一个专用port;实践中很少使用

              基于hostname:为每个虚拟主机准备至少一个专用的hostname;

              可混合使用上述三种方式中的任意方式。

            注意:一般虚拟主机莫与中心主机很用,所以要使用虚拟主机,先禁用中心主机;方法:注释DocumentRoot

            每个虚拟主机都有专有的配置:

              <VirtualHost "IP:PORT">

                ServerName

                DocumentRoot ""

              </VirtualHost>

                ServerAlias:虚拟主机的别名

                ErrorLog

                CustomLog

                <Directory ""> </Directory>

            示例1.基于IP

              <VirtualHost 172.16.100.250:80>

                ServerName web1.magedu.com

                DocumentRoot "/vhosts/web1/htdocs"

              </VirtualHost>

              <VirtualHost 172.16.100.251:80>

                ServerName web2.magedu.com

                DocumentRoot "/vhost/web2/htdocs"

              </VirtualHost>

            示例2:基于port

              <VirtualHost 172.16.100.251:80>

                ServerName web2.magedu.com 

                DocumentRoot "/vhost/web2/htdocs"

              </VirtualHost>

              <VirtualHost 172.16.100.251:8080>

                ServerName web3.magedu.com

                DocumentRoot "/vhost/web3/htdocs"

              </VirtualHost>

            示例3:基于hostname

              <VirtualHost 172.16.100.251:80>

                ServerNme web2.magedu.com

                DocumentRoot "/vhost/web2/htdocs"

              </VirtualHost>

              <VirtualHost>

                ServerName web4.magedu.com

                DocumentRoot "/vhost/web4/htdocs"

              </VirtualHost>

              <VirtualHost>  

                ServerName web5.magedu.com

                DocumentRoot "/vhost/web5/htdocs"

              </VirtualHost>

          14.内置的status页面

            <Location /server-status>

              SetHandler server-status

              Order deny,allow

              Deny from all

              Allow from 172.16

            </Location>

            实现:基于账号实现访问控制;

  • 相关阅读:
    Linux 编程笔记(四)
    渗透测试搜索指令整理(一)
    Linux 编程笔记(三)
    Winhex数据恢复笔记(五)
    Winhex数据恢复学习笔记(四)
    Winhex数据恢复学习笔记(三)
    Linux编程学习笔记(二)
    Linux编程学习笔记(一)
    工控系统安全问题汇总(一)
    WinHex数据恢复笔记(二)
  • 原文地址:https://www.cnblogs.com/qingfengfumian/p/8438514.html
Copyright © 2020-2023  润新知