# HTTP-server **Repository Path**: godeni/http-server ## Basic Information - **Project Name**: HTTP-server - **Description**: 此项目是基于 Linux 的 C++的轻量级多线程 Web 服务器,应用层实现了一个轻量级 HTTP 服务器。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-08-02 - **Last Updated**: 2024-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HTTP-server #### 介绍 HTTP是超文本传输协议(HyperText Transfer Protocol)的简称,它建立在C/S架构的应用层协议,熟悉这部分内容的朋友应该清楚,TCP/IP协议是协议层的内容,它定义了计算机间通信的基础协议,我们熟悉的HTTP、FTP、Telnet等协议都是建立在TCP/IP协议基础上的。在HTTP协议中,客户端负责发起一个Request,该Request中含有请求方法、URL、协议版本等信息,服务端在接受到该Request后会返回一个Response,该Response中含有状态码、响应内容等信息,这一模型称为请求/响应模型。   HTTP协议通信的核心是HTTP报文,根据报文发送者的不同,我们将其分为请求报文和响应报文。其中,由客户端发出的HTTP报文称为请求报文,由服务端发出的报文称为响应报文。下面我们来着重了解和认识这两种不同的报文: **请求报文:**请求报文通常由浏览器来发起,当我们访问一个网页或者请求一个资源的时候都会产生请求报文。请求报文通常由HTTP请求行、请求头、消息体(可选)三部分组成,服务端在接收到请求报文后根据请求报文请求返回数据给客户端,所以我们通常讲的服务端开发实际上是指在服务端接收到信息以后处理的这个阶段。下面是一个基本的请求报文示例: ```c++ /* HTTP请求行 */ GET / HTTP/1.1 /* 请求头部 */ Accept: text/html, application/xhtml+xml, image/jxr, Accept-Encoding: gzip, deflate Accept-Language: zh-Hans-CN, zh-Hans; q=0.5 Connection: Keep-Alive Host: localhost:4000 User-Agent: Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko /* 消息体 */ ``` **响应报文:**响应报文是指在服务端接收并处理了客户端的请求信息以后,服务端发送给客户端的HTTP报文,服务端开发的重要工作就是处理来自客户端的请求,所以这是我们开发一个HTTP服务器的核心工作。和请求报文类似,响应报文由HTTP状态行、响应头、消息体(可选)三部分组成。例如我们通常熟悉的200和404分别表示连接正常和无法访问资源这两种响应状态。下面是一个基本的响应报文示例: ```c++ /* HTTP状态行 */ HTTP/1.1 200 OK /* 响应头部 */ Content-Type: text/html;charset=utf-8 Connection: keep-alive Server: Microsoft-IIS/7.0 Date: Sun, 12 Jun 2016 11:00:42 GMT X-Powered-By: Hexo /* 消息体 */ ``` ### 运行前需要做的事情: ```mysql #1,测试前请确认已经安装MYSQL数据库 #2.创建一个database CREATE DATABASE Webserver; #3.进入Webserver库 USE Webserver; #4.创建user表 CREATE TABLE user( username char(50) NOT NULL, passwd char(50) NOt NULL, primary key(username) )ENGINE=InnoDB; #添加数据的格式 INSERT INTO user(username, passwd) VALUE('name', 'passwd'); #5.修改main.cpp中的数据库初始信息,根据自己设定的修改 string user = "root"; string passwd = "QWEqwe123."; string databasename = "Webserver"; ``` #### 致谢 Linux高性能服务器编程,游双著. https://github.com/qinguoyi/TinyWebServer