web服务器实现过程

本文介绍了Web服务器的工作原理,从建立TCP连接到处理HTTP请求。浏览器通过URL发起请求,服务器通过socket()、bind()、listen()、accept()等系统调用来建立连接并监听。HTTP协议中,服务器解析请求头,根据GET方法返回文件或目录信息。发送文件时,包括数据头和数据体。对于目录请求,服务器返回HTML形式的目录结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浏览器通过URL向服务器端发送请求,服务器端分析请求,向客户端浏览器做出回应。

服务器和客户端数据的发送和接收基于HTTP协议,而两边的连接是基于TCP协议。

    先说一下建立连接的过程:服务器端调用socket(),bind(),listen()系统调用后,准备过程完成。再次调用accept()阻塞等待

连接请求的到来。当accept()返回的时候,三次握手完成,连接成功建立。

    socket():调用了socket()函数后,系统会为进程提供一个文件描述符,用来服务器和客户端是中间的数据通信。之后进程

就可以调用write()和read()函数来完成数据的处理。

    bind():使服务器和本地地址以及端口号进行绑定,便于监听请求服务器的连接。调用之前,要将本机ip地址和端口号转化

                为网络字节序。INADDR_ANY表示本机中的所有ip地址。

    listen():使服务器处于监听的状态,将到来的连接请求放入队列。可以指定到来连接的最大值,多余的将会被丢弃掉。

    accept():当该函数成功返回后,连接建立。若此时没有连接的到来,就会阻塞等待连接的到来。

之后再讲一下http协议。

1    浏览器通过URL发送请求。服务器端需要对请求头进行解析。这里只解析了请求头的第一行:GET  /postAuth.html  HTTP/1.1

    其中get:从指定的资源获取数据。/postAuth.html:根目录下的.html文件。http/1.1:http协议版本。总的来说就是客户端想要获取

    根目录下的某个文件。


浏览器每次请求(点击文件,输入url回车)都是一次新的连接请求(因为这里的客户端和服务器进程都将再发送数据后关闭当前连接)

2.发送文件:服务器知道浏览器请求的文件后。要向客户端发送两部分数据:数据头和数据体。数据头主要告知浏览器,服务器的响应状态和文件的类型。数据体就是要发送的数据本身。通过请求头中的.html或者.XX来获得文件类型。通过open()打开文件,mmap()将文件映射到虚拟地址空间,write()先发送数据头再发送数据体。

3.发送目录:主要实现的功能:用户点击目录文件后,服务器要将该目录下的所有文件相关信息返回给浏览器。此时发送给浏览器的数据头中的类型为:“text/html”,即浏览器会以html的形式去解析数据体。通过opendir()打开目录流,readdir()读取每一个目录。这里会用到一个html标签用来返回超链接的功能:<a bref=%s%s> 这里的两个字符串都是要返回的文件名称。而不用自己在把ip地址写入到这里。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值