网络编程07

学习目标:
1.介绍项目的总体功能
2.介绍html语法:写html文档
3.介绍http协议—请求协议和响应协议
4.get和post的区别
5.介绍开发web服务器的整体流程
6.根据开发流程编写初级版本的web服务器

1.案例整体功能介绍

先打开浏览器,然后输入http://192…168.10.143:9999/hanzi.c
通过案例展示联想到的知识点:
1。开发网络服务器
多路IO复用技术:epoll , select ,poll
多进程或者多线程技术,线程池
第三方库:libevent库
2.熟悉http协议:(B/S模式)
请求协议
应答协议
3.使用的协议有htp协议+TCP协议
TCP协议:建立链接,三次握手,链接建立完成后进行数据传输,对于web服务器,解析发送过来的请求数据,解析时知道请求什么资源。得到想要得到请求的文件,还不哦这文件名;若文件存在,则发送文件内容给浏览器。如果不存在,则发送一个错误的浏览页。
若文件存在
判断文件类型:若是普通文件,则发送文件内容给浏览器;
若是目录文件,则发送文件列表
若文件不存在,则发送一个错误页给浏览器;

2.介绍html语法:写html文档

html标签

<html>
<head>
<title>
<body>
<font color="" size=></font>
<hr/>
<br/>
<img src="" alt= title=>
<a href="" title="" target="_blank"></a>

示例代码:

<!doctype html>
<html>
	<head>
		<title>(81条消息,我的CSDN博客)</title>
		<meta http-equiv="content-Type" content="text/html;charset=utf8">
	</head>
	
	<body>
		<font color="green" size=5>hello world</font>
		<h1> hello world </h1>
		<h2> hello world </h2>
		<h3> hello world </h3>
		<h4> hello world </h4>
		<h5> hello world </h5>
		<h6> hello world </h6>
		<font color="blue">你好</font>
		<br/>
		<hr/>
		<ul type=quare>
			<li>语文</li>
			<li>数学</li>
		</ul>
		<br/>
		<img src="./111.jpg" alt="张伟伟" title="爱学习" width="300" heigth="400" ></img>
		<a href="http://www.163.com" title="go to wangyi" target=_blank>go to www.163.com</a>
	</body>

</html>

效果:
在这里插入图片描述

3.http超文本传输协议

3.1 http消息请求

一个演示:网页输入对应的ip和端口号,电脑使用模拟调试工具(Socket Tool作为服务器端)
在这里插入图片描述
http协议和html前面的ht都是超文本的意思,所以http与html是配合非常紧密的一对,我们可以认为http就是为了传输html这样的文件,http位于应用层,侧重于解释.

  • 请求消息分为四部分内容(请求消息的格式)
    在这里插入图片描述
    自己尝试的示例:
    在这里插入图片描述
  1. 请求行 说明请求类型,要访问的资源,以及使用的http版本
  2. 请求头 说明服务器使用的附加信息,都是键值对,比如表明浏览器类型
  3. 空行 不能省略-而且是\r\n,包括请求行和请求头都是以\r\n结尾
  4. 请求数据 表明请求的特定数据内容,可以省略-如登陆时,会将用户名和密码内容作为请求数据

3.2.get和post的区别

http协议有很多种请求类型,对我们来说常见的用的最多的是get和post请求。常见的请求类型如下:
1. Get 请求指定的页面信息,并返回实体主体
2. Post 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

3. Head 类似于get请求,但是响应消息没有内容,只是获得报头
4. Put 从客户端向浏览器传送的数据取代指定的文档内容
5. Delete 请求服务器删除指定的页面
6. Connect HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
7. Options 允许客户端查看浏览器的性能
8. Trace 回显服务器收到的请求,主要用于测试和诊断
get 和 post 请求都是请求资源,而且都会提交数据,如果提交密码信息用get请求,就会明文显示,而post则不会显示出涉密信息.

3.3 http中常见的状态响应码

http状态码由三位数字组成,第一个数字代表响应的类别,有五种分类:

  1. 1xx 指示信息–表示请求已接收,继续处理
  2. 2xx 成功–表示请求已被成功接收、理解、接受
  3. 3xx 重定向–要完成请求必须进行更进一步的操作
  4. 4xx 客户端错误–请求有语法错误或请求无法实现
  5. 5xx 服务器端错误–服务器未能实现合法的请求

常见的状态码如下:

200 OK 客户端请求成功
301 Moved Permanently 重定向
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found 请求资源不存在,eg:输入了错误的URL
500 Internal Server Error 服务器发生不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

3.4 http消息响应

响应消息是代表服务器收到请求消息后,给浏览器做的反馈,所以响应消息是服务器发送给浏览器的,响应消息也分为四部分:
1.响应头:HTTP、1.1 200 OK
2. 响应行:键值对,用来说明客户端要使用的一些附加信息
3. 空行:\r\n
4. 响应正文:服务器返回给客户端的文本信息

  • 示例
    在这里插入图片描述
    其中,如上图==(必选项中)==的常见的文件分类:

http与浏览器交互时,为使浏览器能够识别文件信息,所以需要传递文件类型,这也是响应消息必填项,常见的类型如下:
普通文件: text/plain; charset=utf-8
*.html: text/html; charset=utf-8
*.jpg: image/jpeg
*.gif: image/gif
*.png: image/png
*.wav: audio/wav
*.mp3: audio/mpeg
*.avi: video/x-msvideo
*.mov: video/quicktime

4.web服务器总体的功能–工作流程

浏览器访问web服务器的工作流程(通信流程)
在这里插入图片描述

5.web服务器的开发流程

1.创建socket,得到监听文件描述符 lfd----socket
2.设置端口复用-----setsocket()
3.绑定---bind()
4.设置监听------listen()
5 创建epoll树,得到树根文件描述符epfd---epoll_create()
6 将监听文件描述符lfd上树----epoll_ctl(epfd,EPOLL_CTL_ADD...)
7.while(1)
{
	//等待事件的发生
	nready = epoll_wait();
	if(nready<0)
	{
		if(erro==EINTR) //被信号打断
		{
			continue}
		break;//异常
	}
	//有事件发生,循环处理每一个文件描述符
	for(i=0;i<nready;i++)
	{
		sockfd = event[i].data.fd;
		//有客户端连接请求到来
		if(sockfd==lfd)
		{
			//接受新的客户端连接请求
			cfd=accept();
			//将新的文件描述符上树
			epoll_ctl(epfd,EPOLL_CTL_ADD...);
			continue;
		}
		//有数据发来的情况
		else
		{
			//接受数据并处理,自己写函数
			http_request();
			
		}
	}
}
int http_request(int cfd)
{
	//读取请求行
	Readline();
	
	//分析请求行,得到要请求的资源文件名file   有点问题。scanf ->需要的信息。
	//循环读完剩余的内核缓冲区的数据
	while((n=Readline()>0));
	//判断文件是否存在
	stat();

	1.文件不存在
		返回错误页(404 not found)
	2.文件存在
		判断文件类型:
			2.1 普通文件
				组织应答信息:http响应格式消息+消息正文
			2.2 目录文件
				组织应答消息:http响应格式消息+html格式文件内容
}

6.web服务器的开发代码

sscanf截取字符串的用法
正则表达式

待补充。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值