4-FastCGI 基础

1 http协议

超文本传输协议
明文的协议 传输的内容不是二进制,传输的是明文字符串
http -> https    传输上是安全的

协议内容
    换行符都使用\r\n
    请求
            POST /search HTTP/1.1\r\n
            Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,application/msword, application/x-silverlight, application/x-shockwave-flash, */* 
            Accept-Language: zh-cn  
            Accept-Encoding: gzip, deflate  
            User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)  
            Host: www.google.cn 
            Connection: Keep-Alive  
            Content-Type: application/x-www-form-data-urlencoded
            Content-Length: 27\r\n
            \r\n
            hl=zh-CN&source=hp&q=domety 

 1、请求行 POST /search HTTP/1.1  
    请求的方法  资源路径  http协议版本号
         请求方法:(8个)
                    常用的4个 (GET/POST/PUT/DELTE)   增删查改
                        做 restful web api

                    更加常用就2个 GET POST
                        POST、PUT允许带请求数据
 2、请求头
                键值对 key : value
                accept : 客户端期望拿到的数据类型
                Accept-Language: zh-cn     客户端期望获取资源的语言
                Accept-Encoding: gzip, deflate   期望数据的编码 ,gzip压缩,没压缩
                User-Agent : 用户代理  浏览器类型
                Host  
                Connection: Keep-Alive      不要断开TCP连接  
                Content-Type : 请求数据的类型  (MIME类型)
                Content-Length: 27 请求数据的长度单位:字节

   3、空行 \r\n

   4、请求数据体
                hl=zh-CN&source=hp&q=domety 

响应
    1、状态行
        状态行 HTTP/1.1 200 OK
             http版本号  状态码  状态码意义
                1xx 表示服务器已接收了客户端请求,客户端可继续发送请求           辅助类
                2xx 表示服务器已成功接收到请求并进行处理                       积极类
                3xx 表示服务器要求客户端重定向                               重定向
                4xx 表示客户端的请求有非法内容                               客户端有毒
                5xx 表示服务器未能正常处理客户端的请求而出现意外错误             服务端有毒

    2、响应头(同上)
    3、空行 \r\n
    4、响应数据体
                跟Content-type对应 
                    是html,就是html文本
                    jpg ,就是jpg二进制内容

2 http传参

    服务器依赖客户端传递参数来返回内容
    GET 
        不允许携带请求数据,参数放置
 请求头:
            键值对 形式
            还要看服务器支持
            不是http标准的请求头的信息,那么可能会被过滤
 请求行
            方法 地址 协议
            http://127.0.0.1/login?user=itcast&passwd=123456
                以?开始,后面键值对,&做分割

                1 敏感信息暴露到地址栏
                2 长度限制,服务器对请求头地址长度有限制 512
                3 二进制数据,转化为普通字符串(编码)
  一般只做查询,参数作为查询条件使用


  POST
        支持数据体
        参数都放请求数据中

3 CGI

      通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,
  可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。
  CGI描述了**服务器和请求处理程序之间传输数据的一种标准**    劣势,频繁创建子进程,收尸,比较消耗新能,大并发网站不使用
nginx 不支持cgi只支持fastCGi

这里写图片描述

4 FastCGI

     CGI全称是“通用网关接口”(Common Gateway Interface),
  HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具,
  其程序一般运行在网络服务器上。CGI可以用任何一种语言编写,
  只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。

  一开始程序就已经启动,常驻在内存里,有请求就处理请求
    没请求以一种性能消耗很低的方式存在内存中
        1 休眠
        2 阻塞

    可以用任何语言编写

5 spawn-fcgi 进程管理器
spawn-fcgi这个包原来是属于Lighttpd里的,现在已经可以独立出来使用。
这里写图片描述

6 配置与搭建

(1) fastcgi 的安装

下载源码包:xxx
1、unzip xxx;cd xxx
2、chmod a+x autogen.sh  
3、./autogen.sh 
    如果报错1  依赖autoconf  , sudo apt install autoconf
    如果报错2  报文件找不到的错误 touch NEWS README AUTHORS ChangeLog
    如果报错3  AC_PROG_LIBTOOL  sudo apt install libtool
4、 ./configure
5、make
6sudo make install 

(2)spwan-fcgi的安装

1、下载源码 xxxx 
2、unzip  xxx
3、 ./autogen.sh
4、 ./configure
5make
6、sudo make install 
 验证安装
            有命令:spawn-fcgi 

6 部署简单fastCGI程序

(1)spawn-fcgi 命令
        -f 指定fastCGI程序位置
        -d 启动fastCGI程序之前换目录
        -a socket绑定的ip ,默认0.0.0.0
        -p 端口号
        -s 本地套接字地址

(2)部署echo fastCGI程序

    找到解压目录里面找到 examples 里面 的echo
    指定fastcgi程序
---》spawn-fcgi -f ./echo -a 0.0.0.0 10000
    注意echo要添加路径,不然会自动从PATH中找

 (3)nginx添加配置

        location /echo {
            fastcgi_pass 127.0.0.1:10000;
            include fastcgi.conf;
        }

(4)上传文件的部署
    部署zyUpload站点到nginx上
    添加location 指向到fastCGI程序
    location /upload/UploadAction {
        fastcgi_pass 127.0.0.1:10000;
        include fastcgi.conf;
    }

 environ  来自于 unistd.h  char ** 字符串数组
        存储的信息都是环境变量
        数组结束标志,最后指向null

getenv 获取环境变量 ,linux系统函数
        从environ 中获取key是某个值的value


默认environ指向系统环境变量
        有请求来,这个指针会被修改,指向另一个字符串数组

 http开发,收到所有的http请求
        请求行如何获取
        请求头如何获取
            从环境变量中获取

            有连接,fastCGI框架就会将请求头请求行
            赋值到环境变量

        请求数据如何获取
            从标准输入
            fastCGI框架做了重定向
            将客户端的请求数据重定向到fastCGI程序的
            标准输入


        如何返回信息给客户端
            从标准输出输出就可以

POST方法提交数据的形式

 text/plain
 application/x-www-form-urlencoded
 application/json
 text/xml
 multipart/form-data 

 text/plain
        username=itcast
        phone=12345678
        email=itcast@itcast.com
        date=2018-03-30
        sex=male
        class=3
        rule=on

 application/x-www-form-urlencoded
    最常见 ,跟GET方法提交参数差不多
        username=xxx&phone=12345678&email=xxxx%40xxxx.com
            &date=2018-03-30&sex=male&class=3&rule=on

 application/json
      html默认不支持,要依赖javascript
        {“name”:”itcast”,”passwd”:”123456”}
 text/xml
         xml是所有数据类型中表达形式最丰富的
        解析效率低于json

        <?xml version="1.0" encoding="utf-8"?>
        <root>
          <name>itcast</name>
          <pass>123456</pass>
        </root>

 multipart/form-data 
      请求头
            Content-Type: multipart/form-data; boundary=${bound} 

            boundary -- 界限 ,切分多个数据的界限
                也是一个按照某个条件生成的字符串

            --${bound}     一开始是一个bound
            Content-Disposition: form-data; filename="file1"
            \r\n
            file1的内容
            --${bound}
            Content-Disposition: form-data; filename="file2"
            \r\n
            file2的内容
            --${bound}--

            bound
                数据块头信息
                空行
                数据的内容
                \r\n
            bound
                数据块头信息2
                空行
                数据的内容2
                \r\n
            bound

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值