青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
數(shù)據(jù)加載中……

Fastcgi協(xié)議定義解釋與說明

http://wangnow.com/article/28-fastcgi-protocol-specification

 

首先介紹響應(yīng)的數(shù)據(jù),比較簡(jiǎn)單,再者我們對(duì)返回的數(shù)據(jù)比較敏感……
1
響應(yīng)格式
如(十六進(jìn)制方式顯示)

序列 0  1  2  3  4  5  6  7 ...
數(shù)值 01 06 00 01 01 1D 03 00...


序列0(值01)為version,固定取1即可
序列1(值06)為type,代表FCGI_STDOUT,表示應(yīng)用的輸出
序列2 300 01)代表2字節(jié)的請(qǐng)求id,默認(rèn)取1即可(準(zhǔn)確說應(yīng)該是和請(qǐng)求應(yīng)用時(shí)發(fā)送的id一致,這里假設(shè)請(qǐng)求和響應(yīng)的id都是1
序列4 501 1D)代表2字節(jié)的輸出長(zhǎng)度,最大為65535,例如當(dāng)前內(nèi)容長(zhǎng)度為(0x01 << 8) + 0x1D = 285
序列603)代表填充padding字節(jié)數(shù)(填充為滿8字節(jié)的整數(shù)倍),例如當(dāng)前填充(以0填充)長(zhǎng)度為8 - 285 % 8 = 3,即獲取輸出長(zhǎng)度(285)的內(nèi)容后要跳過的字節(jié)數(shù),當(dāng)然如果為8就無需填充了
序列700)為保留字節(jié)
8
字節(jié)(序列7)之后為具體內(nèi)容(contentData)和填充內(nèi)容(paddingData

最后為通知web服務(wù)器的請(qǐng)求結(jié)束記錄,具體內(nèi)容如下

序列 0  1  2  3  4  5  6  7 ...
數(shù)值 01 03 00 01 00 08 00 00...


其中序列103type代表FCGI_END_REQUEST,即請(qǐng)求結(jié)束,8字節(jié)之后為contentDataEndRequestBody)和paddingData
EndRequestBody
的內(nèi)容也比較個(gè)性,是單獨(dú)定義的

typedef struct {
     unsigned char appStatusB3;
     unsigned char appStatusB2;
     unsigned char appStatusB1;
     unsigned char appStatusB0;
     unsigned char protocolStatus;
     unsigned char reserved[3];
} FCGI_EndRequestBody;



appStatus
占了四個(gè)字節(jié),定義為cgi通過調(diào)用系統(tǒng)退出返回的狀態(tài)碼(The application sets the protocolStatus component to FCGI_REQUEST_COMPLETE and the appStatus component to the status code that the CGI program would have returned via the exit system call.Linux正常的程序退出默認(rèn)是返回0(應(yīng)該是吧?我記著是……

protocolStatus
的值可以是

#define FCGI_REQUEST_COMPLETE 0
#define FCGI_CANT_MPX_CONN 1
#define FCGI_OVERLOADED 2
#define FCGI_UNKNOWN_ROLE 3



因此最后FCGI_END_REQUESTcontentData

序列 0  1  2  3  4  5  6  7
數(shù)值 00 00 00 00 00 00 00 00


0-3
序列為appStatus
4
序列protocolStatus0FCGI_REQUEST_COMPLETE
5-7
序列為保留的3字節(jié)reserved[3]

2
請(qǐng)求格式

序列 0  1  2  3  4  5  6  7 ...
數(shù)值 01 01 00 01 00 08 00 00...


序列0(值01)為version
序列1(值01)為type,代表FCGI_BEGIN_REQUES,表示開始發(fā)送請(qǐng)求
序列2 300 01)代表2字節(jié)的請(qǐng)求id,默認(rèn)取1即可
請(qǐng)求開始的記錄稍微特殊,發(fā)送的內(nèi)容(contentData)如下格式

typedef struct {
     unsigned char roleB1;
     unsigned char roleB0;
     unsigned char flags;
     unsigned char reserved[5];
} FCGI_BeginRequestBody;

 

#role的可以取如下三個(gè)值
#define FCGI_RESPONDER 1
#define FCGI_AUTHORIZER 2
#define FCGI_FILTER 3


我們?nèi)?span lang="EN-US">1FCGI_RESPONDER)為啥?說是和經(jīng)典的CGI/1.1作用一樣(http那些東西)
flags
0表示本次請(qǐng)求完畢后即關(guān)閉鏈接。

序列 0  1  2  3  4  5  6  7
數(shù)值 00 01 00 00 00 00 00 00


0
1序列代表role1FCGI_RESPONDER
2
序列為flags 0
3-7
序列為reserved[5]

再說下協(xié)議中FCGI_PARAMS中的Name-Value Pairs,目的是提供應(yīng)用層一些必要的變量(類似http中的headerheaderName-headerValue,當(dāng)然可以為多個(gè)),詳細(xì)定義見http://www.fastcgi.com/devkit/doc/fcgi-spec.html#S3.4
其中一種定義格式如下:

typedef struct {
     unsigned char nameLengthB0; /* nameLengthB0 >> 7 == 0 */
     unsigned char valueLengthB3; /* valueLengthB3 >> 7 == 1 */
     unsigned char valueLengthB2;
     unsigned char valueLengthB1;
     unsigned char valueLengthB0;
     unsigned char nameData[nameLength];
     unsigned char valueData[valueLength
     ((B3 & 0x7f) << 24) + (B2 << 16) + (B1 << 8) + B0];
} FCGI_NameValuePair14;


結(jié)合實(shí)例說明下

序列 0  1  2  3  4  5  6  7 ...
數(shù)值 00 04 00 01 04 EB 05 00...


序列104)代表FCGI_PARAMS
序列7之后的為相應(yīng)的名字(Name)長(zhǎng)度(nameLength)、值(Value)長(zhǎng)度(valueLength)、名字(nameData)、值(valueData
其中規(guī)定名字或者值的長(zhǎng)度如果大于127字節(jié),則要以4字節(jié)存儲(chǔ),如下

序列 0  1  2  3  4  5  6  7 ............
數(shù)值 0F 80 00 00 91 S  C  R IPT_FILENAME/data/www/......


序列00F即十進(jìn)制的15SCRIPT_FILENAME的長(zhǎng)度),不大于127所以占一個(gè)字節(jié)
序列180即十進(jìn)制的128,大于127,說明要占用4字節(jié)(80 00 00 91),長(zhǎng)度為

((B3 & 0x7f) << 24) + (B2 << 16) + (B1 << 8) + B0

算算等于多少呢?如果對(duì)位移、與等操作符號(hào)不熟悉的話,更詳細(xì)的介紹見之前的文章

3
其他說明
各個(gè)值的詳細(xì)定義參見http://www.fastcgi.com/devkit/doc/fcgi-spec.html#S8
以下做一些概要說明
記錄(Records,可以順序發(fā)送或者接受多個(gè)記錄)的格式具體定義如下

typedef struct {
     unsigned char version;
     unsigned char type;
     unsigned char requestIdB1;
     unsigned char requestIdB0;
     unsigned char contentLengthB1;
     unsigned char contentLengthB0;
     unsigned char paddingLength;
     unsigned char reserved;
     unsigned char contentData[contentLength];
     unsigned char paddingData[paddingLength];
} FCGI_Record;


#
前八字節(jié)定義為Header(可以這么理解,頭信息+響應(yīng)內(nèi)容,想想htpp協(xié)議中的header+body就明白了)
#
協(xié)議說明中把這部分定義為FCGI_Header(以上紅色字體部分),即:

typedef struct {
     unsigned char version;
     unsigned char type;
     unsigned char requestIdB1;
     unsigned char requestIdB0;
     unsigned char contentLengthB1;
     unsigned char contentLengthB0;
     unsigned char paddingLength;
     unsigned char reserved;
} FCGI_Header;

 

#version定義為1
#define FCGI_VERSION_1 1



#type
具體值定義,主要關(guān)注FCGI_BEGIN_REQUEST(請(qǐng)求開始) FCGI_END_REQUEST(請(qǐng)求結(jié)束) FCGI_PARAMSfastcgi參數(shù),即一些服務(wù)器變量,如HTTP_USER_AGENT FCGI_STDOUTfastcgi標(biāo)準(zhǔn)輸出,即請(qǐng)求后返回的內(nèi)容)

#define FCGI_BEGIN_REQUEST 1
#define FCGI_ABORT_REQUEST 2
#define FCGI_END_REQUEST 3
#define FCGI_PARAMS 4
#define FCGI_STDIN 5
#define FCGI_STDOUT 6
#define FCGI_STDERR 7
#define FCGI_DATA 8
#define FCGI_GET_VALUES 9
#define FCGI_GET_VALUES_RESULT 10
#define FCGI_UNKNOWN_TYPE 11
#define FCGI_MAXTYPE (FCGI_UNKNOWN_TYPE)



Fastcgi
官方文檔:http://www.fastcgi.com/devkit/doc/fcgi-spec.html
中文版:http://fuzhong1983.blog.163.com/blog/static/1684705201051002951763/

FAQ

1
如何查看web服務(wù)器發(fā)送給fastcgi應(yīng)用的頭信息呢?
我采用的是用python監(jiān)聽一個(gè)端口,然后把nginx中的fastcgi配置改為此端口,這樣python中就可以把接受的信息存為文件。當(dāng)然你還可以直接改nginx的代碼……

2
那請(qǐng)求后對(duì)應(yīng)的輸出內(nèi)容如何查看呢?
既然發(fā)送的信息都有了,那就直接發(fā)送給fastcgi應(yīng)用(如php-fpm)吧,然后輸出隨你處理

3
如何查看請(qǐng)求或者響應(yīng)信息呢?
Linux
下可通過xxd命令查看這種二進(jìn)制輸出文件,WindowsUltraEdit也可以(我用的是未注冊(cè)版的,剩余日子21,注冊(cè)要$59.95),免費(fèi)的還可以試試PSPad(想起了游戲機(jī))

 

posted on 2011-06-21 11:40 肥仔 閱讀(5105) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Web-后臺(tái)

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲乱码精品一二三四区日韩在线| 亚洲深夜福利网站| 国内外成人免费视频| 99re6这里只有精品视频在线观看| 久久精品一二三| 亚洲一区二区在线观看视频| 欧美日韩在线精品一区二区三区| 亚洲人成网站影音先锋播放| 玖玖玖国产精品| 久久成人免费| 激情综合在线| 欧美电影免费观看| 女生裸体视频一区二区三区| 亚洲国产精品热久久| 欧美成人免费在线| 六十路精品视频| 亚洲精品中文字幕有码专区| 91久久精品国产91久久| 欧美黄网免费在线观看| 一本久久青青| 亚洲少妇诱惑| 国产欧美日韩激情| 国产精品入口福利| 亚洲免费一在线| 亚洲欧美在线高清| 国内揄拍国内精品少妇国语| 久久人人97超碰人人澡爱香蕉| 久久国内精品视频| 亚洲人成网在线播放| 亚洲最新视频在线| 国产欧美成人| 免费看成人av| 欧美精品一区二区高清在线观看| 在线视频日韩精品| 亚洲欧美日韩视频一区| 亚洲第一视频| 亚洲精品免费看| 国产精自产拍久久久久久蜜| 鲁大师成人一区二区三区| 欧美成人情趣视频| 先锋影音久久久| 久久一区二区三区四区五区| 一区二区三区.www| 亚洲欧美一区二区视频| 亚洲国产高清一区| 中文精品一区二区三区| 激情成人中文字幕| 亚洲裸体视频| 好吊色欧美一区二区三区视频| 亚洲国产综合91精品麻豆| 国产欧美精品| 99精品欧美一区| 在线播放日韩欧美| 亚洲午夜av电影| 亚洲激情六月丁香| 香蕉精品999视频一区二区 | 在线观看精品视频| 亚洲精品中文字幕在线| 国内成人在线| 一本色道久久88亚洲综合88| 一区免费观看| 午夜久久电影网| 亚洲性视频网站| 久久综合婷婷| 久久久久91| 国产精品美女午夜av| 亚洲精品1区2区| 亚洲国产精品久久精品怡红院| 亚洲欧美国产77777| 一本久久知道综合久久| 裸体素人女欧美日韩| 久久精品二区三区| 国产精品美女诱惑| 中国日韩欧美久久久久久久久| 亚洲精品日韩综合观看成人91| 欧美一区二区在线免费观看| 亚洲欧美日韩国产| 国产精品r级在线| 日韩一区二区精品葵司在线| 亚洲精品中文字幕在线| 免费日韩成人| 欧美成人日本| 伊人春色精品| 久久精品国产一区二区三区免费看 | 久久只精品国产| 国产深夜精品福利| 亚洲欧美日韩综合一区| 亚洲欧美亚洲| 国产精品日产欧美久久久久| 一本色道**综合亚洲精品蜜桃冫| 一本色道**综合亚洲精品蜜桃冫 | 韩国成人精品a∨在线观看| 性欧美长视频| 久久人人97超碰国产公开结果| 国产日韩欧美在线播放| 性做久久久久久久免费看| 久久精品欧美| 1024欧美极品| 欧美老女人xx| 一本到高清视频免费精品| 亚洲一区二区三区视频| 国产精品久久国产愉拍 | 亚洲国产经典视频| 久久久综合视频| 欧美激情久久久| 国产精品99久久久久久人| 欧美偷拍另类| 亚洲欧美另类国产| 久久综合久久美利坚合众国| 亚洲国产精品久久久久秋霞不卡| 欧美福利影院| 一区二区激情| 久久久久久久999精品视频| 1024欧美极品| 欧美色精品天天在线观看视频| 亚洲图片欧洲图片日韩av| 久久精品欧洲| 亚洲精品日本| 国产区日韩欧美| 欧美国产日韩免费| 亚洲欧美国内爽妇网| 免费影视亚洲| 亚洲一区久久久| 伊人久久久大香线蕉综合直播 | 欧美视频在线免费看| 欧美一级免费视频| 亚洲丰满在线| 欧美一区二区三区四区高清| 亚洲福利在线观看| 国产精品国产三级国产专播精品人| 欧美在线不卡视频| 日韩午夜一区| 免费影视亚洲| 久久成年人视频| 99在线精品观看| 国内精品写真在线观看| 欧美日韩美女| 久久中文字幕一区| 亚洲欧美久久| 日韩视频一区二区三区| 老司机一区二区| 欧美一级播放| 一个人看的www久久| 激情欧美日韩一区| 国产精品视频免费观看| 欧美精品色一区二区三区| 欧美专区第一页| 亚洲午夜电影| 亚洲美女少妇无套啪啪呻吟| 欧美电影在线免费观看网站| 国产在线拍揄自揄视频不卡99| 欧美精品尤物在线| 久久亚洲国产精品一区二区| 亚洲免费影视| 一本色道88久久加勒比精品| 欧美护士18xxxxhd| 久久亚洲精选| 久久精品国产77777蜜臀| 亚洲在线一区二区三区| 一区二区三区.www| 亚洲最黄网站| 亚洲老司机av| 亚洲日本一区二区| 亚洲电影免费观看高清完整版| 国产欧美一区二区色老头| 国产精品久久久久久亚洲调教| 欧美三区免费完整视频在线观看| 免费高清在线视频一区·| 久久久久久久999| 久久精品99国产精品酒店日本| 亚洲一区精品电影| 亚洲一区在线免费观看| 亚洲一卡二卡三卡四卡五卡| 一区二区免费在线视频| 一本色道久久综合亚洲精品不| 亚洲久久一区| 99国内精品久久久久久久软件| 亚洲日本免费| 亚洲激情av在线| 亚洲人永久免费| 99精品国产在热久久婷婷| 9国产精品视频| 亚洲在线视频观看| 午夜国产不卡在线观看视频| 欧美在线影院| 麻豆久久精品| 欧美伦理在线观看| 国产精品久久看| 国产一区在线免费观看| 亚洲国产婷婷综合在线精品| 亚洲免费av片| 先锋影音一区二区三区| 久久久久99| 亚洲高清在线播放| 亚洲图片欧美一区| 久久久久九九视频| 欧美全黄视频| 国产日本欧美视频| 亚洲日韩视频| 羞羞答答国产精品www一本|