生成http响应并将响应报文发送给浏览器

在接收到客户端的请求报文后,服务器首先判断请求资源的可用性及用户权限,接着生成包含状态行和头部信息的响应报文,并使用mmap映射文件到内存。接着,将响应内容组织到iovec结构体数组中,最后通过socket将整个报文发送回浏览器。
摘要由CSDN通过智能技术生成

在解析完客户端的请求报文之后,接下来就是根据解析的结果生成响应报文并发送一个应答。

一、找到请求的资源文件

根据解析请求报文得到的url 判断请求的资源文件是否存在并且用户是否具有可读的权限。
若文件存在且可读,则调用mmap()将资源文件映射到内存中,m_file_address保存文件在内存中的地址。

二、生成响应报文的状态行和头部信息

生成响应报文的状态行和头部信息 可以通过具有一个可变参数的函数来完成。

bool add_response(const char* format,...)
{
   
	if(m_write_idx >=WRITE_BUFFER_SIZE )
		return false;
	va_list arg_list;//可变形参指针
	va_start(arglist,format);//arglist 指向第一个可变形参列表
	
	//将可变形参以format的格式写入m_write_buf
	int len = vsnprintf(m_write_buf+m_write_idx,WRITE_BUFFER-1-m_write_idx,format,arglist);
	if(len >=WRITE_BUFFER_SIZE -1-m_wirte_idx)
	{
   
		va_end(arglist);
		return false;
	}

	m_write_idx +=len;
	//清空可变形参列表
	va_end(arglist);
	return true;
}

然后在添加状态行、头部的函数内部调用add_response()
添加状态行的函数

void add_status_line(int status,const char* title)
{
   
	return add_reponse("%s %d %s\r\n","HTTP/1.1",status,title);
}

类似的还有添加头部、添加内容等函数。

void add_headers(int length
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值