alin的学习之路(Linux网络编程:九)(HTML,http协议)

alin的学习之路(Linux网络编程:九)(HTML,http协议)

1. HTML简述

1. 基本 html 网页结构

<!doctype html>
<html>
    <head>
        <title> 网页标题678 </title>	
    </head>
    <body>
        <!-- 这是一行注释 -->
        网页身体1
        网页身体2
        网页身体3
    </body>    
</html>    

2. 常用标签

标题

  • 共 1 ~ 6 级。 数越小, 字越大。
<h1> 这是几级标题 </h1>
<h2> 这是几级标题 </h2>
<h3> 这是几级标题 </h3>
<h4> 这是几级标题 </h4>
<h5> 这是5级标题 </h5>
<h6> 这是6级标题 </h6>

文本标签

<font> 文本内容 </font>
	属性:
		color:
			1. 单词
			2. 16进制数
			3. rgb
		size:
			1 ~ 7 级。 数越大,字体越大。

<!-- 示例 --> 
<font color="red" size=1>这也是文本1</font>
<font color="#FFAA00" size=5>这也是文本2</font>
<font color="rgb(98,38,218)" size=7>这也是文本3</font>
<font color="pink" size=10>这也是文本4</font>

其他标签

<strong> 加粗显示文本 </strong>
<center> 居中显示文本 </center>
<em> 倾斜显示文本 </em>
<del> 显示文本带有删除线 </del>
<ins> 显示文本带有下划线 </ins>
<p>
    段落文本内容。 ———— 在文件的前后,各自添加一个空行。
</p>
<div align=“right”>
    容器,内部可以存放文本。
    可添加属性 align = center、left、right
</div>
<br><br/></br>  ----- 换行。
<hr><hr/> ---- 分割线
	color:
	size:没有上限。

列表

// 无序列表
<ul type=square/cricle/disc> 
    <li>选项1</li>
    <li>选项2</li>
    <li>选项3</li>
    <li>选项4</li>
</ul>

// 有序列表
<ol type=I start=8> 
    <li>选项1</li>
    <li>选项2</li>
    <li>选项3</li>
    <li>选项4</li>
</ol> 
type:
	1/a/A/i/I
start:
	起始。

添加图片

<img src="lf.jpg" alt="图片加载失败" title="海贼王吧" width=200 height=300/>
src: 图片的来源 必写属性
alt: 替换文本 图片不显示的时候显示的文字
title: 提示文本 鼠标放到图片上显示的文字
width: 图片宽度
height: 图片高度	

跳转

<a href="http://www.jd.com" title="去京东" target=_blank> 跳转至京东首页 </a>
href: 去往的路径(跳转的页面)必写属性
title: 提示文本, 鼠标放到链接上显示的文字
target取值:
_self:   默认值 在自身页面打开(关闭自身页面,打开链接页面)
_blank: 打开新页面 (自身页面不关闭,打开一个新的链接页面)

// 嵌套, 实现 点击图片跳转。
<a href="http://www.taobao.com" target=_blank> <img src="lf.jpg" alt="图片加载失败" title="去淘宝吧" width=200 height=300/> </a>	

锚点

<p id="xxxx"> 放在起始位置
    
<div align=center>
    <a href=#xxxx> 跳转至xxxx的位置 </a>
</div>  

2. http 协议

http 是短连接 ,即发送完数据就断开连接,再发送时再连接。与tcp区分

1. http请求协议格式

在这里插入图片描述

  1. 请求行:请求方法(GET) “空格” 请求的数据名称 “空格” 协议版本 \r\n (例如:GET /hello.c HTTP/1.1)
    • 请求方法:GET(查看)、POST(添加)、PUT(修改)、DELETE(删除)
  2. 请求头:语法格式:key:value
  3. 空行:必须有这个空行,且换行为\r\n。 作用是:请求头结束,请求包包体开始。
  4. 请求包包体:对于GET 方法而言,请求包包体为空。对于POST 方法,请求包包体为携带给服务器的数据。
举个栗子:
GET /hello.c HTTP/1.1 \r\n
Host:127.0.0.1:8000 \r\n
……
……
\r\n

2. http应答协议格式

在这里插入图片描述

  1. 应答行(状态行):协议版本 “空格” 状态码 “空格” 状态描述 \r\n (例如:HTTP/1.1 200 ok)
    • 状态码:200 OK ,404 Not Found
  2. 应答头:语法格式:key:value
    • Content-Type:回发的数据类型 \r\n
    • Content-Length:回发的数据实际实际长度。或者-1。\r\n (该数据可以不填,如果要填数据的话,必须要填准确的大小)
  3. 空行:\r\n。作用:标志应答头结束,应答包包体开始。
  4. 应答包包体:客户端(浏览器)请求内容的数据
HTTP/1.1 200 OK \r\n
Content-Type:text/plain; charset=iso-8859-1 \r\n
……
……
\r\n
[数据起始。。。
。。。
。。。数据结束]

3. B/S 模型服务器接收单个文件请求

使用epoll模型监听lfd的连接客户端和cfd的通信,使用 do_read() 函数处理cfd的读事件逻辑。

1. do_read() 函数主要流程

  1. 读一行数据,读到请求行,存放到buf中。getline()
  2. 将剩余的其他数据读完,否则其他数据会影响下一次的读数据。
  3. 解析读到的一行数据buf,解析出请求方法请求数据名称协议版本名
  4. 判断请求方法和请求数据名称是否在server提供的目录中存在,在本案例只判断请求数据名称,使用 stat() 函数,判断文件是否存在。
  5. 不存在:借助http应答协议,回发404 Not Found 错误html页面给客户端(浏览器)。
  6. 存在:打开只读文件,读取文件内容,借助http应答协议,回写给客户端(浏览器)。
  7. 注意目录的中文要有特殊的处理。

注意:在浏览器中访问服务器的根目录相当于,服务器开启时指定的目录。所以在程序开始要切换工作目录到指定的目录。

猜你喜欢

转载自blog.csdn.net/qq_41775886/article/details/107923483