在看这篇文章之前你需要对http协议有一定的了解和掌握,在这里我默认用户已经对http协议有了一定的知识储备。
模拟实现的http服务器的特点:
1>、支持C/S模式,C-->client,S-->server,即客户端/服务器模式。
2>、简单灵活:客户想服务器请求服务的时候,需要传递请求方法和路径,每种方法都规定了客户与服务器联系的类型。由于http服务器的规模小,所以通信速度快,简单,又因为该服务器是可以传输任意类型的数据的,所以较灵活。
3>、无连接:无连接并不是不建立连接,而是只体现在应用层罢了。假如此时client发起连接请求,服务器处理完client的连接请求后就立即断开与浏览器的连接请求,这种短连接的方式的优点就是:管理起来比较方便,而且因为处理请求之后就会断开连接,所以存在的请求都是有效的连接,不需要额外的控制手段。
4>、无状态:所谓的无状态是指协议对于事物处理没有记忆功能,也就是说打开一个服务器的网页和你上一次打开这个网页是没有关系的。
一、基础知识篇
1、URL-->URL又叫统一资源定位符,在一个URL中包含了用于查找某个资源的完整信息;
http://host[":"port][abs_path]
1>、http:它告诉浏览器如何处理将要打开的文件,最常用的就是http(超文本传输协议),也可以使用其他协议:
http——超文本传输协议资源
https——用安全套接字层传送的超文本传输协议
ftp——文件传输协议
mailto——电子邮件地址
ldap——轻型目录访问协议搜索
file——当地电脑或网上分享的文件
news——Usenet新闻组
gopher——Gopher协议
telnet——Telnet协议
2>、host:表示合法的主机域名和IP地址,可以使用DNS(域名解析服务)进行域名与IP之间的转换;
3>、port:表示端口号,为空时表示使用的是http协议的80号端口;
4>、abs_path:表示请求资源的绝对路径,为空则浏览器会自动添加'/'表示是web根目录;
栗子:假如请求的是baidu的首页只需要输入:
https://www.baidu.com
经过浏览器处理之后会自动添加web根目录,添加'/'
https://www.baidu.com/
如果请求的URL带参数呢???
https://www.baidu.com:80/a/b?x=10&y=20
了解了URL的定义和组成之后,http是如何请求和响应的呢???
2、http请求
http的请求方法有很多,在我的代码实现中只处理了GET和POST方法;
1).GET 请求获取Request-URl所标识的资源。
2).POST 在Request-URl所标识的资源后附加新的数据。
3).HEAD 请求获取由Request-URl所标识的资源的响应消息报头
4).PUT 请求获取由Request-URl所标识的资源的响应消息报头
5).DELETE 请求服务器删除Request-URl作为其标识
6).TRACE 请求服务器或回送收到的请求信息,用于测试或诊断。
7).CONNECT 保留将来使用
8).OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
GET和POST方法的区别:
3.http响应
http的响应的常见的状态码:
1>、200 OK //客户端请求成功
2>、403 Forbidden //服务器收到请求,但是拒绝提供服务
3>、404 Not Found //请求资源不存在,也就是输入了错误的URL
4>、500 Internal Server Error //服务器发生不可预期的错误
5>、503 Server Unavailable //服务器当前不能处理客户端的请求
二、http服务器的逻辑框架
1、http服务器的实现逻辑框架图
2、cgi的方式处理浏览器请求
三、功能实现
1、编写一个cgi程序,从浏览器中提交两个数据,通过cgi_math运算后返回新的请求页面给浏览器,get和post都可实现;
2、从网页中获取数据对Mysql进行增删查改操作
在Linux中我定义的数据库的名字是test,数据表的名字是student_info,该数据表中的原始数据是:
当再次运行该程序之后,查看student_info这个数据表此时就会发现该数据已经被插入成功了。
select * from student_info; //查看数据表,此时就会发现该数据表中多了一条记录信息。