{"id":334,"date":"2018-07-19T22:29:46","date_gmt":"2018-07-19T14:29:46","guid":{"rendered":"https:\/\/www.myway5.com\/?p=334"},"modified":"2023-07-05T21:49:34","modified_gmt":"2023-07-05T13:49:34","slug":"fastcgi","status":"publish","type":"post","link":"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/","title":{"rendered":"FastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1"},"content":{"rendered":"<p>\u539f\u6587\u5730\u5740\uff1ahttps:\/\/fastcgi-archives.github.io\/FastCGI_Specification.html<\/p>\n<ul>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#1\" title=\"\u7b80\u4ecb\">1.\u7b80\u4ecb<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#2\">2.\u521d\u59cb\u5904\u7406\u72b6\u6001<\/a>\n<ul>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#2.1\">2.1 \u53c2\u6570\u5217\u8868<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#2.2\">2.2 \u6587\u4ef6\u63cf\u8ff0\u7b26<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#2.3\">2.3 \u73af\u5883\u53d8\u91cf<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#2.4\">2.4 \u5176\u4ed6\u72b6\u6001<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#3\">3.\u534f\u8bae\u57fa\u7840<\/a>\n<ul>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#3.1\">3.1 \u7b26\u53f7<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#3.2\">3.2 \u63a5\u53d7\u4f20\u8f93\u8fde\u63a5<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#3.3\">3.3 \u8bb0\u5f55<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#3.4\">3.4 \u952e\u503c\u5bf9<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#3.5\">3.5 \u5173\u95ed\u4f20\u8f93\u8fde\u63a5<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#4\">4.\u7ba1\u7406\u8bb0\u5f55\u7c7b\u578b<\/a>\n<ul>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#4.1\">4.1 FCGI_GET_VALUES, FCGI_GET_VALUES_RESULT<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#4.2\">4.2 FCGI_UNKNOWN_TYPE<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#5\">5.\u5e94\u7528\u7a0b\u5e8f\u7684\u8bb0\u5f55\u7c7b\u578b<\/a>\n<ul>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#5.1\">5.1 FCGI_BEGIN_REQUEST, FCGI_GET_VALUES_RESULT<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#5.2\">5.2 \u952e\u503c\u5bf9\u6d41\uff1aFCGI_PARAMS, FCGI_RESULTS<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#5.3\">5.3 \u5b57\u8282\u6d41\uff1aFCGI_STDIN, FCGI_DATA, FCGI_STDOUT, FCGI_STDERR<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#5.4\">5.4 FCGI_ABORT_REQUEST<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#5.5\">5.5 FCGI_END_REQUEST<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#6\">6.\u89d2\u8272<\/a>\n<ul>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#6.1\">6.1 \u89d2\u8272\u534f\u8bae<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#6.2\">6.2 \u54cd\u5e94\u5668<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#6.3\">6.3 \u6388\u6743\u5668<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#6.4\">6.4 \u8fc7\u6ee4\u5668<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#7\">7.\u9519\u8bef<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#8\">8.\u7c7b\u578b\u548c\u5e38\u91cf<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#9\">9.\u53c2\u8003\u6587\u732e<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#A\">A.\u8868\uff1a\u8bb0\u5f55\u7c7b\u578b\u7684\u5c5e\u6027<\/a><\/li>\n<li><a class=\"wp-editor-md-post-content-link\" href=\"#B\">B. \u5178\u578b\u7684\u534f\u8bae\u6d88\u606f\u6d41<\/a><\/li>\n<\/ul>\n<h2 id='1'>1.\u7b80\u4ecb<\/h2>\n<p>FastCGI \u662f\u4e00\u79cd\u5bf9 CGI \u7684\u5f00\u653e\u6269\u5c55\uff0c\u5728\u4e0d\u6539\u53d8 Web \u670d\u52a1\u7684\u524d\u63d0\u4e0b\uff0c\u4e3a\u6240\u6709\u7684\u7f51\u7edc\u5e94\u7528\u7a0b\u5e8f\u63d0\u4f9b\u4e86\u5f88\u9ad8\u7684\u6027\u80fd\u3002<\/p>\n<p>\u8fd9\u4e2a\u89c4\u8303\u7684\u76ee\u7684\u5f88\u5c0f\uff1a\u4ece\u5e94\u7528\u7a0b\u5e8f\u89d2\u5ea6\u6765\u770b\uff0c\u6307\u5b9a\u4e86\u4e00\u4e2a FastCGI \u5e94\u7528\u7a0b\u5e8f\u548c\u4e00\u4e2a\u652f\u6301 FaseCGI\u7684 Web \u670d\u52a1\u4e4b\u95f4\u7684\u63a5\u53e3\u3002\u8bb8\u591a Web \u670d\u52a1\u7684\u7279\u6027\u548c FastCGI\u76f8\u5173\uff0c\u4f8b\u5982\uff0c\u5e94\u7528\u7a0b\u5e8f\u7ba1\u7406\u5de5\u5177\uff0c\u4e0eWeb\u670d\u52a1\u5668\u63a5\u53e3\u7684\u5e94\u7528\u7a0b\u5e8f\u65e0\u5173\uff0c\u6b64\u5904\u4e0d\u518d\u8d58\u8ff0\u3002<\/p>\n<p>\u8fd9\u4e2a\u89c4\u8303\u9002\u7528\u4e8eUnix\uff08\u66f4\u786e\u5207\u7684\u8bf4\uff0c\u9002\u7528\u4e8e\u652f\u6301 Berkeley Sockets \u7684 POSIX \u7cfb\u7edf\uff09\u3002\u89c4\u8303\u7684\u5927\u90e8\u5206\u662f\u4e00\u4e2a\u7b80\u5355\u7684\u901a\u4fe1\u534f\u8bae\uff0c\u5b83\u72ec\u7acb\u4e8e\u5b57\u8282\u5e8f\uff0c\u5e76\u5c06\u6269\u5c55\u5230\u5176\u4ed6\u7cfb\u7edf\u3002<\/p>\n<p>\u6211\u4eec\u5c06\u901a\u8fc7\u6bd4\u8f83 FastCGI \u548c\u5e38\u89c4\u7684 CGI\/1.1 \u7684 Unix \u5b9e\u73b0\u6765\u4ecb\u7ecd\u5b83\u3002 FastCGI \u662f\u88ab\u8bbe\u8ba1\u7528\u4e8e\u652f\u6301\u5e38\u9a7b\u5185\u5b58\u7684\u5e94\u7528\u7a0b\u5e8f\u8fdb\u7a0b\uff0c\u4f8b\u5982\uff0c\u5e94\u7528\u7a0b\u5e8f\u670d\u52a1\u3002\u5e38\u89c4\u7684 CGI\/1.1 \u7684 Unix \u5b9e\u73b0\u7684\u4e3b\u8981\u4e0d\u540c\u4e4b\u5904\u5728\u4e8e\uff0cCGI \u4f1a\u521b\u5efa\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u8fdb\u7a0b\uff0c\u54cd\u5e94\u4e00\u4e2a\u8bf7\u6c42\u4e4b\u540e\u5c31\u4f1a\u9000\u51fa\u3002<\/p>\n<p>FastCGI\u8fdb\u7a0b\u7684\u521d\u59cb\u72b6\u6001\u6bd4CGI \/ 1.1\u8fdb\u7a0b\u7684\u521d\u59cb\u72b6\u6001\u66f4\u7b80\u6d01\uff0c\u56e0\u4e3a FastCGI \u8fdb\u7a0b\u5728\u521d\u59cb\u5316\u65f6\u6ca1\u6709\u5f00\u59cb\u4e0e\u4efb\u4f55\u4e8b\u7269\u8fde\u63a5\u3002\u5b83\u6ca1\u6709\u5e38\u89c4\u7684\u6253\u5f00\u6807\u51c6\u8f93\u5165(stdin)\u3001\u8f93\u51fa(stdout)\u548c\u9519\u8bef(stderr)\u6d41\uff0c\u5e76\u4e14\u5b83\u4e0d\u4f1a\u901a\u8fc7\u73af\u5883\u53d8\u91cf\u63a5\u53d7\u5927\u91cf\u4fe1\u606f\u3002\u5728\u4e00\u4e2a FastCGI \u8fdb\u7a0b\u4e2d\uff0c\u5173\u952e\u7684\u521d\u59cb\u72b6\u6001\u662f\u76d1\u542c\u4e00\u4e2a socket\uff0c\u8fd9\u4e2asocket\u4f1a\u63a5\u6536\u6765\u81ea Web \u670d\u52a1\u5668\u7684\u8fde\u63a5\u3002<\/p>\n<p>\u4e00\u4e2a FastCGI \u8fdb\u7a0b\u5728\u5b83\u76d1\u542c\u7684 socket \u4e0a\u63a5\u6536\u4e00\u4e2a\u8fde\u63a5\u65f6\uff0c\u8fdb\u7a0b\u4f1a\u6267\u884c\u4e00\u4e2a\u7b80\u5355\u7684\u534f\u8bae\u53bb\u63a5\u6536\u548c\u53d1\u9001\u6570\u636e\u3002\u8fd9\u4e2a\u534f\u8bae\u4e3b\u8981\u6709\u4e24\u4e2a\u76ee\u7684\u3002\u7b2c\u4e00\uff0c\u5728\u591a\u4e2a\u72ec\u7acb\u7684 FastCGI \u8bf7\u6c42\u4e2d\uff0c\u8fd9\u4e2a\u534f\u8bae\u590d\u7528\u4e00\u4e2a\u4f20\u8f93\u8fde\u63a5\u3002\u8fd9\u652f\u6301\u90a3\u4e9b\u4f7f\u7528\u4e86\u4e8b\u4ef6\u9a71\u52a8\u6216\u591a\u7ebf\u7a0b\u7f16\u7a0b\u6280\u672f\u6765\u5904\u7406\u5e76\u53d1\u8bf7\u6c42\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u7b2c\u4e8c\uff0c\u5bf9\u4e8e\u6bcf\u4e00\u4e2a\u8bf7\u6c42\uff0c\u8fd9\u4e2a\u534f\u8bae\u5728\u6bcf\u4e2a\u4f20\u8f93\u65b9\u5411\u4e0a\u90fd\u63d0\u4f9b\u4e86\u591a\u4e2a\u72ec\u7acb\u7684\u6570\u636e\u6d41\u3002\u8fd9\u6837\uff0c\u4f8b\u5982\uff0cstdout \u548c stderr \u6570\u636e\u90fd\u901a\u8fc7\u5355\u4e2a\u4f20\u8f93\u8fde\u63a5\u4ece\u5e94\u7528\u7a0b\u5e8f\u4f20\u9012\u5230Web\u670d\u52a1\u5668\uff0c\u800c\u4e0d\u662f\u50cf CGI\/1.1 \u90a3\u6837\u9700\u8981\u5355\u72ec\u7684\u7ba1\u9053\u3002<\/p>\n<p>\u4e00\u4e2a FastCGI \u5e94\u7528\u7a0b\u5e8f\u626e\u6f14\u4e86\u660e\u786e\u5b9a\u4e49\u7684\u89d2\u8272\u4e4b\u4e00\u3002\u6211\u4eec\u6700\u719f\u6089\u7684\u662f\u54cd\u5e94\u5668\u89d2\u8272\uff0c\u5e94\u7528\u7a0b\u5e8f\u4ece\u4e00\u4e2a HTTP \u8bf7\u6c42\u4e2d\u63a5\u6536\u6240\u6709\u7684\u4fe1\u606f\uff0c\u4e4b\u540e\u751f\u6210\u4e00\u4e2a HTTP \u54cd\u5e94\uff1b\u8fd9\u6b63\u662f CGI\/1.1 \u7a0b\u5e8f\u6240\u626e\u6f14\u7684\u89d2\u8272\u3002\u7b2c\u4e8c\u4e2a\u89d2\u8272\u662f\u8ba4\u8bc1\u5668\uff0c\u5e94\u7528\u7a0b\u5e8f\u4ece\u4e00\u4e2a HTTP \u8bf7\u6c42\u4e2d\u63a5\u6536\u6240\u6709\u7684\u4fe1\u606f\uff0c\u4e4b\u540e\u751f\u6210\u4e00\u4e2a\u8ba4\u8bc1\u901a\u8fc7\/\u4e0d\u901a\u8fc7\u7684\u51b3\u5b9a\u3002\u7b2c\u4e09\u4e2a\u89d2\u8272\u662f\u8fc7\u6ee4\u5668\uff0c\u5e94\u7528\u7a0b\u5e8f\u4ece\u4e00\u4e2a HTTP \u8bf7\u6c42\u4e2d\u63a5\u6536\u6240\u6709\u7684\u4fe1\u606f\uff0c\u52a0\u4e0a\u4e00\u4e2a Web \u670d\u52a1\u5668\u4e2d\u5b58\u50a8\u7684\u989d\u5916\u7684\u6587\u4ef6\u6570\u636e\u6d41\uff0c\u7136\u540e\u751f\u6210\u4e00\u4e2a\u201c\u8fc7\u6ee4\u7684\u201d\u7248\u672c\u7684\u6570\u636e\u6d41\u4f5c\u4e3a HTTP \u54cd\u5e94\u3002\u8fd9\u4e2a\u6846\u67b6\u662f\u53ef\u6269\u5c55\u7684\uff0c\u56e0\u6b64\u66f4\u591a\u7684 FastCGI \u89d2\u8272\u53ef\u4ee5\u5728\u4ee5\u540e\u5b9a\u4e49\u3002<\/p>\n<p>\u5728\u672c\u8bf4\u660e\u4e66\u7684\u5176\u4f59\u90e8\u5206\u4e2d\uff0c\u672f\u8bed\u201c FastCGI \u5e94\u7528\u7a0b\u5e8f\u201d\uff0c\u201c\u5e94\u7528\u7a0b\u5e8f\u8fdb\u7a0b\u201d\u6216\u201c\u5e94\u7528\u7a0b\u5e8f\u670d\u52a1\u5668\u201d\u5728\u4e0d\u4f1a\u5f15\u8d77\u6df7\u6dc6\u7684\u60c5\u51b5\u4e0b\u7f29\u5199\u4e3a\u201c\u5e94\u7528\u7a0b\u5e8f\u201d<\/p>\n<h2 id='2'>2.\u521d\u59cb\u5904\u7406\u72b6\u6001<\/h2>\n<h3 id='2.1'>2.1 \u53c2\u6570\u5217\u8868<\/h3>\n<p>\u9ed8\u8ba4\u60c5\u51b5\u4e0b\uff0cWeb \u670d\u52a1\u5668\u521b\u5efa\u4e00\u4e2a\u5305\u542b\u5355\u4e2a\u5143\u7d20\u7684\u53c2\u6570\u5217\u8868\uff0c\u5e94\u7528\u7a0b\u5e8f\u7684\u540d\u5b57\u4f1a\u88ab\u5f53\u4f5c\u53ef\u6267\u884c\u6587\u4ef6\u8def\u5f84\u540d\u7684\u6700\u540e\u4e00\u90e8\u5206\u3002Web \u670d\u52a1\u5668\u53ef\u80fd\u63d0\u4f9b\u4e86\u4e00\u79cd\u65b9\u6cd5\u6765\u6307\u660e\u4e00\u4e2a\u4e0d\u540c\u7684\u5e94\u7528\u7a0b\u5e8f\u540d\u79f0\uff0c\u6216\u8005\u4e00\u4e2a\u66f4\u8be6\u7ec6\u7684\u53c2\u6570\u5217\u8868\u3002<\/p>\n<p>\u6ce8\u610f\uff0c\u7531 Web \u670d\u52a1\u5668\u6267\u884c\u7684\u6587\u4ef6\u53ef\u80fd\u662f\u4e00\u4e2a\u89e3\u91ca\u6027\u811a\u672c\uff08\u4e00\u4e2a\u6587\u672c\u6587\u4ef6\uff0c\u4ee5#!\u5f00\u5934\uff09\uff0c\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5e94\u7528\u7a0b\u5e8f\u53c2\u6570\u7684\u6784\u5efa\u5982\u5728execve\u8054\u673a\u5e2e\u52a9\u9875\u4e2d\u6240\u8ff0\u90a3\u6837\u3002<\/p>\n<h3 id='2.2'>2.2 \u6587\u4ef6\u63cf\u8ff0\u7b26<\/h3>\n<p>Web \u670d\u52a1\u5668\u5728\u5e94\u7528\u7a0b\u5e8f\u5f00\u59cb\u6267\u884c\u65f6\u6253\u5f00\u5355\u4e2a\u6587\u4ef6\u63cf\u8ff0\u7b26FCGI_LISTENSOCK_FILENO\u3002\u8fd9\u4e2a\u63cf\u8ff0\u7b26\u6307\u5411\u7531 Web \u670d\u52a1\u5668\u521b\u5efa\u7684\u76d1\u542c\u7684socket\u3002<\/p>\n<p>FCGI_LISTENSOCK_FILENO \u7b49\u4ef7\u4e8e STDIN_FILENO \u3002\u6807\u51c6\u7684\u63cf\u8ff0\u7b26 STDOUT_FILENO \u548c STDERR_FILENO \u5728\u5e94\u7528\u7a0b\u5e8f\u5f00\u59cb\u6267\u884c\u65f6\u88ab\u5173\u95ed\u3002\u5224\u65ad\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u662f\u88ab CGI \u8fd8\u662f FastCGI \u8c03\u7528\u7684\u53ef\u9760\u65b9\u6cd5\u662f\uff1a\u8c03\u7528 getpeername(FCGI_LISTENSOCK_FILENO)\uff0c\u8fd4\u56de -1 \u5e76\u5c06errno\u8bbe\u7f6e\u4e3aENOTCONN\u7684\u5c31\u662f FastCGI \u7a0b\u5e8f\u3002<\/p>\n<p>Web\u670d\u52a1\u5668\u9009\u62e9\u53ef\u9760\u7684\u4f20\u8f93\uff0cUnix\u6d41\u7ba1\u9053\uff08AF_UNIX\uff09\u6216TCP\/IP\uff08AF_INET\uff09\uff0c\u9690\u542b\u5728FCGI_LISTENSOCK_FILENO\u5957\u63a5\u5b57\u7684\u5185\u90e8\u72b6\u6001\u4e2d\u3002<\/p>\n<h3 id='2.3'>2.3 \u73af\u5883\u53d8\u91cf<\/h3>\n<p>Web \u670d\u52a1\u5668\u53ef\u4ee5\u4f7f\u7528\u73af\u5883\u53d8\u91cf\u53bb\u4f20\u9012\u53c2\u6570\u7ed9\u5e94\u7528\u7a0b\u5e8f\u3002\u8fd9\u4e2a\u89c4\u8303\u5b9a\u4e49\u4e86\u4e00\u4e2a\u8fd9\u6837\u7684\u53d8\u91cf\uff1aFCGI_WEB_SERVER_ADDRS\u3002\u6211\u4eec\u671f\u5f85\u968f\u7740\u89c4\u8303\u7684\u6f14\u53d8\uff0c\u4f1a\u6709\u66f4\u591a\u7684\u53d8\u91cf\u4f1a\u88ab\u4f20\u9012\u3002Web \u670d\u52a1\u5668\u53ef\u4ee5\u63d0\u4f9b\u4e00\u79cd\u65b9\u6cd5\u53bb\u7ed1\u5b9a\u5176\u4ed6\u7684\u73af\u5883\u53d8\u91cf\uff0c\u6bd4\u5982 PATH \u53d8\u91cf\u3002<\/p>\n<h3 id='2.4'>2.4 \u5176\u4ed6\u72b6\u6001<\/h3>\n<p>Web \u670d\u52a1\u5668\u53ef\u4ee5\u63d0\u4f9b\u4e00\u79cd\u65b9\u6cd5\u53bb\u6307\u660e\u4e00\u4e2a\u5e94\u7528\u7a0b\u5e8f\u7684\u521d\u59cb\u5904\u7406\u72b6\u6001\u7684\u5176\u4ed6\u90e8\u5206\uff0c\u6bd4\u5982\u4f18\u5148\u7ea7\uff0c\u7528\u6237 ID\uff0c\u7528\u6237\u7ec4 ID\uff0c\u6839\u76ee\u5f55\uff0c\u4ee5\u53ca\u8fdb\u7a0b\u7684\u5de5\u4f5c\u76ee\u5f55\u3002<\/p>\n<h2 id='3'>3.\u534f\u8bae\u57fa\u7840<\/h2>\n<h3 id='3.1'>3.1 \u7b26\u53f7<\/h3>\n<p>\u6211\u4eec\u4f7f\u7528 C \u8bed\u8a00\u7b26\u53f7\u53bb\u5b9a\u4e49\u534f\u8bae\u4fe1\u606f\u7684\u683c\u5f0f\u3002\u6240\u6709\u7684\u7ed3\u6784\u4f53\u5143\u7d20\u90fd\u4f7f\u7528 unsigned char \u7c7b\u578b\u5b9a\u4e49\uff0c\u5e76\u5b89\u6392\u4f7fISO C\u7f16\u8bd1\u5668\u4ee5\u5e38\u89c4\u65b9\u5f0f\u5c06\u5b83\u4eec\u6392\u5217\uff0c\u6ca1\u6709\u586b\u5145\u3002\u5728\u7ed3\u6784\u4f53\u4e2d\uff0c\u7b2c\u4e00\u4e2a\u5b57\u8282\u4f1a\u88ab\u7b2c\u4e00\u4e2a\u4f20\u8f93\uff0c\u7b2c\u4e8c\u4e2a\u4f1a\u88ab\u7b2c\u4e8c\u4e2a\u4f20\u8f93\uff0c\u4ee5\u6b64\u7c7b\u63a8\u3002<\/p>\n<p>\u6211\u4eec\u4f7f\u7528\u4e24\u4e2a\u516c\u7ea6\u6765\u6982\u62ec\u6211\u4eec\u7684\u5b9a\u4e49\u3002<\/p>\n<p>\u7b2c\u4e00\uff0c\u5f53\u4e24\u4e2a\u76f8\u90bb\u7684\u7ed3\u6784\u4f53\u7ec4\u4ef6\u540d\u79f0\u76f8\u540c\u65f6\uff0c\u9664\u4e86\u540e\u7f00&#8221;B1&#8243;\u548c&#8221;B0&#8243;\uff0c\u8fd9\u610f\u5473\u7740\u8fd9\u4e24\u4e2a\u7ec4\u4ef6\u53ef\u4ee5\u88ab\u89c6\u4e3a\u5355\u4e2a\u6570\u5b57\uff0c\u8ba1\u7b97\u4e3aB1&lt;&lt;8 + B0\u3002<\/p>\n<p>\u7b2c\u4e8c\uff0c\u6211\u4eec\u6269\u5c55 C \u7684\u7ed3\u6784\u4f53\uff0c\u5141\u8bb8\u4ee5\u4e0b\u7684\u5f62\u5f0f<\/p>\n<pre><code class=\"line-numbers\">struct {\n    unsigned char mumbleLengthB1;\n    unsigned char mumbleLengthB0;\n    ... \/* other stuff *\/\n    unsigned char mumbleData[mumbleLength];\n};\n<\/code><\/pre>\n<p>\u8fd9\u4ee3\u8868\u7740\u4e00\u4e2a\u53d8\u957f\u7684\u7ed3\u6784\u4f53\uff0c\u5b83\u7684\u957f\u5ea6\u662f\u7531\u524d\u9762\u7684\u7ec4\u4ef6\u7684\u503c\u51b3\u5b9a\u7684\u3002<\/p>\n<h3 id='3.2'>3.2 \u63a5\u53d7\u4f20\u8f93\u8fde\u63a5<\/h3>\n<p>\u4e00\u4e2a FastCGI \u5e94\u7528\u7a0b\u5e8f\u5728\u7531\u6587\u4ef6\u63cf\u8ff0\u7b26 FCGI_LISTENSOCK_FILENO \u5f15\u7528\u7684 socket \u4e0a\u8c03\u7528 accept() \u53bb\u63a5\u6536\u4e00\u4e2a\u65b0\u7684\u4f20\u8f93\u8fde\u63a5\u3002\u5982\u679c accept() \u6210\u529f\u4e86\uff0cFCGI_WEB_SERVER_ADDRS \u73af\u5883\u53d8\u91cf\u88ab\u7ed1\u5b9a\uff0c\u5e94\u7528\u7a0b\u5e8f\u7acb\u5373\u6267\u884c\u4ee5\u4e0b\u7684\u7279\u6b8a\u64cd\u4f5c\uff1a<\/p>\n<ul>\n<li>FCGI_WEB_SERVER_ADDRS: \u8fd9\u4e2a\u503c\u662f Web \u670d\u52a1\u5668\u7684\u6709\u6548\u7684 ip \u5730\u5740\u5217\u8868\u3002<\/li>\n<li>\u5982\u679c FCGI_WEB_SERVER_ADDRS \u7ed1\u5b9a\u4e86\uff0c\u5e94\u7528\u7a0b\u5e8f\u68c0\u67e5\u65b0\u8fde\u63a5\u7684\u5bf9\u7b49 IP \u5730\u5740\u662f\u5426\u5728\u5217\u8868\u4e2d\u3002\u5982\u679c\u68c0\u67e5\u5931\u8d25\u4e86\uff08\u5305\u62ec\u8fde\u63a5\u6ca1\u6709\u4f7f\u7528 TCP\/IP \u8fd9\u79cd\u53ef\u80fd\u6027\uff09\uff0c\u5e94\u7528\u7a0b\u5e8f\u5173\u6389\u8fde\u63a5\u6765\u54cd\u5e94\u3002\n<ul>\n<li>FCGI_WEB_SERVER_ADDRS \u662f\u7531\u82f1\u6587\u9017\u53f7\u5206\u5272\u7684 IP \u5730\u5740\u5217\u8868\u3002\u6bcf\u4e00\u4e2a IP \u5730\u5740\u662f\u7531\u70b9\u53f7\u5206\u5272\u76844\u4e2a0~255\u5185\u7684\u6570\u5b57\u7ec4\u6210\u3002\u4f8b\u5982\uff1aFCGI_WEB_SERVER_ADDRS=199.170.183.28,199.170.183.71 \u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u63a5\u6536\u591a\u4e2a\u5e76\u53d1\u4f20\u8f93\u8fde\u63a5\uff0c\u4f46\u662f\u5b83\u4e0d\u4e00\u5b9a\u9700\u8981\u8fd9\u6837\u505a\u3002<\/p>\n<h3 id='3.3'>3.3 \u8bb0\u5f55<\/h3>\n<p>\u5e94\u7528\u7a0b\u5e8f\u4f7f\u7528\u4e00\u4e2a\u7b80\u5355\u7684\u534f\u8bae\u4ece Web \u670d\u52a1\u5668\u83b7\u53d6\u8bf7\u6c42\u5e76\u6267\u884c\u3002\u534f\u8bae\u7684\u5177\u4f53\u5185\u5bb9\u89c6\u5e94\u7528\u7a0b\u5e8f\u7684\u89d2\u8272\u800c\u5b9a\uff0c\u4f46\u662f\u4e00\u822c\u6765\u8bf4\uff0cWeb \u670d\u52a1\u5668\u9996\u5148\u53d1\u9001\u53c2\u6570\u548c\u5176\u4ed6\u6570\u636e\u5230\u5e94\u7528\u7a0b\u5e8f\uff0c\u4e4b\u540e\u5e94\u7528\u7a0b\u5e8f\u53d1\u9001\u7ed3\u679c\u6570\u636e\u7ed9 Web \u670d\u52a1\u5668\uff0c\u6700\u7ec8\u5e94\u7528\u7a0b\u5e8f\u544a\u8bc9 Web \u670d\u52a1\u5668\u8bf7\u6c42\u5904\u7406\u5df2\u7ecf\u7ed3\u675f\u3002<\/p>\n<p>\u6240\u6709\u901a\u8fc7\u4f20\u8f93\u8fde\u63a5\u7684\u6570\u636e\u90fd\u662f\u5728 FastCGI \u8bb0\u5f55(records)\u91cc\u7684\u3002FastCGI \u8bb0\u5f55\u5b8c\u6210\u4e24\u4ef6\u4e8b\u3002\u7b2c\u4e00\uff0c\u8bb0\u5f55\u5728\u591a\u4e2a\u72ec\u7acb\u7684\u8bf7\u6c42\u4e4b\u95f4\u590d\u7528\u4f20\u8f93\u8fde\u63a5\u3002\u8fd9\u79cd\u590d\u7528\u652f\u6301\u4f7f\u7528\u4e8b\u4ef6\u9a71\u52a8\u6a21\u578b\u6216\u591a\u7ebf\u7a0b\u6280\u672f\u6765\u5904\u7406\u5e76\u53d1\u8bf7\u6c42\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u7b2c\u4e8c\uff0c\u5728\u540c\u4e00\u4e2a\u8bf7\u6c42\u4e2d\uff0c\u8bb0\u5f55\u63d0\u4f9b\u4e86\u5728\u4e0d\u540c\u65b9\u5411\u4e0a\u591a\u4e2a\u72ec\u7acb\u7684\u6570\u636e\u6d41\u3002\u8fd9\u6837\uff0cstdout \u548c stderr \u53ef\u4ee5\u4f7f\u7528\u540c\u4e00\u4e2a\u4f20\u8f93\u8fde\u63a5\u6765\u4f20\u8f93\uff0c\u800c\u4e0d\u662f\u9700\u8981\u4e0d\u540c\u7684\u8fde\u63a5\u3002<\/p>\n<pre><code class=\"line-numbers\">        typedef struct {\n            unsigned char version;\n            unsigned char type;\n            unsigned char requestIdB1;\n            unsigned char requestIdB0;\n            unsigned char contentLengthB1;\n            unsigned char contentLengthB0;\n            unsigned char paddingLength;\n            unsigned char reserved;\n            unsigned char contentData[contentLength];\n            unsigned char paddingData[paddingLength];\n        } FCGI_Record;\n<\/code><\/pre>\n<p>\u4e00\u4e2a FastCGI \u8bb0\u5f55\u5305\u542b\u4e00\u4e2a\u5b9a\u957f\u7684\u524d\u7f00\uff0c\u4ee5\u53ca\u53d8\u957f\u7684\u5185\u5bb9\u548c\u586b\u5145\u5b57\u8282\u3002\u4e00\u6761\u8bb0\u5f55\u5305\u542b7\u4e2a\u90e8\u5206\uff1a<\/p>\n<ul>\n<li>\u7248\u672c\u53f7\uff08version\uff09:\u6307\u5b9a FastCGI \u534f\u8bae\u7684\u7248\u672c\u53f7\u3002\u8fd9\u4e2a\u89c4\u8303\u6587\u6863\u7684\u7248\u672c\u53f7\u662f FCGI_VERSION_1\u3002<\/li>\n<li>\u7c7b\u578b\uff08type\uff09\uff1a\u6307\u5b9a\u8fd9\u6761\u8bb0\u5f55\u7684\u7c7b\u578b\u3002\u4f8b\u5982\uff0c\u8bb0\u5f55\u7684\u529f\u80fd\u51fd\u6570\u3002\u5177\u4f53\u7684\u8bb0\u5f55\u7c7b\u578b\u548c\u529f\u80fd\u51fd\u6570\u5728\u4e4b\u540e\u7684\u7ae0\u8282\u6709\u8be6\u7ec6\u4ecb\u7ecd\u3002<\/li>\n<li>\u8bf7\u6c42ID\uff08requestId\uff09\uff1a\u6307\u5b9a\u8fd9\u6761\u8bb0\u5f55\u5c5e\u4e8e\u54ea\u4e2a FastCGI \u8bf7\u6c42\u3002<\/li>\n<li>\u5185\u5bb9\u957f\u5ea6\uff08contentLength\uff09\uff1a\u5728contentData\u90e8\u5206\u5b58\u50a8\u7684\u5b57\u8282\u6570\u3002<\/li>\n<li>\u586b\u5145\u957f\u5ea6\uff08paddingLength\uff09\uff1a\u5728paddingData\u90e8\u5206\u5b58\u50a8\u7684\u5b57\u8282\u6570\u3002<\/li>\n<li>\u5185\u5bb9\u6570\u636e\uff08contentData\uff09\uff1a\u57280\u523065535\u5b57\u8282\u4e4b\u95f4\u7684\u6570\u636e\uff0c\u6839\u636e\u8bb0\u5f55\u7c7b\u578b\u8fdb\u884c\u89e3\u91ca\u3002<\/li>\n<li>\u586b\u5145\u6570\u636e\uff08paddingData\uff09\uff1a0\u5230255\u4e2a\u5b57\u8282\u7684\u6570\u636e\uff0c\u88ab\u5ffd\u7565\u3002<\/li>\n<\/ul>\n<p>\u6211\u4eec\u4f7f\u7528\u5bbd\u677e\u7684C struct\u521d\u59cb\u5316\u8bed\u6cd5\u6765\u6307\u5b9a\u5e38\u91cfFastCGI\u8bb0\u5f55\u3002\u6211\u4eec\u7701\u7565\u4e86\u7248\u672c\u53f7\u90e8\u5206\uff0c\u5ffd\u7565\u586b\u5145\u90e8\u5206\uff0c\u5e76\u5c06requestId\u89c6\u4e3a\u4e00\u4e2a\u6570\u5b57\u3002\u56e0\u6b64 <code>{FCGI_END_REQUEST, 1, {FCGI_REQUEST_COMPLETE,0}<\/code> \u662f\u4e00\u4e2a <code>type == FCGI_END_REQUEST, requestId == 1, and contentData == {FCGI_REQUEST_COMPLETE,0}<\/code> \u7684\u8bb0\u5f55\u3002<\/p>\n<h4>Padding<\/h4>\n<p>\u534f\u8bae\u5141\u8bb8\u53d1\u9001\u8005\u586b\u5145\u53d1\u9001\u7684\u8bb0\u5f55\uff0c\u7136\u540e\u8981\u6c42\u63a5\u6536\u8005\u89e3\u91ca paddingLength\uff0c\u8df3\u8fc7 paddingData\u3002Padding \u5141\u8bb8\u53d1\u9001\u8005\u4fdd\u6301\u6570\u636e\u5bf9\u9f50\uff0c\u8fbe\u5230\u66f4\u9ad8\u6548\u7684\u6570\u636e\u5904\u7406\u3002\u4f7f\u7528X\u7a97\u53e3\u7cfb\u7edf\u534f\u8bae\u7684\u7ecf\u9a8c\u663e\u793a\u4e86\u8fd9\u79cd\u5bf9\u9f50\u7684\u6027\u80fd\u4f18\u52bf\u3002<\/p>\n<p>\u6211\u4eec\u63a8\u8350\u8bb0\u5f55\u7684\u957f\u5ea6\u662f8\u5b57\u8282\u7684\u6574\u6570\u500d\u3002\u4e00\u4e2a FastCGI \u7684\u56fa\u5b9a\u957f\u5ea6\u90e8\u5206\u6b63\u597d\u662f8\u4e2a\u5b57\u8282\u3002<\/p>\n<h4>\u5904\u7406\u8bf7\u6c42ID<\/h4>\n<p>Web\u670d\u52a1\u5668\u91cd\u7528 FastCGI \u7684\u8bf7\u6c42ID\uff1b\u5728\u4e00\u4e2a\u7ed9\u5b9a\u7684\u4f20\u8f93\u8fde\u63a5\u4e0a\uff0c\u5e94\u7528\u7a0b\u5e8f\u8ffd\u8e2a\u6bcf\u4e2a\u8bf7\u6c42 ID \u7684\u5f53\u524d\u72b6\u6001\u3002\u5f53\u5e94\u7528\u7a0b\u5e8f\u6536\u5230\u4e00\u6761\u8bb0\u5f55{FCGI_BEGIN_REQUEST, R, \u2026}\uff0c\u4e00\u4e2a\u8bf7\u6c42 ID R \u7f6e\u4e3a\u6d3b\u8dc3\u72b6\u6001\u3002\u5f53\u5e94\u7528\u7a0b\u5e8f\u53d1\u9001\u4e00\u6761\u8bb0\u5f55 {FCGI_END_REQUEST, R, \u2026} \u7ed9 Web \u670d\u52a1\u5668\u65f6\uff0c\u8bf7\u6c42 ID R\u7f6e\u4e3a\u975e\u6d3b\u8dc3\u72b6\u6001\u3002<\/p>\n<p>\u5f53\u8bf7\u6c42 ID R \u662f\u975e\u6d3b\u8dc3\u7684\uff0c\u5e94\u7528\u7a0b\u5e8f\u4f1a\u5ffd\u7565\u6240\u6709\u7684 requestId <span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\"> R \u7684\u8bb0\u5f55\uff0c\u9664\u4e86\u5982\u4e0a\u6240\u8ff0\u7684 FCGI_BEGIN_REQUEST \u8bb0\u5f55\u3002<\/span><\/p>\n<p>Web \u670d\u52a1\u5668\u8bd5\u56fe\u4fdd\u6301 FastCGI \u8bf7\u6c42 ID \u662f\u4e00\u4e2a\u5f88\u5c0f\u7684\u6570\u5b57\u3002\u8fd9\u6837\u5e94\u7528\u7a0b\u5e8f\u5c31\u53ef\u4ee5\u4f7f\u7528\u4e00\u4e2a\u5f88\u77ed\u7684\u6570\u7ec4\u6765\u8ffd\u8e2a\u8bf7\u6c42 ID \u7684\u72b6\u6001\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u957f\u7684\u6570\u7ec4\u6216\u662f\u4e00\u4e2a\u54c8\u5e0c\u8868\u3002\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u9009\u62e9\u5728\u540c\u4e00\u65f6\u95f4\u4ec5\u4ec5\u63a5\u6536\u4e00\u6761\u8bf7\u6c42\u3002\u8fd9\u6837\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u7b80\u5355\u7684\u6839\u636e\u5f53\u524d\u8fde\u63a5\u8bf7\u6c42 ID \u6765\u68c0\u67e5 requestId\u3002<\/p>\n<h4>\u8bb0\u5f55\u7c7b\u578b<\/h4>\n<p>\u6709\u4e24\u79cd\u9610\u8ff0 FastCGI \u8bb0\u5f55\u7c7b\u578b\u7684\u65b9\u6cd5\u3002<\/p>\n<p>\u7b2c\u4e00\u4e2a\u533a\u522b\u662f\u7ba1\u7406\u8bb0\u5f55\u548c\u5e94\u7528\u7a0b\u5e8f\u8bb0\u5f55\u3002\u7ba1\u7406\u8bb0\u5f55\u5305\u542b\u975e\u7279\u5b9a\u4e8e\u4efb\u4f55 Web \u670d\u52a1\u5668\u8bf7\u6c42\u7684\u4fe1\u606f\uff0c\u4f8b\u5982\u6709\u5173\u5e94\u7528\u7a0b\u5e8f\u7684\u534f\u8bae\u529f\u80fd\u7684\u4fe1\u606f\u3002\u5e94\u7528\u7a0b\u5e8f\u8bb0\u5f55\u5305\u542b\u6709\u5173requestId\u7ec4\u4ef6\u6807\u8bc6\u7684\u7279\u5b9a\u8bf7\u6c42\u7684\u4fe1\u606f\u3002<\/p>\n<p>\u7b2c\u4e8c\u4e2a\u533a\u522b\u662f\u79bb\u6563\u8bb0\u5f55\u548c\u6d41\u8bb0\u5f55\u3002\u79bb\u6563\u8bb0\u5f55\u672c\u8eab\u5305\u542b\u6709\u610f\u4e49\u7684\u6570\u636e\u5355\u5143\u3002\u6d41\u8bb0\u5f55\u662f\u6d41\u7684\u4e00\u90e8\u5206\uff0c\u4f8b\u5982\uff0c\u4e00\u7cfb\u5217\u76840\u6216\u66f4\u591a\u7684\u975e\u7a7a\u8bb0\u5f55\uff08length != 0\uff09\uff0c\u4e4b\u540e\u7d27\u8ddf\u7740\u4e00\u4e2a\u7a7a\u8bb0\u5f55\uff08length <span class=\"text-highlighted-inline\" style=\"background-color: #fffd38;\"> 0\uff09\u3002\u6d41\u8bb0\u5f55\u7684 contentData \u90e8\u5206\u662f\u4e00\u8fde\u4e32\u7684\u5b57\u8282\u7ec4\u6210\u3002\u8fd9\u4e2a\u5b57\u8282\u5e8f\u5217\u5c31\u662f\u6d41\u7684\u503c\u3002\u56e0\u6b64\u6d41\u7684\u503c\u662f\u72ec\u7acb\u4e8e\u5b83\u5305\u542b\u591a\u5c11\u6761\u8bb0\u5f55\uff0c\u4ee5\u53ca\u5b83\u7684\u5b57\u8282\u5728\u975e\u7a7a\u8bb0\u5f55\u4e2d\u5982\u4f55\u5212\u5206\u3002<\/span><\/p>\n<p>\u8fd9\u4e24\u70b9\u89e3\u91ca\u662f\u4e0d\u76f8\u5173\u7684\u3002\u5728\u5f53\u524d\u7248\u672c\u7684 FastCGI \u534f\u8bae\u5b9a\u4e49\u7684\u8bb0\u5f55\u7c7b\u578b\u4e2d\uff0c\u6240\u6709\u7684\u7ba1\u7406\u8bb0\u5f55\u7c7b\u578b\u90fd\u662f\u79bb\u6563\u7684\u8bb0\u5f55\u7c7b\u578b\uff0c\u51e0\u4e4e\u6240\u6709\u7684\u5e94\u7528\u7a0b\u5e8f\u8bb0\u5f55\u7c7b\u578b\u90fd\u662f\u6d41\u8bb0\u5f55\u7c7b\u578b\u3002\u4f46\u662f\u6709\u4e09\u4e2a\u5e94\u7528\u7a0b\u5e8f\u8bb0\u5f55\u7c7b\u578b\u662f\u79bb\u6563\u7684\uff0c\u4e5f\u4e0d\u80fd\u4fdd\u8bc1\u5728\u4e4b\u540e\u7684\u7248\u672c\u4e2d\uff0c\u4e00\u4e2a\u7ba1\u7406\u8bb0\u5f55\u7c7b\u578b\u662f\u6d41\u5f0f\u7684\u3002<\/p>\n<h3 id='3.4'>3.4 \u952e\u503c\u5bf9<\/h3>\n<p>\u5728\u8fd9\u4e9b\u89d2\u8272\u4e2d\uff0cFastCGI \u5e94\u7528\u7a0b\u5e8f\u9700\u8981\u8bfb\u5199\u8fb9\u957f\u503c\u7684\u4e0d\u540c\u6570\u5b57\u3002\u56e0\u6b64\u91c7\u7528\u4e00\u4e2a\u6807\u51c6\u683c\u5f0f\u53bb\u7f16\u7801\u4e00\u4e2a\u952e\u503c\u5bf9\u662f\u6709\u7528\u7684\u3002<\/p>\n<p>FastCGI \u53d1\u9001\u7684\u952e\u503c\u5bf9\u683c\u5f0f\uff1a\u952e\u957f\uff0c\u503c\u957f\uff0c\u952e\uff0c\u503c\u3002\u5c0f\u4e8e\u7b49\u4e8e127\u5b57\u8282\u53ef\u4ee5\u7528\u4e00\u4e2a\u5b57\u8282\u7f16\u7801\uff0c\u5927\u4e8e127\u5b57\u8282\u7684\u75284\u4e2a\u5b57\u8282\u7f16\u7801\uff1a<\/p>\n<pre><code class=\"line-numbers\">typedef struct {\n    unsigned char nameLengthB0;  \/* nameLengthB0  &gt;&gt; 7 == 0 *\/\n    unsigned char valueLengthB0; \/* valueLengthB0 &gt;&gt; 7 == 0 *\/\n    unsigned char nameData[nameLength];\n    unsigned char valueData[valueLength];\n} FCGI_NameValuePair11;\n\ntypedef struct {\n    unsigned char nameLengthB0;  \/* nameLengthB0  &gt;&gt; 7 == 0 *\/\n    unsigned char valueLengthB3; \/* valueLengthB3 &gt;&gt; 7 == 1 *\/\n    unsigned char valueLengthB2;\n    unsigned char valueLengthB1;\n    unsigned char valueLengthB0;\n    unsigned char nameData[nameLength];\n    unsigned char valueData[valueLength\n                    ((B3 &amp; 0x7f) &lt;&lt; 24) + (B2 &lt;&lt; 16) + (B1 &lt;&lt; 8) + B0];\n} FCGI_NameValuePair14;\n\ntypedef struct {\n    unsigned char nameLengthB3;  \/* nameLengthB3  &gt;&gt; 7 == 1 *\/\n    unsigned char nameLengthB2;\n    unsigned char nameLengthB1;\n    unsigned char nameLengthB0;\n    unsigned char valueLengthB0; \/* valueLengthB0 &gt;&gt; 7 == 0 *\/\n    unsigned char nameData[nameLength\n                    ((B3 &amp; 0x7f) &lt;&lt; 24) + (B2 &lt;&lt; 16) + (B1 &lt;&lt; 8) + B0];\n    unsigned char valueData[valueLength];\n} FCGI_NameValuePair41;\n\ntypedef struct {\n    unsigned char nameLengthB3;  \/* nameLengthB3  &gt;&gt; 7 == 1 *\/\n    unsigned char nameLengthB2;\n    unsigned char nameLengthB1;\n    unsigned char nameLengthB0;\n    unsigned char valueLengthB3; \/* valueLengthB3 &gt;&gt; 7 == 1 *\/\n    unsigned char valueLengthB2;\n    unsigned char valueLengthB1;\n    unsigned char valueLengthB0;\n    unsigned char nameData[nameLength\n                    ((B3 &amp; 0x7f) &lt;&lt; 24) + (B2 &lt;&lt; 16) + (B1 &lt;&lt; 8) + B0];\n    unsigned char valueData[valueLength\n                    ((B3 &amp; 0x7f) &lt;&lt; 24) + (B2 &lt;&lt; 16) + (B1 &lt;&lt; 8) + B0];\n} FCGI_NameValuePair44;\n<\/code><\/pre>\n<p>\u7b2c\u4e00\u4e2a\u5b57\u8282\u7684\u9ad8\u4f4d\u8868\u793a\u957f\u5ea6\u7684\u7f16\u7801\u3002\u9ad8\u4f4d\u662f0\u8868\u793a\u4e00\u4e2a\u5b57\u8282\u7f16\u7801\uff0c\u9ad8\u4f4d\u662f1\u8868\u793a4\u4e2a\u5b57\u8282\u7f16\u7801\u3002<\/p>\n<p>\u8fd9\u6837\u7684\u952e\u503c\u5bf9\u683c\u5f0f\u5141\u8bb8\u53d1\u9001\u65b9\u53d1\u9001\u4e8c\u8fdb\u5236\u6570\u636e\uff0c\u4f7f\u5f97\u63a5\u53d7\u8005\u53ef\u4ee5\u7acb\u5373\u5206\u914d\u6b63\u786e\u5927\u5c0f\u7684\u5b58\u50a8\u7a7a\u95f4\uff0c\u5373\u4f7f\u662f\u5f88\u5927\u7684\u503c\u3002<\/p>\n<h3 id='3.5'>3.5 \u5173\u95ed\u4f20\u8f93\u8fde\u63a5<\/h3>\n<p>Web \u670d\u52a1\u5668\u63a7\u5236\u4f20\u8f93\u8fde\u63a5\u7684\u751f\u547d\u5468\u671f\u3002Web \u670d\u52a1\u5668\u53ef\u4ee5\u5728\u6ca1\u6709\u6d3b\u8dc3\u8bf7\u6c42\u65f6\u5173\u95ed\u8fde\u63a5\u3002\u6216\u8005 Web \u670d\u52a1\u5668\u53ef\u4ee5\u5c06\u5173\u95ed\u6743\u9650\u59d4\u6258\u7ed9\u5e94\u7528\u7a0b\u5e8f\uff08\u8bf7\u53c2\u9605FCGI_BEGIN_REQUEST)\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u5e94\u7528\u7a0b\u5e8f\u5728\u6307\u5b9a\u7684\u8bf7\u6c42\u4e4b\u540e\u5173\u95ed\u8fde\u63a5\u3002<\/p>\n<p>\u8fd9\u79cd\u7075\u6d3b\u8bbe\u8ba1\u53ef\u4ee5\u5305\u5bb9\u4e0d\u540c\u7684\u5e94\u7528\u7a0b\u5e8f\u98ce\u683c\u3002\u7b80\u5355\u7684\u5e94\u7528\u7a0b\u5e8f\u4e00\u6b21\u53ea\u5904\u7406\u4e00\u4e2a\u8bf7\u6c42\uff0c\u6bcf\u4e2a\u8bf7\u6c42\u90fd\u4f1a\u5efa\u7acb\u4e00\u4e2a\u8fde\u63a5\u3002\u66f4\u590d\u6742\u7684\u5e94\u7528\u5c06\u4f1a\u5904\u7406\u5e76\u53d1\u8bf7\u6c42\uff0c\u4e00\u4e2a\u548c\u591a\u4e2a\u4f20\u8f93\u8fde\u63a5\uff0c\u4f1a\u957f\u65f6\u95f4\u4fdd\u6301\u4f20\u8f93\u8fde\u63a5\u3002<\/p>\n<p>\u901a\u8fc7\u5728\u5b8c\u6210\u5199\u5165\u54cd\u5e94\u65f6\u5173\u95ed\u4f20\u8f93\u8fde\u63a5\uff0c\u7b80\u5355\u7684\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u663e\u7740\u63d0\u5347\u6027\u80fd\u3002Web\u670d\u52a1\u5668\u9700\u8981\u63a7\u5236\u957f\u671f\u8fde\u63a5\u7684\u8fde\u63a5\u751f\u5b58\u671f\u3002<\/p>\n<p>\u5f53\u5e94\u7528\u7a0b\u5e8f\u5173\u95ed\u8fde\u63a5\u6216\u53d1\u73b0\u8fde\u63a5\u5df2\u5173\u95ed\u65f6\uff0c\u5e94\u7528\u7a0b\u5e8f\u5c06\u542f\u52a8\u65b0\u8fde\u63a5\u3002<\/p>\n<h2 id='4'>4.\u7ba1\u7406\u8bb0\u5f55\u7c7b\u578b<\/h2>\n<h3 id='4.1'>4.1 FCGI_GET_VALUES, FCGI_GET_VALUES_RESULT<\/h3>\n<p>Web \u670d\u52a1\u5668\u53ef\u4ee5\u67e5\u8be2\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\u7279\u5b9a\u53d8\u91cf\u3002\u670d\u52a1\u5668\u901a\u5e38\u4f1a\u5728\u5e94\u7528\u7a0b\u5e8f\u542f\u52a8\u65f6\u6267\u884c\u67e5\u8be2\uff0c\u4ee5\u4fbf\u81ea\u52a8\u5316\u7cfb\u7edf\u914d\u7f6e\u7684\u67d0\u4e9b\u65b9\u9762\u3002<\/p>\n<p>\u5e94\u7528\u7a0b\u5e8f\u63a5\u53d7\u4e00\u4e2a\u67e5\u8be2\uff0c\u6bd4\u5982{FCGI_GET_VALUES, 0, \u2026}\u3002FCGI_GET_VALUES \u8bb0\u5f55\u7684 contentData \u90e8\u5206\u5305\u542b\u4e00\u7cfb\u5217\u7684\u5177\u6709\u7a7a\u503c\u7684\u952e\u503c\u5bf9\u3002<\/p>\n<p>\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7\u53d1\u9001\u4e00\u4e2a\u5e26\u6709\u503c\u7684\u8bb0\u5f55{FCGI_GET_VALUES_RESULT, 0, \u2026}\u6765\u54cd\u5e94\u3002\u5982\u679c\u5e94\u7528\u7a0b\u5e8f\u4e0d\u7406\u89e3\u5728\u67e5\u8be2\u4e2d\u7684\u67d0\u4e2a\u53d8\u91cf\u540d\uff0c\u5b83\u4f1a\u4ece\u54cd\u5e94\u4e2d\u5ffd\u7565\u8be5\u540d\u79f0\u3002FCGI_GET_VALUES \u88ab\u8bbe\u8ba1\u6210\u5141\u8bb8\u4e00\u4e2a\u5f00\u653e\u7ed3\u675f\u96c6\u5408\u7684\u53d8\u91cf\u3002\u521d\u59cb\u96c6\u5408\u53d8\u91cf\u63d0\u4f9b\u4fe1\u606f\u53bb\u5e2e\u52a9\u670d\u52a1\u5668\u64cd\u4f5c\u5e94\u7528\uff0c\u4ee5\u53ca\u8fde\u63a5\u7ba1\u7406\uff1a<\/p>\n<ul>\n<li>FCGI_MAX_CONNS\uff1a\u5e94\u7528\u7a0b\u5e8f\u63a5\u6536\u7684\u5e76\u53d1\u4f20\u8f93\u8fde\u63a5\u7684\u6700\u5927\u503c\u3002\u6bd4\u5982\uff0c1\u621610\u3002<\/li>\n<li>FCGI_MAX_REQS\uff1a\u5e94\u7528\u7a0b\u5e8f\u63a5\u6536\u7684\u5e76\u53d1\u8bf7\u6c42\u7684\u6700\u5927\u503c\u3002\u6bd4\u59821\u621650\u3002<\/li>\n<li>FCGI_MPXS_CONNS\uff1a\u5982\u679c\u5e94\u7528\u7a0b\u5e8f\u4e0d\u590d\u7528\u8fde\u63a5\uff0c\u8fd9\u4e2a\u503c\u662f0\uff08\u4f8b\u5982\uff0c\u4e00\u4e2a\u8bf7\u6c42\u4e00\u4e2a\u8fde\u63a5\uff09\u3002\u5426\u5219\u662f1\u3002<\/li>\n<\/ul>\n<h3 id='4.2'>4.2 FCGI_UNKNOWN_TYPE<\/h3>\n<p>\u7ba1\u7406\u8bb0\u5f55\u7c7b\u578b\u96c6\u53ef\u80fd\u4f1a\u5728\u6b64\u534f\u8bae\u7684\u672a\u6765\u7248\u672c\u4e2d\u589e\u957f\u3002\u4e3a\u4e86\u63d0\u4f9b\u8fd9\u79cd\u6f14\u53d8\uff0c\u8be5\u534f\u8bae\u5305\u62ec FCGI_UNKNOWN_TYPE \u7ba1\u7406\u8bb0\u5f55\u3002\u5f53\u5e94\u7528\u7a0b\u5e8f\u6536\u5230\u5176\u7c7b\u578bT\u4e0d\u7406\u89e3\u7684\u7ba1\u7406\u8bb0\u5f55\u65f6\uff0c\u5e94\u7528\u7a0b\u5e8f\u5c06\u4f7f\u7528{FCGI_UNKNOWN_TYPE\uff0c0\uff0c{T}}\u8fdb\u884c\u54cd\u5e94\u3002<\/p>\n<p>FCGI_UNKNOWN_TYPE\u8bb0\u5f55\u7684contentData\u90e8\u5206\u5177\u6709\u4ee5\u4e0b\u5f62\u5f0f\uff1a<\/p>\n<pre><code class=\"line-numbers\">typedef struct {\n    unsigned char type;    \n    unsigned char reserved[7];\n} FCGI_UnknownTypeBody;\n<\/code><\/pre>\n<p>\u7c7b\u578b\u7ec4\u4ef6\u662f\u65e0\u6cd5\u8bc6\u522b\u7684\u7ba1\u7406\u8bb0\u5f55\u7684\u7c7b\u578b\u3002<\/p>\n<h2 id='5'>5.\u5e94\u7528\u7684\u8bb0\u5f55\u7c7b\u578b<\/h2>\n<h3 id='5.1'>5.1 FCGI_BEGIN_REQUEST, FCGI_GET_VALUES_RESULT<\/h3>\n<p>Web\u670d\u52a1\u53d1\u9001\u4e00\u4e2a FCGI_BEGIN_REQUEST \u8bb0\u5f55\u6765\u5f00\u59cb\u4e00\u4e2a\u8bf7\u6c42\u3002<\/p>\n<p>\u4e00\u4e2a FCGI_BEGIN_REQUEST \u8bb0\u5f55\u7684 contentData \u90e8\u5206\u6709\u4ee5\u4e0b\u5f62\u5f0f\uff1a<\/p>\n<pre><code class=\"line-numbers\">typedef struct {\n    unsigned char roleB1;\n    unsigned char roleB0;\n    unsigned char flags;\n    unsigned char reserved[5];\n} FCGI_BeginRequestBody;\n<\/code><\/pre>\n<p>\u89d2\u8272\u7ec4\u4ef6\u8bbe\u7f6eWeb\u670d\u52a1\u5668\u671f\u671b\u5e94\u7528\u7a0b\u5e8f\u626e\u6f14\u7684\u89d2\u8272\u3002\u5f53\u524d\u5b9a\u4e49\u7684\u89d2\u8272\u662f\uff1a<\/p>\n<ul>\n<li>FCGI_RESPONDER<\/li>\n<li>FCGI_AUTHORIZER<\/li>\n<li>FCGI_FILTER<\/li>\n<\/ul>\n<p>\u89d2\u8272\u5b9a\u4e49\u5177\u4f53\u5728\u7b2c\u516d\u7ae0\u63cf\u8ff0\u3002<\/p>\n<p>flags\u90e8\u5206\u5305\u542b\u4e00\u4e2a\u63a7\u5236\u8fde\u63a5\u5173\u95ed\u7684\u4f4d\uff1a<\/p>\n<ul>\n<li>flags &amp; FCGI_KEEP_CONN: \u5982\u679c\u662f0\uff0c\u5e94\u7528\u7a0b\u5e8f\u5728\u54cd\u5e94\u8bf7\u6c42\u540e\u5173\u95ed\u8fde\u63a5\u3002\u5982\u679c\u4e0d\u662f0\uff0c\u5e94\u7528\u7a0b\u5e8f\u5728\u54cd\u5e94\u8bf7\u6c42\u540e\u4e0d\u5173\u95ed\u8fde\u63a5\uff1bWeb \u670d\u52a1\u5668\u4fdd\u6301\u5bf9\u8fde\u63a5\u7684\u7ba1\u7406\u6743\u9650\u3002<\/li>\n<\/ul>\n<h3 id='5.2'>5.2 \u952e\u503c\u5bf9\u6d41\uff1aFCGI_PARAMS, FCGI_RESULTS<\/h3>\n<h4>FCGI_PARAMS<\/h4>\n<p>\u662f\u4e00\u79cd\u6d41\u8bb0\u5f55\u7c7b\u578b\uff0c\u7528\u4e8e\u4eceWeb\u670d\u52a1\u5668\u5411\u5e94\u7528\u7a0b\u5e8f\u53d1\u9001\u952e\u503c\u5bf9\u3002\u540d\u79f0 &#8211; \u503c\u5bf9\u4e00\u4e2a\u63a5\u4e00\u4e2a\u5730\u6cbf\u7740\u6d41\u5411\u4e0b\u53d1\u9001\uff0c\u6ca1\u6709\u6307\u5b9a\u7684\u987a\u5e8f\u3002<\/p>\n<h3 id='5.3'>5.3 \u5b57\u8282\u6d41\uff1aFCGI_STDIN, FCGI_DATA, FCGI_STDOUT, FCGI_STDERR<\/h3>\n<h4>FCGI_STDIN<\/h4>\n<p>\u662f\u4e00\u79cd\u6d41\u8bb0\u5f55\u7c7b\u578b\uff0c\u7528\u4e8e\u4eceWeb\u670d\u52a1\u5668\u5411\u5e94\u7528\u7a0b\u5e8f\u53d1\u9001\u4efb\u610f\u6570\u636e\u3002 FCGI_DATA\u662f\u7b2c\u4e8c\u4e2a\u6d41\u8bb0\u5f55\u7c7b\u578b\uff0c\u7528\u4e8e\u5411\u5e94\u7528\u7a0b\u5e8f\u53d1\u9001\u5176\u4ed6\u6570\u636e\u3002<\/p>\n<p>FCGI_STDOUT\u548cFCGI_STDERR\u662f\u6d41\u8bb0\u5f55\u7c7b\u578b\uff0c\u7528\u4e8e\u5206\u522b\u4ece\u5e94\u7528\u7a0b\u5e8f\u5411Web\u670d\u52a1\u5668\u53d1\u9001\u4efb\u610f\u6570\u636e\u548c\u9519\u8bef\u6570\u636e\u3002<\/p>\n<h3 id='5.4'>5.4 FCGI_ABORT_REQUEST<\/h3>\n<p>Web\u670d\u52a1\u5668\u53d1\u9001 FCGI_ABORT_REQUEST \u8bb0\u5f55\u4ee5\u4e2d\u6b62\u8bf7\u6c42\u3002\u6536\u5230{FCGI_ABORT_REQUEST\uff0cR}\u540e\uff0c\u5e94\u7528\u7a0b\u5e8f\u4f1a\u5c3d\u5feb\u54cd\u5e94{FCGI_END_REQUEST\uff0cR\uff0c{FCGI_REQUEST_COMPLETE\uff0cappStatus}}\u3002\u8fd9\u786e\u5b9e\u662f\u6765\u81ea\u5e94\u7528\u7a0b\u5e8f\u7684\u54cd\u5e94\uff0c\u800c\u4e0d\u662f\u6765\u81eaFastCGI\u5e93\u7684\u4f4e\u7ea7\u522b\u786e\u8ba4\u3002<\/p>\n<p>\u5f53HTTP\u5ba2\u6237\u7aef\u5173\u95ed\u5176\u4f20\u8f93\u8fde\u63a5\u800c\u6765\u81ea\u5ba2\u6237\u7aefFastCGI\u8bf7\u6c42\u6b63\u8fd0\u884c\u5230\u4e00\u534a\u65f6\uff0cWeb\u670d\u52a1\u5668\u5c06\u4e2d\u6b62FastCGI\u8bf7\u6c42\u3002\u8fd9\u79cd\u60c5\u51b5\u4f3c\u4e4e\u4e0d\u592a\u53ef\u80fd\uff0c\u5927\u591a\u6570FastCGI\u8bf7\u6c42\u7684\u54cd\u5e94\u65f6\u95f4\u90fd\u5f88\u77ed\uff0c\u5982\u679c\u5ba2\u6237\u7aef\u901f\u5ea6\u5f88\u6162\uff0cWeb\u670d\u52a1\u5668\u4f1a\u63d0\u4f9b\u8f93\u51fa\u7f13\u51b2\u3002\u4f46FastCGI\u5e94\u7528\u7a0b\u5e8f\u53ef\u80fd\u4e0e\u5176\u4ed6\u7cfb\u7edf\u901a\u4fe1\u6709\u5ef6\u8fdf\u6216\u6b63\u6267\u884c\u670d\u52a1\u5668\u63a8\u9001\u3002<\/p>\n<p>\u5f53Web\u670d\u52a1\u5668\u672a\u901a\u8fc7\u4f20\u8f93\u8fde\u63a5\u590d\u7528\u8bf7\u6c42\u65f6\uff0cWeb\u670d\u52a1\u5668\u53ef\u4ee5\u901a\u8fc7\u5173\u95ed\u8bf7\u6c42\u7684\u4f20\u8f93\u8fde\u63a5\u6765\u4e2d\u6b62\u8bf7\u6c42\u3002\u4f46\u662f\u5bf9\u4e8e\u591a\u8def\u590d\u7528\u7684\u8bf7\u6c42\uff0c\u5173\u95ed\u4f20\u8f93\u8fde\u63a5\u4f1a\u5bfc\u81f4\u4e2d\u6b62\u8fde\u63a5\u4e0a\u7684\u6240\u6709\u8bf7\u6c42\uff0c\u8fd9\u662f\u4e00\u79cd\u4ee4\u4eba\u9057\u61be\u7684\u7ed3\u679c\u3002<\/p>\n<h3 id='5.5'>5.5 FCGI_END_REQUEST<\/h3>\n<p>\u5e94\u7528\u7a0b\u5e8f\u53d1\u9001FCGI_END_REQUEST\u8bb0\u5f55\u4ee5\u7ec8\u6b62\u8bf7\u6c42\uff0c\u65e2\u53ef\u80fd\u56e0\u4e3a\u5e94\u7528\u7a0b\u5e8f\u5df2\u5904\u7406\u8bf7\u6c42\uff0c\u4e5f\u53ef\u80fd\u5e94\u7528\u7a0b\u5e8f\u5df2\u62d2\u7edd\u8be5\u8bf7\u6c42\u3002<\/p>\n<p>FCGI_END_REQUEST\u8bb0\u5f55\u7684contentData\u90e8\u5206\u5177\u6709\u4ee5\u4e0b\u5f62\u5f0f\uff1a<\/p>\n<pre><code class=\"line-numbers\">typedef struct {\n    unsigned char appStatusB3;\n    unsigned char appStatusB2;\n    unsigned char appStatusB1;\n    unsigned char appStatusB0;\n    unsigned char protocolStatus;\n    unsigned char reserved[3];\n} FCGI_EndRequestBody;\n<\/code><\/pre>\n<p>appStatus\u7ec4\u4ef6\u662f\u5e94\u7528\u7a0b\u5e8f\u7ea7\u72b6\u6001\u4ee3\u7801\u3002\u6bcf\u4e2a\u89d2\u8272\u90fd\u5728\u6587\u6863\u4e0a\u8bb0\u5f55\u4e86\u5b83\u5bf9appStatus\u7684\u4f7f\u7528\u3002<\/p>\n<p>protocolStatus\u7ec4\u4ef6\u662f\u534f\u8bae\u7ea7\u72b6\u6001\u4ee3\u7801;\u53ef\u80fd\u7684protocolStatus\u503c\u662f\uff1a<\/p>\n<ul>\n<li>FCGI_REQUEST_COMPLETE\uff1a\u6b63\u5e38\u7684\u8bf7\u6c42\u7ed3\u675f\u3002<\/li>\n<li>FCGI_CANT_MPX_CONN\uff1a\u62d2\u7edd\u65b0\u8bf7\u6c42\u3002\u5f53Web\u670d\u52a1\u5668\u901a\u8fc7\u4e00\u4e2a\u8fde\u63a5\u5c06\u5e76\u53d1\u8bf7\u6c42\u53d1\u9001\u5230\u65e8\u5728\u6bcf\u4e2a\u8fde\u63a5\u4e00\u6b21\u5904\u7406\u4e00\u4e2a\u8bf7\u6c42\u7684\u5e94\u7528\u7a0b\u5e8f\u65f6\uff0c\u5c31\u4f1a\u53d1\u751f\u8fd9\u79cd\u60c5\u51b5\u3002<\/li>\n<li>FCGI_OVERLOADED\uff1a\u62d2\u7edd\u65b0\u8bf7\u6c42\u3002\u5f53\u5e94\u7528\u7a0b\u5e8f\u8017\u5c3d\u67d0\u4e9b\u8d44\u6e90\u65f6\u4f1a\u53d1\u751f\u8fd9\u79cd\u60c5\u51b5\uff0c\u4f8b\u5982\uff1a\u6570\u636e\u5e93\u8fde\u63a5\u3002<\/li>\n<li>FCGI_UNKNOWN_ROLE\uff1a\u62d2\u7edd\u65b0\u8bf7\u6c42\u3002\u5f53Web\u670d\u52a1\u5668\u6307\u5b9a\u4e86\u5e94\u7528\u7a0b\u5e8f\u672a\u77e5\u7684\u89d2\u8272\u65f6\uff0c\u4f1a\u53d1\u751f\u8fd9\u79cd\u60c5\u51b5\u3002<\/li>\n<\/ul>\n<h2 id='6'>6.\u89d2\u8272<\/h2>\n<h3 id='6.1'>6.1 \u89d2\u8272\u534f\u8bae<\/h3>\n<p>\u89d2\u8272\u534f\u8bae\u4ec5\u5305\u62ec\u5177\u6709\u5e94\u7528\u7a0b\u5e8f\u8bb0\u5f55\u7c7b\u578b\u7684\u8bb0\u5f55\u3002\u5b83\u4eec\u90fd\u4f7f\u7528\u6d41\u4f20\u8f93\u51e0\u4e4e\u6240\u6709\u7684\u6570\u636e\u3002<\/p>\n<p>\u4e3a\u4e86\u4f7f\u534f\u8bae\u53ef\u9760\u5e76\u7b80\u5316\u5e94\u7528\u7a0b\u5e8f\u7f16\u7a0b\uff0c\u89d2\u8272\u534f\u8bae\u88ab\u8bbe\u8ba1\u4f7f\u7528<code>\u51e0\u4e4e\u8fde\u7eed\u7684\u7f16\u7ec4\uff08nearly sequential marshalling.\uff09<\/code>\u3002\u5177\u6709<code>\u4e25\u683c\u8fde\u7eed\u7f16\u7ec4\uff08strictly sequential marshalling\uff09<\/code>\u7684\u534f\u8bae\u4e2d\uff0c\u5e94\u7528\u7a0b\u5e8f\u63a5\u6536\u5176\u7b2c\u4e00\u4e2a\u8f93\u5165\uff0c\u7136\u540e\u662f\u7b2c\u4e8c\u4e2a\u8f93\u5165\uff0c\u7b49\u7b49\u3002\u76f4\u63a5\u6240\u6709\u6570\u636e\u63a5\u53d7\u5b8c\u6210\u3002\u7c7b\u4f3c\u5730\uff0c\u5e94\u7528\u7a0b\u5e8f\u53d1\u9001\u5b83\u7684\u7b2c\u4e00\u4e2a\u8f93\u51fa\uff0c\u7136\u540e\u53d1\u9001\u5b83\u7684\u7b2c\u4e8c\u4e2a\u8f93\u51fa\uff0c\u76f4\u5230\u5b83\u53d1\u9001\u5b83\u4eec\u5168\u90e8\u3002\u8f93\u5165\u4e0d\u76f8\u4e92\u4ea4\u9519\uff0c\u8f93\u51fa\u4e0d\u76f8\u4e92\u4ea4\u9519\u3002<\/p>\n<p><code>\u8fde\u7eed\u7f16\u7ec4<\/code>\u89c4\u5219\u5bf9\u67d0\u4e9bFastCGI\u89d2\u8272\u9650\u5236\u592a\u591a\u3002\u56e0\u4e3a CGI \u7a0b\u5e8f\u6ca1\u6709\u65f6\u95f4\u4e0a\u7684\u9650\u5236\uff0c\u53ef\u4ee5\u540c\u65f6\u4f7f\u7528 stdout\u548cstderr\u3002\u56e0\u6b64\u89d2\u8272\u534f\u8bae\u4f7f\u7528FCGI_STDOUT \u548cFCGI_STDERR\u6765\u5141\u8bb8\u8fd9\u4e24\u4e2a\u6d41\u4ea4\u9519\u3002<\/p>\n<p>\u6240\u6709\u89d2\u8272\u534f\u8bae\u90fd\u4f7f\u7528FCGI_STDERR\u6d41\uff0c\u5c31\u50cf\u5728\u4f20\u7edf\u5e94\u7528\u7a0b\u5e8f\u7f16\u7a0b\u4e2d\u4f7f\u7528stderr\u4e00\u6837\uff1a\u4ee5\u53ef\u7406\u89e3\u7684\u65b9\u5f0f\u62a5\u544a\u5e94\u7528\u7a0b\u5e8f\u7ea7\u9519\u8bef\u3002\u4f7f\u7528FCGI_STDERR\u6d41\u59cb\u7ec8\u662f\u53ef\u9009\u7684\u3002\u5982\u679c\u5e94\u7528\u7a0b\u5e8f\u6ca1\u6709\u8981\u62a5\u544a\u7684\u9519\u8bef\uff0c\u5b83\u5c06\u4e0d\u53d1\u9001FCGI_STDERR\u8bb0\u5f55\u6216\u4e00\u4e2a\u96f6\u957f\u5ea6FCGI_STDERR\u8bb0\u5f55\u3002<\/p>\n<p>\u5f53\u89d2\u8272\u534f\u8bae\u8981\u6c42\u4f20\u8f93FCGI_STDERR\u4ee5\u5916\u7684\u6d41\u65f6\uff0c\u5373\u4f7f\u6d41\u662f\u7a7a\u7684\uff0c\u4e5f\u603b\u662f\u4f20\u8f93\u81f3\u5c11\u4e00\u4e2a\u6d41\u7c7b\u578b\u7684\u8bb0\u5f55<\/p>\n<p>\u518d\u6b21\u4e3a\u4e86\u53ef\u9760\u7684\u534f\u8bae\u548c\u7b80\u5316\u7684\u5e94\u7528\u7a0b\u5e8f\u7f16\u7a0b\uff0c\u89d2\u8272\u534f\u8bae\u88ab\u8bbe\u8ba1\u6210<code>\u51e0\u4e4e\u8fde\u7eed\u7684\u7f16\u7ec4\uff08nearly sequential marshalling.\uff09<\/code>\u3002\u5728\u771f\u6b63\u7684\u8bf7\u6c42-\u54cd\u5e94\u534f\u8bae\u4e2d\uff0c\u5e94\u7528\u7a0b\u5e8f\u5728\u53d1\u9001\u5176\u7b2c\u4e00\u4e2a\u8f93\u51fa\u8bb0\u5f55\u4e4b\u524d\u63a5\u6536\u5176\u6240\u6709\u8f93\u5165\u8bb0\u5f55\u3002\u8bf7\u6c42-\u54cd\u5e94\u534f\u8bae\u4e0d\u5141\u8bb8\u6d41\u6c34\u7ebf\u64cd\u4f5c\u3002<\/p>\n<p>\u8bf7\u6c42-\u54cd\u5e94\u89c4\u5219\u5bf9\u67d0\u4e9bFastCGI\u89d2\u8272\u9650\u5236\u592a\u591a;\u6bd5\u7adf\uff0c\u5728\u5f00\u59cb\u5199stdout\u4e4b\u524d\uff0cCGI\u7a0b\u5e8f\u4e0d\u9650\u5236\u8bfb\u53d6\u6240\u6709stdin\u3002\u56e0\u6b64\u4e00\u4e9b\u89d2\u8272\u534f\u8bae\u5141\u8bb8\u8fd9\u79cd\u7279\u5b9a\u7684\u53ef\u80fd\u6027\u3002\u9996\u5148\uff0c\u5e94\u7528\u7a0b\u5e8f\u63a5\u6536\u9664\u6700\u7ec8\u6d41\u8f93\u5165\u4e4b\u5916\u7684\u6240\u6709\u8f93\u5165\u3002\u5f53\u5e94\u7528\u7a0b\u5e8f\u5f00\u59cb\u63a5\u6536\u6700\u7ec8\u6d41\u8f93\u5165\u65f6\uff0c\u5b83\u53ef\u4ee5\u5f00\u59cb\u5199\u5165\u5176\u8f93\u51fa\u3002<\/p>\n<p>\u5f53\u89d2\u8272\u534f\u8bae\u4f7f\u7528FCGI_PARAMS\u4f20\u8f93\u6587\u672c\u503c\u65f6\uff0c\u4f8b\u5982CGI\u7a0b\u5e8f\u4ece\u73af\u5883\u53d8\u91cf\u4e2d\u83b7\u53d6\u7684\u503c\uff0c\u503c\u7684\u957f\u5ea6\u4e0d\u5305\u62ec\u7ec8\u6b62\u7a7a\u5b57\u8282\uff0c\u4e14\u503c\u672c\u8eab\u4e0d\u5305\u542b\u7a7a\u5b57\u8282\u3002\u9700\u8981\u63d0\u4f9benviron\uff087\uff09\u683c\u5f0f\u952e\u503c\u5bf9\u7684\u5e94\u7528\u7a0b\u5e8f\u5fc5\u987b\u5728\u952e\u548c\u503c\u4e4b\u95f4\u63d2\u5165\u7b49\u53f7\uff0c\u5e76\u5728\u503c\u540e\u9644\u52a0\u7a7a\u5b57\u8282\u3002<\/p>\n<p>\u89d2\u8272\u534f\u8bae\u4e0d\u652f\u6301CGI\u7684\u975e\u89e3\u6790\u5934\u529f\u80fd\u3002FastCGI\u5e94\u7528\u7a0b\u5e8f\u4f7f\u7528 Status \u548cLocation CGI\u5934\u8bbe\u7f6e\u54cd\u5e94\u72b6\u6001\u3002<\/p>\n<h3 id='6.2'>6.2 \u54cd\u5e94\u5668<\/h3>\n<p>\u4e00\u4e2a\u54cd\u5e94\u5668\u89d2\u8272\u7684FastCGI\u5e94\u7528\u7a0b\u5e8f\u4e0eCGI \/ 1.1\u7a0b\u5e8f\u5177\u6709\u76f8\u540c\u7684\u76ee\u7684\uff1a\u5b83\u63a5\u6536\u4e0eHTTP\u8bf7\u6c42\u5173\u8054\u7684\u6240\u6709\u4fe1\u606f\u5e76\u751f\u6210HTTP\u54cd\u5e94\u3002<\/p>\n<p>\u4e0b\u9762\u5c06\u89e3\u91ca\u54cd\u5e94\u5668\u5982\u4f55\u6a21\u62dfCGI\/1.1\u7684\u6bcf\u4e2a\u5143\u7d20\uff1a<\/p>\n<ul>\n<li>\u54cd\u5e94\u5668\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7FCGI_PARAMS\u4eceWeb\u670d\u52a1\u5668\u63a5\u6536CGI\/1.1\u73af\u5883\u53d8\u91cf\u3002<\/li>\n<li>\u63a5\u4e0b\u6765\uff0c\u54cd\u5e94\u5668\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7FCGI_STDIN\u4eceWeb\u670d\u52a1\u5668\u63a5\u6536CGI\/1.1 stdin\u6570\u636e\u3002\u5728\u63a5\u6536\u6d41\u7ed3\u675f\u6307\u793a\u4e4b\u524d\uff0c\u5e94\u7528\u7a0b\u5e8f\u4ece\u8be5\u6d41\u63a5\u6536\u6700\u591aCONTENT_LENGTH\u4e2a\u5b57\u8282\u3002 \uff08\u4ec5\u5f53HTTP\u5ba2\u6237\u7aef\u65e0\u6cd5\u63d0\u4f9b\u5b83\u4eec\u65f6\uff0c\u5e94\u7528\u7a0b\u5e8f\u624d\u4f1a\u6536\u5230\u5c11\u4e8eCONTENT_LENGTH\u4e2a\u5b57\u8282\uff0c\u4f8b\u5982\u56e0\u4e3a\u5ba2\u6237\u7aef\u5d29\u6e83\u4e86\u3002\uff09<\/li>\n<li>\u54cd\u5e94\u5668\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7FCGI_STDOUT\u5c06CGI\/1.1 stdout\u6570\u636e\u53d1\u9001\u5230Web\u670d\u52a1\u5668\uff0c\u901a\u8fc7FCGI_STDERR\u5c06CGI\/1.1 stderr\u6570\u636e\u53d1\u9001\u5230Web\u670d\u52a1\u5668\u3002\u5e94\u7528\u7a0b\u5e8f\u540c\u65f6\u53d1\u9001\u8fd9\u4e9b\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u63a5\u4e00\u4e2a\u5730\u53d1\u9001\u3002\u5e94\u7528\u7a0b\u5e8f\u5fc5\u987b\u5728\u5f00\u59cb\u5199\u5165FCGI_STDOUT\u548cFCGI_STDERR\u4e4b\u524d\uff0c\u5b8c\u6210\u8bfb\u53d6FCGI_PARAMS\u3002\u4f46\u5b83\u65e0\u9700\u5728\u5f00\u59cb\u5199\u5165\u8fd9\u4e24\u4e2a\u6d41\u4e4b\u524d\uff0c\u7ed3\u675f\u8bfb\u53d6FCGI_STDIN\u3002<\/li>\n<li>\u53d1\u9001\u6240\u6709stdout\u548cstderr\u6570\u636e\u540e\uff0c\u54cd\u5e94\u5668\u5e94\u7528\u7a0b\u5e8f\u53d1\u9001FCGI_END_REQUEST\u8bb0\u5f55\u3002\u5e94\u7528\u7a0b\u5e8f\u5c06protocolStatus\u90e8\u5206\u8bbe\u7f6e\u4e3aFCGI_REQUEST_COMPLETE\uff0c\u5c06appStatus\u7ec4\u4ef6\u8bbe\u7f6e\u72b6\u6001\u4ee3\u7801\u540e\uff0cCGI\u7a0b\u5e8f\u901a\u8fc7exit\u7cfb\u7edf\u8c03\u7528\u8fd4\u56de\u3002<\/li>\n<\/ul>\n<p>\u54cd\u5e94\u8005\u6267\u884c\u66f4\u65b0\uff0c\u4f8b\u5982\u5b9e\u73b0POST\u65b9\u6cd5\u65f6\uff0c\u5e94\u5c06FCGI_STDIN\u4e0a\u63a5\u6536\u7684\u5b57\u8282\u6570\u4e0eCONTENT_LENGTH\u8fdb\u884c\u6bd4\u8f83\uff0c\u5982\u679c\u4e24\u4e2a\u6570\u5b57\u4e0d\u76f8\u7b49\u5219\u4e2d\u6b62\u66f4\u65b0\u3002<\/p>\n<h3 id='6.3'>6.3 \u6388\u6743\u5668<\/h3>\n<p>\u6388\u6743\u5668FastCGI\u5e94\u7528\u7a0b\u5e8f\u63a5\u6536\u4e0eHTTP\u8bf7\u6c42\u76f8\u5173\u7684\u6240\u6709\u4fe1\u606f\uff0c\u5e76\u751f\u6210\u6388\u6743\/\u672a\u6388\u6743\u7684\u51b3\u7b56\u3002\u5728\u6388\u6743\u51b3\u7b56\u7684\u60c5\u51b5\u4e0b\uff0c\u6388\u6743\u8005\u8fd8\u53ef\u4ee5\u5c06\u952e\u503c\u5bf9\u4e0eHTTP\u8bf7\u6c42\u76f8\u5173\u8054;\u5728\u505a\u51fa\u672a\u7ecf\u6388\u6743\u7684\u51b3\u5b9a\u65f6\uff0c\u6388\u6743\u5668\u4f1a\u5411HTTP\u5ba2\u6237\u7aef\u53d1\u9001\u5b8c\u6574\u7684\u54cd\u5e94\u3002<\/p>\n<p>\u7531\u4e8eCGI \/ 1.1\u5b9a\u4e49\u4e86\u4e00\u79cd\u8868\u793a\u4e0eHTTP\u8bf7\u6c42\u76f8\u5173\u7684\u4fe1\u606f\u7684\u5b8c\u7f8e\u65b9\u6cd5\uff0c\u56e0\u6b64\u6388\u6743\u5668\u4f7f\u7528\u76f8\u540c\u7684\u8868\u793a\uff1a<\/p>\n<ul>\n<li>\u6388\u6743\u5668\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7FCGI_PARAMS\u6d41\u4eceWeb\u670d\u52a1\u5668\u63a5\u6536HTTP\u8bf7\u6c42\u4fe1\u606f\uff0c\u4e0e\u54cd\u5e94\u5668\u7684\u683c\u5f0f\u76f8\u540c\u3002Web\u670d\u52a1\u5668\u4e0d\u53d1\u9001CONTENT_LENGTH\uff0cPATH_INFO\uff0cPATH_TRANSLATED\u548cSCRIPT_NAME\u5934\u3002<\/li>\n<li>\u6388\u6743\u5668\u5e94\u7528\u7a0b\u5e8f\u4ee5\u4e0eResponder\u76f8\u540c\u7684\u65b9\u5f0f\u53d1\u9001stdout\u548cstderr\u6570\u636e\u3002CGI\/1.1\u54cd\u5e94\u72b6\u6001\u6307\u660e\u4e86\u8bf7\u6c42\u7684 \u5904\u7f6e\u65b9\u5f0f\u3002\u5982\u679c\u5e94\u7528\u7a0b\u5e8f\u53d1\u9001\u72b6\u6001200(OK)\uff0c\u5219Web\u670d\u52a1\u5668\u5141\u8bb8\u8bbf\u95ee\u3002\u6839\u636e\u5176\u914d\u7f6e\uff0cWeb\u670d\u52a1\u5668\u53ef\u4ee5\u7ee7\u7eed\u8fdb\u884c\u5176\u4ed6\u8bbf\u95ee\u68c0\u67e5\uff0c\u5305\u62ec\u5bf9\u5176\u4ed6\u6388\u6743\u5668\u7684\u8bf7\u6c42\u3002<\/li>\n<\/ul>\n<p>\u6388\u6743\u5668\u5e94\u7528\u7a0b\u5e8f\u7684200\u54cd\u5e94\u53ef\u80fd\u5305\u62ec\u540d\u79f0\u4ee5Variable-\u4e3a\u524d\u7f00\u7684\u6807\u5934\u3002\u8fd9\u4e9b\u5934\u5c06\u5e94\u7528\u7a0b\u5e8f\u4e2d\u7684\u952e\u503c\u5bf9\u4f20\u9012\u7ed9Web\u670d\u52a1\u5668\u3002\u4f8b\u5982\uff0c\u54cd\u5e94\u5934\uff1a<\/p>\n<pre><code class=\"line-numbers\">Variable-AUTH_METHOD: database lookup\n<\/code><\/pre>\n<p>\u4f7f\u7528\u540d\u79f0AUTH-METHOD\u4f20\u8f93\u503c\u201cdatabase lookup\u201d\u3002\u670d\u52a1\u5668\u5c06\u8fd9\u4e9b\u952e\u503c\u5bf9\u4e0eHTTP\u8bf7\u6c42\u76f8\u5173\u8054\uff0c\u5e76\u5c06\u5b83\u4eec\u5305\u542b\u5728\u5904\u7406HTTP\u8bf7\u6c42\u65f6\u6267\u884c\u7684\u540e\u7eedCGI\u6216FastCGI\u8bf7\u6c42\u4e2d\u3002\u5f53\u5e94\u7528\u7a0b\u5e8f\u63d0\u4f9b200\u54cd\u5e94\u65f6\uff0c\u670d\u52a1\u5668\u4f1a\u5ffd\u7565\u540d\u79f0\u4e0d\u5e26Variable-\u524d\u7f00\u7684\u54cd\u5e94\u5934\uff0c\u5e76\u5ffd\u7565\u4efb\u4f55\u54cd\u5e94\u5185\u5bb9\u3002<\/p>\n<p>\u5bf9\u4e8e\u9664\u201c200\u201d\uff08OK\uff09\u4ee5\u5916\u7684\u6388\u6743\u5668\u54cd\u5e94\u72b6\u6001\u503c\uff0cWeb\u670d\u52a1\u5668\u62d2\u7edd\u8bbf\u95ee\u5e76\u5c06\u54cd\u5e94\u72b6\u6001\uff0c\u6807\u5934\u548c\u5185\u5bb9\u53d1\u9001\u56deHTTP\u5ba2\u6237\u7aef\u3002<\/p>\n<h3 id='6.4'>6.4 \u8fc7\u6ee4\u5668<\/h3>\n<pre><code>\u8fc7\u6ee4\u5668FastCGI\u5e94\u7528\u7a0b\u5e8f\u63a5\u6536\u4e0eHTTP\u8bf7\u6c42\u76f8\u5173\u7684\u6240\u6709\u4fe1\u606f\uff0c\u4ee5\u53ca\u6765\u81ea\u5b58\u50a8\u5728Web\u670d\u52a1\u5668\u4e0a\u7684\u6587\u4ef6\u7684\u989d\u5916\u6570\u636e\u6d41\uff0c\u5e76\u751f\u6210\u6570\u636e\u6d41\u7684\u201c\u8fc7\u6ee4\u201d\u7248\u672c\u4f5c\u4e3aHTTP\u54cd\u5e94\u3002\n\n\u8fc7\u6ee4\u5668\u7684\u529f\u80fd\u7c7b\u4f3c\u4e8e\u5c06\u6570\u636e\u6587\u4ef6\u4f5c\u4e3a\u53c2\u6570\u7684\u54cd\u5e94\u5668\u7a0b\u5e8f\u3002\u533a\u522b\u5728\u4e8e\u4f7f\u7528\u8fc7\u6ee4\u5668\uff0c\u6570\u636e\u6587\u4ef6\u548c\u8fc7\u6ee4\u5668\u672c\u8eab\u90fd\u53ef\u4ee5\u4f7f\u7528Web\u670d\u52a1\u5668\u7684\u8bbf\u95ee\u63a7\u5236\u673a\u5236\u8fdb\u884c\u8bbf\u95ee\u63a7\u5236\uff0c\u5c06\u6570\u636e\u6587\u4ef6\u540d\u79f0\u4f5c\u4e3a\u53c2\u6570\u7684\u54cd\u5e94\u7a0b\u5e8f\u5fc5\u987b\u5bf9\u6570\u636e\u6587\u4ef6\u6267\u884c\u81ea\u5df1\u7684\u8bbf\u95ee\u63a7\u5236\u68c0\u67e5\u3002\n\n\u8fc7\u6ee4\u5668\u91c7\u53d6\u7684\u6b65\u9aa4\u7c7b\u4f3c\u4e8e\u54cd\u5e94\u8005\u7684\u6b65\u9aa4\u3002\u670d\u52a1\u5668\u9996\u5148\u5411Filter\u63d0\u4f9b\u73af\u5883\u53d8\u91cf\uff0c\u7136\u540e\u662f\u6807\u51c6\u8f93\u5165\uff08\u901a\u5e38\u662fPOST\u6570\u636e\uff09\uff0c\u6700\u540e\u662f\u6570\u636e\u6587\u4ef6\u8f93\u5165\uff1a\n\n- \u4e0e\u54cd\u5e94\u5668\u4e00\u6837\uff0c\u8fc7\u6ee4\u5668\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7FCGI_PARAMS\u4eceWeb\u670d\u52a1\u5668\u63a5\u6536\u952e\u503c\u5bf9\u3002\u8fc7\u6ee4\u5668\u5e94\u7528\u7a0b\u5e8f\u63a5\u6536\u4e24\u4e2a\u4e13\u5c5e\u7684\u53d8\u91cf\uff1aFCGI_DATA_LAST_MOD\u548cFCGI_DATA_LENGTH\u3002\n- \u63a5\u4e0b\u6765\uff0c\u8fc7\u6ee4\u5668\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7FCGI_STDIN\u4eceWeb\u670d\u52a1\u5668\u63a5\u6536CGI\/1.1 stdin\u6570\u636e\u3002\u5728\u63a5\u6536\u6d41\u7ed3\u675f\u6307\u793a\u4e4b\u524d\uff0c\u5e94\u7528\u7a0b\u5e8f\u4ece\u8be5\u6d41\u63a5\u6536\u6700\u591aCONTENT_LENGTH\u4e2a\u5b57\u8282\u3002\uff08\u4ec5\u5f53HTTP\u5ba2\u6237\u7aef\u65e0\u6cd5\u63d0\u4f9b\u5b83\u4eec\u65f6\uff0c\u5e94\u7528\u7a0b\u5e8f\u624d\u4f1a\u6536\u5230\u5c11\u4e8eCONTENT_LENGTH\u4e2a\u5b57\u8282\uff0c\u4f8b\u5982\u56e0\u4e3a\u5ba2\u6237\u7aef\u5d29\u6e83\u4e86\u3002\uff09\n<\/code><\/pre>\n<p>&#8211; \u63a5\u4e0b\u6765\uff0c\u8fc7\u6ee4\u5668\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7FCGI_DATA\u4eceWeb\u670d\u52a1\u5668\u63a5\u6536\u6587\u4ef6\u6570\u636e\u3002\u8be5\u6587\u4ef6\u7684\u6700\u540e\u4fee\u6539\u65f6\u95f4\uff08\u8868\u793a\u4e3a1970\u5e741\u67081\u65e5UTC\u4ee5\u6765\u7684\u6574\u6570\u79d2\uff09\u4e3aFCGI_DATA_LAST_MOD;\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u67e5\u9605\u6b64\u53d8\u91cf\u5e76\u4ece\u7f13\u5b58\u4e2d\u8fdb\u884c\u54cd\u5e94\u800c\u65e0\u9700\u8bfb\u53d6\u6587\u4ef6\u6570\u636e\u3002\u5728\u63a5\u6536\u6d41\u7ed3\u675f\u6307\u793a\u4e4b\u524d\uff0c\u5e94\u7528\u7a0b\u5e8f\u4ece\u8be5\u6d41\u4e2d\u8bfb\u53d6\u6700\u591aFCGI_DATA_LENGTH\u4e2a\u5b57\u8282\u3002<br \/>\n &#8211; \u54cd\u5e94\u5668\u5e94\u7528\u7a0b\u5e8f\u901a\u8fc7FCGI_STDOUT\u5c06CGI\/1.1 stdout\u6570\u636e\u53d1\u9001\u5230Web\u670d\u52a1\u5668\uff0c\u901a\u8fc7FCGI_STDERR\u5c06CGI\/1.1 stderr\u6570\u636e\u53d1\u9001\u5230Web\u670d\u52a1\u5668\u3002\u5e94\u7528\u7a0b\u5e8f\u540c\u65f6\u53d1\u9001\u8fd9\u4e9b\uff0c\u800c\u4e0d\u662f\u4e00\u4e2a\u63a5\u4e00\u4e2a\u5730\u53d1\u9001\u3002\u5e94\u7528\u7a0b\u5e8f\u5fc5\u987b\u5728\u5f00\u59cb\u5199\u5165FCGI_STDOUT\u548cFCGI_STDERR\u4e4b\u524d\uff0c\u5b8c\u6210\u8bfb\u53d6FCGI_PARAMS\u3002\u4f46\u5b83\u65e0\u9700\u5728\u5f00\u59cb\u5199\u5165\u8fd9\u4e24\u4e2a\u6d41\u4e4b\u524d\uff0c\u7ed3\u675f\u8bfb\u53d6FCGI_DATA\u3002<br \/>\n &#8211; \u53d1\u9001\u6240\u6709stdout\u548cstderr\u6570\u636e\u540e\uff0c\u54cd\u5e94\u5668\u5e94\u7528\u7a0b\u5e8f\u53d1\u9001FCGI_END_REQUEST\u8bb0\u5f55\u3002\u5e94\u7528\u7a0b\u5e8f\u5c06protocolStatus\u90e8\u5206\u8bbe\u7f6e\u4e3aFCGI_REQUEST_COMPLETE\uff0c\u5c06appStatus\u7ec4\u4ef6\u8bbe\u7f6e\u72b6\u6001\u4ee3\u7801\u540e\uff0cCGI\u7a0b\u5e8f\u901a\u8fc7exit\u7cfb\u7edf\u8c03\u7528\u8fd4\u56de\u3002<\/p>\n<p>\u8fc7\u6ee4\u5668\u5e94\u5c06FCGI_STDIN\u4e0a\u63a5\u6536\u7684\u5b57\u8282\u6570\u4e0eCONTENT_LENGTH\u548cFCGI_DATA\u4e0a\u7684FCGI_DATA_LENGTH\u8fdb\u884c\u6bd4\u8f83\u3002\u5982\u679c\u6570\u5b57\u4e0d\u5339\u914d\u4e14\u8fc7\u6ee4\u5668\u662f\u4e00\u6b21\u67e5\u8be2\uff0c\u8fc7\u6ee4\u5668\u54cd\u5e94\u5e94\u63d0\u4f9b\u6570\u636e\u4e22\u5931\u7684\u6307\u793a\u3002\u5982\u679c\u6570\u5b57\u4e0d\u5339\u914d\u4e14\u8fc7\u6ee4\u5668\u662f\u4e00\u6b21\u66f4\u65b0\uff0c\u5219\u8fc7\u6ee4\u5668\u5e94\u4e2d\u6b62\u66f4\u65b0\u3002<\/p>\n<h2 id='7'>7.\u9519\u8bef<\/h2>\n<p>FastCGI\u5e94\u7528\u7a0b\u5e8f\u4ee5\u96f6\u72b6\u6001\u9000\u51fa\uff0c\u8868\u793a\u5b83\u662f\u6545\u610f\u7ec8\u6b62\u7684\uff0c\u4f8b\u5982\u4e3a\u4e86\u6267\u884c\u539f\u59cb\u5f62\u5f0f\u7684\u5783\u573e\u6536\u96c6\u3002FastCGI\u5e94\u7528\u7a0b\u5e8f\u4ee5\u975e\u96f6\u72b6\u6001\u9000\u51fa\uff0c\u8868\u793a\u5b83\u5d29\u6e83\u4e86\u3002Web\u670d\u52a1\u5668\u6216\u5176\u4ed6\u5e94\u7528\u7a0b\u5e8f\u7ba1\u7406\u5668\u5982\u4f55\u54cd\u5e94\u4ee5\u96f6\u6216\u975e\u96f6\u72b6\u6001\u9000\u51fa\u7684\u5e94\u7528\u7a0b\u5e8f\u8d85\u51fa\u4e86\u672c\u89c4\u8303\u7684\u8303\u56f4\u3002<\/p>\n<p>Web\u670d\u52a1\u5668\u53ef\u4ee5\u901a\u8fc7\u53d1\u9001SIGTERM\u6765\u8bf7\u6c42FastCGI\u5e94\u7528\u7a0b\u5e8f\u9000\u51fa\u3002\u5982\u679c\u5e94\u7528\u7a0b\u5e8f\u5ffd\u7565SIGTERM\uff0c\u5219Web\u670d\u52a1\u5668\u53ef\u4ee5\u4f7f\u7528SIGKILL\u3002<\/p>\n<p>astCGI\u5e94\u7528\u7a0b\u5e8f\u4f7f\u7528FCGI_STDERR\u6d41\u548cFCGI_END_REQUEST\u8bb0\u5f55\u7684appStatus\u90e8\u5206\u62a5\u544a\u5e94\u7528\u7a0b\u5e8f\u7ea7\u9519\u8bef\u3002\u5728\u8bb8\u591a\u60c5\u51b5\u4e0b\uff0c\u5c06\u901a\u8fc7FCGI_STDOUT\u6d41\u76f4\u63a5\u5411\u7528\u6237\u62a5\u544a\u9519\u8bef\u3002<\/p>\n<p>Unix\u4e0a\uff0c\u5e94\u7528\u7a0b\u5e8f\u5411syslog\u62a5\u544a\u8f83\u4f4e\u7ea7\u522b\u7684\u9519\u8bef\uff0c\u5305\u62ecFastCGI\u534f\u8bae\u9519\u8bef\u548cFastCGI\u73af\u5883\u53d8\u91cf\u4e2d\u7684\u8bed\u6cd5\u9519\u8bef\u3002\u6839\u636e\u9519\u8bef\u7684\u4e25\u91cd\u7a0b\u5ea6\uff0c\u5e94\u7528\u7a0b\u5e8f\u53ef\u4ee5\u7ee7\u7eed\u6216\u4ee5\u975e\u96f6\u72b6\u6001\u9000\u51fa\u3002<\/p>\n<h2 id='8'>8.\u7c7b\u578b\u548c\u5e38\u91cf<\/h2>\n<pre><code class=\"line-numbers\">\/*\n * Listening socket file number\n *\/\n#define FCGI_LISTENSOCK_FILENO 0\n\ntypedef struct {\n    unsigned char version;\n    unsigned char type;\n    unsigned char requestIdB1;\n    unsigned char requestIdB0;\n    unsigned char contentLengthB1;\n    unsigned char contentLengthB0;\n    unsigned char paddingLength;\n    unsigned char reserved;\n} FCGI_Header;\n\n\/*\n * Number of bytes in a FCGI_Header.  Future versions of the protocol\n * will not reduce this number.\n *\/\n#define FCGI_HEADER_LEN  8\n\n\/*\n * Value for version component of FCGI_Header\n *\/\n#define FCGI_VERSION_1           1\n\n\/*\n * Values for type component of FCGI_Header\n *\/\n#define FCGI_BEGIN_REQUEST       1\n#define FCGI_ABORT_REQUEST       2\n#define FCGI_END_REQUEST         3\n#define FCGI_PARAMS              4\n#define FCGI_STDIN               5\n#define FCGI_STDOUT              6\n#define FCGI_STDERR              7\n#define FCGI_DATA                8\n#define FCGI_GET_VALUES          9\n#define FCGI_GET_VALUES_RESULT  10\n#define FCGI_UNKNOWN_TYPE       11\n#define FCGI_MAXTYPE (FCGI_UNKNOWN_TYPE)\n\n\/*\n * Value for requestId component of FCGI_Header\n *\/\n#define FCGI_NULL_REQUEST_ID     0\n\ntypedef struct {\n    unsigned char roleB1;\n    unsigned char roleB0;\n    unsigned char flags;\n    unsigned char reserved[5];\n} FCGI_BeginRequestBody;\n\ntypedef struct {\n    FCGI_Header header;\n    FCGI_BeginRequestBody body;\n} FCGI_BeginRequestRecord;\n\n\/*\n * Mask for flags component of FCGI_BeginRequestBody\n *\/\n#define FCGI_KEEP_CONN  1\n\n\/*\n * Values for role component of FCGI_BeginRequestBody\n *\/\n#define FCGI_RESPONDER  1\n#define FCGI_AUTHORIZER 2\n#define FCGI_FILTER     3\n\ntypedef struct {\n    unsigned char appStatusB3;\n    unsigned char appStatusB2;\n    unsigned char appStatusB1;\n    unsigned char appStatusB0;\n    unsigned char protocolStatus;\n    unsigned char reserved[3];\n} FCGI_EndRequestBody;\n\ntypedef struct {\n    FCGI_Header header;\n    FCGI_EndRequestBody body;\n} FCGI_EndRequestRecord;\n\n\/*\n * Values for protocolStatus component of FCGI_EndRequestBody\n *\/\n#define FCGI_REQUEST_COMPLETE 0\n#define FCGI_CANT_MPX_CONN    1\n#define FCGI_OVERLOADED       2\n#define FCGI_UNKNOWN_ROLE     3\n\n\/*\n * Variable names for FCGI_GET_VALUES \/ FCGI_GET_VALUES_RESULT records\n *\/\n#define FCGI_MAX_CONNS  \"FCGI_MAX_CONNS\"\n#define FCGI_MAX_REQS   \"FCGI_MAX_REQS\"\n#define FCGI_MPXS_CONNS \"FCGI_MPXS_CONNS\"\n\ntypedef struct {\n    unsigned char type;    \n    unsigned char reserved[7];\n} FCGI_UnknownTypeBody;\n\ntypedef struct {\n    FCGI_Header header;\n    FCGI_UnknownTypeBody body;\n} FCGI_UnknownTypeRecord;\n<\/code><\/pre>\n<h2 id='9'>9.\u53c2\u8003\u6587\u732e<\/h2>\n<p><a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/www.w3.org\/CGI\/\">The WWW Common Gateway Interface at W3C<\/a><\/p>\n<h2 id='A'>A.\u8868\uff1a\u8bb0\u5f55\u7c7b\u578b\u7684\u5c5e\u6027<\/h2>\n<p>\u4e0b\u8868\u5217\u51fa\u4e86\u6240\u6709\u8bb0\u5f55\u7c7b\u578b\uff0c\u5e76\u6307\u51fa\u4e86\u6bcf\u79cd\u8bb0\u5f55\u7684\u5c5e\u6027\uff1a<\/p>\n<ul>\n<li>WS->App: \u6b64\u7c7b\u8bb0\u5f55\u53ea\u80fd\u7531Web\u670d\u52a1\u5668\u53d1\u9001\u5230\u5e94\u7528\u7a0b\u5e8f\u3002\u5176\u4ed6\u7c7b\u578b\u7684\u8bb0\u5f55\u53ea\u80fd\u7531\u5e94\u7528\u7a0b\u5e8f\u53d1\u9001\u5230Web\u670d\u52a1\u5668\u3002<\/li>\n<li>management: \u6b64\u7c7b\u578b\u7684\u8bb0\u5f55\u5305\u542b\u4e0d\u662f\u7279\u5b9a\u4e8eWeb\u670d\u52a1\u5668\u8bf7\u6c42\u7684\u4fe1\u606f\uff0c\u5e76\u4f7f\u7528\u7684\u7684\u8bf7\u6c42ID\u3002\u5176\u4ed6\u7c7b\u578b\u7684\u8bb0\u5f55\u5305\u542b\u7279\u5b9a\u4e8e\u8bf7\u6c42\u7684\u4fe1\u606f\uff0c\u4e0d\u80fd\u4f7f\u7528\u7a7a\u7684\u8bf7\u6c42ID\u3002<\/li>\n<li>stream: \u6b64\u7c7b\u578b\u7684\u8bb0\u5f55\u5f62\u6210\u4e00\u4e2a\u6d41\uff0c\u7531\u5177\u6709\u7a7acontentData\u7684\u8bb0\u5f55\u7ec8\u6b62\u3002\u5176\u4ed6\u7c7b\u578b\u7684\u8bb0\u5f55\u662f\u79bb\u6563\u7684;\u6bcf\u4e2a\u90fd\u5e26\u6709\u4e00\u4e2a\u6709\u610f\u4e49\u7684\u6570\u636e\u5355\u5143\u3002<\/li>\n<\/ul>\n<pre><code class=\"line-numbers\">                               WS-&gt;App   management  stream\n\n        FCGI_GET_VALUES           x          x\n        FCGI_GET_VALUES_RESULT               x\n        FCGI_UNKNOWN_TYPE                    x\n\n        FCGI_BEGIN_REQUEST        x\n        FCGI_ABORT_REQUEST        x\n        FCGI_END_REQUEST\n        FCGI_PARAMS               x                    x\n        FCGI_STDIN                x                    x\n        FCGI_DATA                 x                    x\n        FCGI_STDOUT                                    x \n        FCGI_STDERR                                    x     \n<\/code><\/pre>\n<h2 id='B'>B. \u5178\u578b\u7684\u534f\u8bae\u6d88\u606f\u6d41<\/h2>\n<p>\u793a\u4f8b\u7684\u5176\u4ed6\u7b26\u53f7\u7ea6\u5b9a\uff1a<\/p>\n<ul>\n<li>\u6d41\u8bb0\u5f55\u7684contentData\uff08FCGI_PARAMS\uff0cFCGI_STDIN\uff0cFCGI_STDOUT\u548cFCGI_STDERR\uff09\u8868\u793a\u4e3a\u5b57\u7b26\u4e32\u3002\u4ee5\u201c&#8230;\u201d\u7ed3\u5c3e\u7684\u5b57\u7b26\u4e32\u592a\u957f\u800c\u65e0\u6cd5\u663e\u793a\uff0c\u56e0\u6b64\u4ec5\u663e\u793a\u524d\u7f00\u3002<\/li>\n<li>\u53d1\u9001\u5230Web\u670d\u52a1\u5668\u7684\u6d88\u606f\u76f8\u5bf9\u4e8e\u4eceWeb\u670d\u52a1\u5668\u63a5\u6536\u7684\u6d88\u606f\u7f29\u8fdb\u3002<\/li>\n<li>\u6d88\u606f\u6309\u5e94\u7528\u7a0b\u5e8f\u6240\u7ecf\u5386\u7684\u65f6\u95f4\u987a\u5e8f\u663e\u793a\u3002<\/li>\n<\/ul>\n<ol>\n<li>\u4e00\u4e2a\u6ca1\u6709stdin\u6570\u636e\u7684\u7b80\u5355\u8bf7\u6c42\uff0c\u4ee5\u53ca\u4e00\u4e2a\u6210\u529f\u7684\u54cd\u5e94\uff1a<\/li>\n<\/ol>\n<p>(<strong>\u6ce8:<\/strong>\\013\\016\u8fd9\u91cc\u662f8\u8fdb\u5236\u7f16\u7801\u3002\u8fd9\u91cc\u6240\u6709\u7684\u8bb0\u5f55\u90fd\u7701\u7565\u4e86Version\u548cPaddingData,\u56e0\u6b64\u7c7b\u4f3c\u4e8eFCGI_BEGIN_REQUEST\u4ee3\u8868Type\uff0c1\u4ee3\u8868RequestId)<\/p>\n<pre><code class=\"line-numbers\">{FCGI_BEGIN_REQUEST,   1, {FCGI_RESPONDER, 0}}\n{FCGI_PARAMS,          1, \"\\013\\002SERVER_PORT80\\013\\016SERVER_ADDR199.170.183.42 ... \"}\n{FCGI_PARAMS,          1, \"\"}\n{FCGI_STDIN,           1, \"\"}\n\n    {FCGI_STDOUT,      1, \"Content-type: text\/html\\r\\n\\r\\n&lt;html&gt;\\n&lt;head&gt; ... \"}\n    {FCGI_STDOUT,      1, \"\"}\n    {FCGI_END_REQUEST, 1, {0, FCGI_REQUEST_COMPLETE}}\n<\/code><\/pre>\n<p>2.\u4e0e\u793a\u4f8b1\u7c7b\u4f3c\uff0c\u4f46\u8fd9\u6b21\u4f7f\u7528stdin\u4e0a\u7684\u6570\u636e\u3002 Web\u670d\u52a1\u5668\u9009\u62e9\u4f7f\u7528\u6bd4\u4ee5\u524d\u66f4\u591a\u7684FCGI_PARAMS\u8bb0\u5f55\u53d1\u9001\u53c2\u6570\uff1a<\/p>\n<pre><code class=\"line-numbers\">{FCGI_BEGIN_REQUEST,   1, {FCGI_RESPONDER, 0}}\n{FCGI_PARAMS,          1, \"\\013\\002SERVER_PORT80\\013\\016SER\"}\n{FCGI_PARAMS,          1, \"VER_ADDR199.170.183.42 ... \"}\n{FCGI_PARAMS,          1, \"\"}\n{FCGI_STDIN,           1, \"quantity=100&amp;item=3047936\"}\n{FCGI_STDIN,           1, \"\"}\n\n    {FCGI_STDOUT,      1, \"Content-type: text\/html\\r\\n\\r\\n&lt;html&gt;\\n&lt;head&gt; ... \"}\n    {FCGI_STDOUT,      1, \"\"}\n    {FCGI_END_REQUEST, 1, {0, FCGI_REQUEST_COMPLETE}}\n<\/code><\/pre>\n<p>3.\u4e0e\u793a\u4f8b1\u7c7b\u4f3c\uff0c\u4f46\u8fd9\u6b21\u5e94\u7528\u7a0b\u5e8f\u68c0\u6d4b\u5230\u9519\u8bef\u3002\u5e94\u7528\u7a0b\u5e8f\u5c06\u6d88\u606f\u8bb0\u5f55\u5230stderr\uff0c\u5c06\u9875\u9762\u8fd4\u56de\u7ed9\u5ba2\u6237\u7aef\uff0c\u5e76\u5c06\u975e\u96f6\u9000\u51fa\u72b6\u6001\u8fd4\u56de\u7ed9Web\u670d\u52a1\u5668\u3002\u5e94\u7528\u7a0b\u5e8f\u9009\u62e9\u4f7f\u7528\u66f4\u591aFCGI_STDOUT\u8bb0\u5f55\u53d1\u9001\u9875\u9762\uff1a<\/p>\n<pre><code class=\"line-numbers\">{FCGI_BEGIN_REQUEST,   1, {FCGI_RESPONDER, 0}}\n{FCGI_PARAMS,          1, \"\\013\\002SERVER_PORT80\\013\\016SERVER_ADDR199.170.183.42 ... \"}\n{FCGI_PARAMS,          1, \"\"}\n{FCGI_STDIN,           1, \"\"}\n\n    {FCGI_STDOUT,      1, \"Content-type: text\/html\\r\\n\\r\\n&lt;ht\"}\n    {FCGI_STDERR,      1, \"config error: missing SI_UID\\n\"}\n    {FCGI_STDOUT,      1, \"ml&gt;\\n&lt;head&gt; ... \"}\n    {FCGI_STDOUT,      1, \"\"}\n    {FCGI_STDERR,      1, \"\"}\n    {FCGI_END_REQUEST, 1, {938, FCGI_REQUEST_COMPLETE}}\n<\/code><\/pre>\n<p>4.\u793a\u4f8b1\u7684\u4e24\u4e2a\u5b9e\u4f8b\uff0c\u590d\u7528\u5230\u5355\u4e2a\u8fde\u63a5\u4e0a\u3002\u7b2c\u4e00\u4e2a\u8bf7\u6c42\u6bd4\u7b2c\u4e8c\u4e2a\u8bf7\u6c42\u66f4\u96be\uff0c\u56e0\u6b64\u5e94\u7528\u7a0b\u5e8f\u4e0d\u6309\u987a\u5e8f\u5b8c\u6210\u8bf7\u6c42\uff1a<\/p>\n<pre><code class=\"line-numbers\">{FCGI_BEGIN_REQUEST,   1, {FCGI_RESPONDER, FCGI_KEEP_CONN}}\n{FCGI_PARAMS,          1, \"\\013\\002SERVER_PORT80\\013\\016SERVER_ADDR199.170.183.42 ... \"}\n{FCGI_PARAMS,          1, \"\"}\n{FCGI_BEGIN_REQUEST,   2, {FCGI_RESPONDER, FCGI_KEEP_CONN}}\n{FCGI_PARAMS,          2, \"\\013\\002SERVER_PORT80\\013\\016SERVER_ADDR199.170.183.42 ... \"}\n{FCGI_STDIN,           1, \"\"}\n\n    {FCGI_STDOUT,      1, \"Content-type: text\/html\\r\\n\\r\\n\"}\n\n{FCGI_PARAMS,          2, \"\"}\n{FCGI_STDIN,           2, \"\"}\n\n    {FCGI_STDOUT,      2, \"Content-type: text\/html\\r\\n\\r\\n&lt;html&gt;\\n&lt;head&gt; ... \"}\n    {FCGI_STDOUT,      2, \"\"}\n    {FCGI_END_REQUEST, 2, {0, FCGI_REQUEST_COMPLETE}}\n    {FCGI_STDOUT,      1, \"&lt;html&gt;\\n&lt;head&gt; ... \"}\n    {FCGI_STDOUT,      1, \"\"}\n    {FCGI_END_REQUEST, 1, {0, FCGI_REQUEST_COMPLETE}}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u539f\u6587\u5730\u5740\uff1ahttps:\/\/fastcgi-archives.github.io\/FastCGI_Specifi &hellip; <a href=\"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">FastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[61],"tags":[],"class_list":["post-334","post","type-post","status-publish","format-standard","hentry","category-fastcgi_protocal"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>FastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1 - \u4e00\u53ea\u5b89\u9759\u7684\u732b<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"FastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1 - \u4e00\u53ea\u5b89\u9759\u7684\u732b\" \/>\n<meta property=\"og:description\" content=\"\u539f\u6587\u5730\u5740\uff1ahttps:\/\/fastcgi-archives.github.io\/FastCGI_Specifi &hellip; \u7ee7\u7eed\u9605\u8bfbFastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/\" \/>\n<meta property=\"og:site_name\" content=\"\u4e00\u53ea\u5b89\u9759\u7684\u732b\" \/>\n<meta property=\"article:published_time\" content=\"2018-07-19T14:29:46+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-05T13:49:34+00:00\" \/>\n<meta name=\"author\" content=\"jiangpengfei\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"jiangpengfei\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/\"},\"author\":{\"name\":\"jiangpengfei\",\"@id\":\"https:\/\/www.myway5.com\/#\/schema\/person\/b19267e8b106343431e163ec96950685\"},\"headline\":\"FastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1\",\"datePublished\":\"2018-07-19T14:29:46+00:00\",\"dateModified\":\"2023-07-05T13:49:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/\"},\"wordCount\":677,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\/\/www.myway5.com\/#\/schema\/person\/b19267e8b106343431e163ec96950685\"},\"articleSection\":[\"FastCGI\u534f\u8bae\"],\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/\",\"url\":\"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/\",\"name\":\"FastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1 - \u4e00\u53ea\u5b89\u9759\u7684\u732b\",\"isPartOf\":{\"@id\":\"https:\/\/www.myway5.com\/#website\"},\"datePublished\":\"2018-07-19T14:29:46+00:00\",\"dateModified\":\"2023-07-05T13:49:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.myway5.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"FastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.myway5.com\/#website\",\"url\":\"https:\/\/www.myway5.com\/\",\"name\":\"\u4e00\u53ea\u5b89\u9759\u7684\u732b\",\"description\":\"\u60f3\u5565\u5462\",\"publisher\":{\"@id\":\"https:\/\/www.myway5.com\/#\/schema\/person\/b19267e8b106343431e163ec96950685\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.myway5.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"zh-Hans\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.myway5.com\/#\/schema\/person\/b19267e8b106343431e163ec96950685\",\"name\":\"jiangpengfei\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.myway5.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f8c7de757f6e0247412bcfd31b7c2271?s=96&d=monsterid&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f8c7de757f6e0247412bcfd31b7c2271?s=96&d=monsterid&r=g\",\"caption\":\"jiangpengfei\"},\"logo\":{\"@id\":\"https:\/\/www.myway5.com\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/www.myway5.com\/index.php\/author\/joyme\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"FastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1 - \u4e00\u53ea\u5b89\u9759\u7684\u732b","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/","og_locale":"zh_CN","og_type":"article","og_title":"FastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1 - \u4e00\u53ea\u5b89\u9759\u7684\u732b","og_description":"\u539f\u6587\u5730\u5740\uff1ahttps:\/\/fastcgi-archives.github.io\/FastCGI_Specifi &hellip; \u7ee7\u7eed\u9605\u8bfbFastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1","og_url":"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/","og_site_name":"\u4e00\u53ea\u5b89\u9759\u7684\u732b","article_published_time":"2018-07-19T14:29:46+00:00","article_modified_time":"2023-07-05T13:49:34+00:00","author":"jiangpengfei","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"jiangpengfei","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"7 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/#article","isPartOf":{"@id":"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/"},"author":{"name":"jiangpengfei","@id":"https:\/\/www.myway5.com\/#\/schema\/person\/b19267e8b106343431e163ec96950685"},"headline":"FastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1","datePublished":"2018-07-19T14:29:46+00:00","dateModified":"2023-07-05T13:49:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/"},"wordCount":677,"commentCount":4,"publisher":{"@id":"https:\/\/www.myway5.com\/#\/schema\/person\/b19267e8b106343431e163ec96950685"},"articleSection":["FastCGI\u534f\u8bae"],"inLanguage":"zh-Hans","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/","url":"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/","name":"FastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1 - \u4e00\u53ea\u5b89\u9759\u7684\u732b","isPartOf":{"@id":"https:\/\/www.myway5.com\/#website"},"datePublished":"2018-07-19T14:29:46+00:00","dateModified":"2023-07-05T13:49:34+00:00","breadcrumb":{"@id":"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.myway5.com\/index.php\/2018\/07\/19\/fastcgi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.myway5.com\/"},{"@type":"ListItem","position":2,"name":"FastCGI \u89c4\u8303\u4e2d\u6587\u7ffb\u8bd1"}]},{"@type":"WebSite","@id":"https:\/\/www.myway5.com\/#website","url":"https:\/\/www.myway5.com\/","name":"\u4e00\u53ea\u5b89\u9759\u7684\u732b","description":"\u60f3\u5565\u5462","publisher":{"@id":"https:\/\/www.myway5.com\/#\/schema\/person\/b19267e8b106343431e163ec96950685"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.myway5.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"zh-Hans"},{"@type":["Person","Organization"],"@id":"https:\/\/www.myway5.com\/#\/schema\/person\/b19267e8b106343431e163ec96950685","name":"jiangpengfei","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.myway5.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/f8c7de757f6e0247412bcfd31b7c2271?s=96&d=monsterid&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f8c7de757f6e0247412bcfd31b7c2271?s=96&d=monsterid&r=g","caption":"jiangpengfei"},"logo":{"@id":"https:\/\/www.myway5.com\/#\/schema\/person\/image\/"},"url":"https:\/\/www.myway5.com\/index.php\/author\/joyme\/"}]}},"views":15269,"_links":{"self":[{"href":"https:\/\/www.myway5.com\/index.php\/wp-json\/wp\/v2\/posts\/334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.myway5.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.myway5.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.myway5.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.myway5.com\/index.php\/wp-json\/wp\/v2\/comments?post=334"}],"version-history":[{"count":11,"href":"https:\/\/www.myway5.com\/index.php\/wp-json\/wp\/v2\/posts\/334\/revisions"}],"predecessor-version":[{"id":1589,"href":"https:\/\/www.myway5.com\/index.php\/wp-json\/wp\/v2\/posts\/334\/revisions\/1589"}],"wp:attachment":[{"href":"https:\/\/www.myway5.com\/index.php\/wp-json\/wp\/v2\/media?parent=334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.myway5.com\/index.php\/wp-json\/wp\/v2\/categories?post=334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.myway5.com\/index.php\/wp-json\/wp\/v2\/tags?post=334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}