我在fcgi和C中编写了一个服务器,我需要在向request.out打印一些String后添加一些custome参数。 要清楚这是我的示例代码:
while (1)
{
rc = FCGX_Accept_r(&request);
if (rc < 0)
break;
FCGX_FPrintF(request.out,
"Content-type: text/html\r\n"
"\r\n");
//the html page content
FCGX_FPrintF(request.out,
"<form method=\"post\" action=\"\">"
"<input type=\"text\" name=\"num\">"
"<input type=\"submit\" value=\"click\" name=\"submit\">"
"</form>"
);
.
.
.
//and somewhere like here I need to add a cookie parameter
FCGX_FPrintF(request.out,
"set-cookie:myParam=myValue\r\n"
"\r\n");
.
.
.
.
FCGX_Finish_r(&request);
}
但这最终会直接打印到页面。如何将它放在缓冲区的开头?
答案 0 :(得分:1)
HTTP协议具有以下请求和响应模式:
<header 1>\r\n
<header 2>\r\n
...
<header n>\r\n
\r\n
<body>
因此,您需要发送的任何标头必须在分隔响应的标题和正文部分的空行之前发送。
在您的情况下,您需要在set-cookie
之前或之后立即编写Content-Type
标头,否则浏览器会将其解释为响应正文的一部分。另外,我建议遵循套管惯例:
FCGX_FPrintF(request.out,
"Content-type: text/html\r\n"
"Set-Cookie: myParam=myValue\r\n"
"\r\n");