Http协议即超文本传送协议 (HTTP-Hypertext transfer protocol) 。
它定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度看,HTTP是面向(transaction-oriented)应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。并且详细的规定了客户端浏览器与服务器之间互相通信的规则。
二、抓包
下面是一口君抓取的访问自己搭建的web服务器交互的所有数据包。 以下是浏览器显示信息:
以下是实际 index.html内容
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>一口Linux</title>
</head>
<body >
<div align="center">
<table width="900" border="0">
<tr><td>
<form onsubmit="return isValidate(myform)" action="cgi-bin/login.cgi" method="post">
用户名: <input type="text" name="username" id="username" >
<td> </td>
<tr><td>
密 码: <input type="password" name="userpass" id="userpass">
<td> </td>
<tr><td>
<input type="submit" value="登录" id="button" >
</form>
</td></tr>
</table>
</div>
<div align="center">
<table width="900" height="467" border="0" background="./image/yikou.png">
<tr>
<td width="126" height="948"> </td>
<td width="351"></td>
<td width="101"> </td>
</tr>
</div>
</body>
</html>
下面是用抓包工具抓取的所有HTTP数据包:
浏览器发送的GET请求数据包:
服务器回复的页面对应的数据包:
完整的浏览访问服务器数据包交互流程如下:
数据包交互流程,简单总如下:
下面我们来看一下,从网页输入URL到加载,http究竟做了哪些工作?
浏览器负责发起请求和最后的响应请求,服务器接收请求后,处理请求。
1、输入URL。
不管是链接还是地址栏的输入,情况都是一样的。http协议已经规定了URL的格式,通过http协议中的域名或IP找到服务器。
2、找到服务器的同时,会有http的请求发送过来,告诉服务器我求你做什么?http协议规定了发送请求的格式,这个格式有三部分组成请求行、请求头、请求体。
请求行包括请求的方式(get、post或其他)、要求响应的文件、http版本。 请求头包括本机信息、浏览器信息等等,当然,也包括URL中?后面的参数。
请求体包括POST传递数据的相关信息,Get方式传值时,请求体为空。
3、请求信息发送至服务器以后,服务器会获取传递过来的相关信息进行后端程序的处理。 服务器可以通过数据包中信息获取URL传递过来的值,通过form(表单)获取POST传递过来的值,当然,也是可以获取到所有的其他请求过来的信息,如浏览器信息、cookie信息、操作系统信息等。获取相关的数据以后,服务器就会根据程序进行处理。
4、处理完成以后,服务器会做出响应,向浏览器输出相关信息。http对响应的格式也做出了规定,响应的信息主要包括,响应码、响应头、响应体。
响应码用来标识服务器响应的结果,如我们常看到的200、404等。大致的分类如下:
1开头的表示消息,
2开头表示成功,
3开头表示重定向,
4开头表示失败,
5开头表示服务器异常。
响应头记录服务器相关信息如服务器是否启用压缩、服务器为IIS或Ngnix、程序所用服务端语言等等。当然,缓存也是在这里设置的,通过修改响应头可以修改html在本地缓存的情况,如设置浏览器缓存过期的时间。
响应体主要是我看到的html的相关内容了。
完成以上4步操作以后,浏览器就断开了与服务器的数据连接,不能在进行数据传输,如果需要再次进行数据传输,那么一切就要从输入URL开始。
如此,便是一个完整的网页流程,http从中的作用就是对整个流程进行规定,包括执行步骤,每一步的数据格式。只有了解http协议以及网页是如何产生的以后,才能对网页进行更好的控制,例如控制浏览器缓存、通过非浏览器发送http请求、get和post传值的选择,甚至是建立长连接,这些都是以http协议为基础。
1.0 版本和 1.1 版本的描述分别基于 RFC1945 和 RFC2616 除了上图中的内容之外, HTTP 消息中还有一些用来表示附加信息的 头字段。 客户端向 Web 服务器发送数据时, 会先发送头字段, 然后再发送 数据。
收到请求消息之后, Web 服务器会对其中的内容进行解析, 通过 URI和方法来判断“对什么”“进行怎样的操作”, 并根据这些要求来完成自己的工作, 然后将结果存放在响应消息中。 在响应消息的开头有一个状态码,它用来表示操作的执行结果是成功还是发生了错误。
当我们访问 Web 服务器时, 遇到找不到的文件就会显示出 404 Not Found 的错误信息, 其实这就是状态码。 状态码后面就是头字段和网页数据。 响应消息会被发送回客户端, 客户端收到之后, 浏览器会从消息中读出所需的数据并显示在屏幕上。 到这里, HTTP 的整个工作就完成了。
HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型。
响应分为五类:信息响应(100–199),成功响应(200–299),重定向(300–399),客户端错误(400–499)和服务器错误 (500–599):
HTTP状态码列表:
1、表格分析:**表格由 5 行 ,6 列 构成,且第一行第一列为 空。
2、绘制思路:
(1)先画出第一行第一列,且空着它。
(2)再加一列,写上周一。
(3)再复制几个 td 标签,将周二至周五也绘制出来,此时 “列” 就绘制完了。
(4)绘制行:在下面再复制一行 tr 和 td ,并且添加上文字,此时第 2 行的 第1列也就出来了。此时第一行的第一列的单元格就自动展开了,不用特殊调试。
(5)如法炮制,再复制两行 tr 和 td ,将第二节和第三节也添加上。
(6)在第 2 行中复制一对 td 标签添加 html ,这样,再复制 td 添加 css ,以此表格就绘制出来了。
成品图标注:↓
本文主要记录常用的html标签使用说明,用起来的时候偶尔查查。
标签 | 英文全拼 | 作用 | 特点 |
?<html></html>?? | html | 网页的根标签 | 所有的标签都要写在这一对根标签里面 |
??<head></head>?? | head | 网页的头标签 | 包括完档的属性和信息 |
??<body></body>?? | body | 网页的主题 | 包含文档的所有内容 |
??<div></div>?? | division | 定义一个区域 | 浏览器通常会在??<div>??前后放置一个换行符 |
??<!-- 注释 -->?? | - | 注释 | 单标签 |
??<br>或<br/>?? | break | 换行 | 单标签,不会在其前后创建空白行 |
??<hr>或<hr/>?? | horizontal rule | 添加水平线 | 单标签 |
??<img src="">?? | image | 添加图片 | 单标签 |
??<embed src="">?? | embed | 嵌入外部应用 | 单标签 |
??<meta>?? | meta | 提供有关页面的元信息 | 单标签,??<meta>???标签通常位于??<head>??区域内 |
??<link>?? | link | 定义文档与外部资源的关系 | 单标签,??<link>???标签只能存在于??<head>??区域内,不过它可出现任何次数。 |
??<p></p>?? | paragraph | 定义段落 | 自动在其前后创建空白行 |
??<h1> to <h6>?? | Header 1 to Header 6 | 定义标题 | h1在一个页面里只能出现一次 |
??<strong></strong>?? | strong | 文本加粗 | 加粗标记该文本 |
??<b></b>?? | bold | 文本加粗 | 加粗显示文本,不推荐使用 |
??<em></em>?? | emphasize | 文本倾斜 | 倾斜标记文本 |
??<i></i>?? | italic | 文本倾斜 | 倾斜显示文本,不推荐使用 |
??<del></del>?? | delete | 文本添加删除线 | - |
??<s></s>?? | strike | 文本添加删除线 | 不推荐使用 |
??<ins></ins>?? | insert | 文本添加下划线 | - |
??<u></u>?? | underline | 文本添加下划线 | 不推荐使用 |
??<a href="">填写内容</a>?? | anchor | 添加超链接 | 最好使用CSS来改变链接的样式 |
??<ul></ul>?? | unordered list | 定义无序列表 | 通常与??<li>??标签一起使用 |
??<ol></ol>?? | ordered list | 定义有序列表 | 通常与??<li>??标签一起使用 |
??<li></li>?? | list item | 创建列表项 | 可与各种列表定义标签一起使用 |
??<dl></dl>?? | definition list | 定义描述列表 | 通常与??<dt>???和??<dd>??一起使用 |
??<dt></dt>?? | definition term | 定义条目 | 定义描述列表的项目 |
??<dd></dd>?? | definition description | 定义描述 | 对描述列表中的项目进行描述 |
??<table></table>?? | table | 定义HTML表格 | 尽可能通过样式改变表格外观 |
??<tr></tr>?? | table row | 定义表格的行 | 一个??<tr>???标签包含一个或多个??<th>???或??<td>??标签 |
??<th></th>?? | table headline | 定义表格每一列的标题 | 该标签的文本通常呈现为粗体且居中 |
??<td></td>?? | table data | 定义表格中的单元格数据 | 该标签的文本呈现为普通且左对齐 |
??<caption>表格标题</caption>?? | caption | 定义整个表格的标题 | ??<caption>???标签必须直接放在??<table>??标签后 |
??<input type="">?? | input | 定义输入控件 | 输入字段可通过多种方式改变,取决于type属性 |
??select?? | select | 定义下拉列表 | ??<select>???中的??<option>??标签定义了列表中的可用选项 |
??<option></option>?? | option | 定义下拉列表中的可用项 | ??<option>??标签不可自由定义宽高 |
??<optgroup></optgroup>?? | options group | 定义选项组 | ??<optgroup>??标签用于把相关的选项组合在一起 |
??<textarea></textarea>?? | textarea | 定义多行的文本输入控件 | 文本的默认字体是等宽字体 |
??<form></form>?? | form | 定义表单 | ??<form>??可以包含多个元素 |
??<fieldset></fieldset>?? | field set | 定义围绕表单中元素的边框 | ??<legend>???为??<fieldset>??定义标题 |
??<legend></legend>?? | legend | 为??<fieldset>??定义标题 | ??<legend>??通过css设定样式 |
??<progress></progress>?? | progress | 定义运行中的任务进度 | ??<progress>???是HTML5中的新标签,??<progress>??标签不适合用来表示度量衡 |
??<meter></meter>?? | meter | 度量衡 | ??<meter>???是HTML5的新标签,??<meter>??标签不适合用来表示进度条 |
??<audio></audio>?? | audio | 添加音频 | ??<audio>??标签是HTML5的新标签 |
??<video></video>?? | video | 添加视频 | ??<video>??标签是HTML5的新标签 |
??<source>?? | source | 定义媒介资源 | ??<source>??标签是HTML5中的新标签 |
普通用法
锚点链接
锚点链接通过点击超链接,自动跳转到我们设置锚点的位置,类似于word的目录导航。建立锚点的元素必须要有id或name属性,最好两个都有。这里只跳转本页面元素,其他页面跳转自行搜索。
具体做法如下:
示例如下。为了显示效果,通过使用lorem自动生成随机文本(具体使用方法搜索,一般直接输入就行),lorem*50表示重复lorem15次。
<a href="#id2">a</a>
<p id="id1">
(lorem*15)
</p>
(lorem*15)
<p id="id2">
(lorem*15)
</p>
超链接全局设置
在页面head中写入代码可以设置超链接的全局跳转设置
<head>
<!-- 让页面所有的超链接新页面打开 -->
<base target="_blank">
</head>
charset编码
name
网页自动跳转
无序列表
无序列表使用粗体圆点进行标记。简单示例如下。
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
...
</ul>
有序列表
有序列表使用数字进行标记,我们可以通过整数值start指定列表编号的起始值。简单示例如下。
<ol start="2">
<li>a</li>
<li>b</li>
<li>c</li>
...
</ol>
描述列表
通过描述列表自定义列表,列表项内部可以使用段落、换行符、图片、链接以及其他列表等等。简单示例如下。
<dl>
<dt>A</dt> <!-- 小标题 -->
<dd>A1</dd> <!-- 解释标题 -->
<dd>A2</dd> <!-- 解释标题 -->
<dt>B</dt> <!-- 小标题 -->
<dd>B1</dd> <!-- 解释标题 -->
<dd>B2</dd> <!-- 解释标题 -->
</dl>
基础表格
简单示例如下。
<table width="300px" height="100px" border="2" cellspacing="5px" cellpadding="0">
<caption>表格标题</caption> <!-- 定义表格标题 -->
<tr>
<!-- 定义表格的行 -->
<td>A1</td> <!-- 定义表格该行第一列中的数据 -->
<td>B1</td>
<td>C1</td>
</tr>
<tr>
<!-- 定义表格的行 -->
<th>A</th> <!-- 定义表格每一列的标题 -->
<th>B</th>
<th>C</th>
</tr>
<tr>
<td>A2</td>
<td>B2</td>
<td>C2</td>
</tr>
</table>
单元格合并
简单示例如下。
<table border="2" cellspacing="1px" width="400px" height="100px">
<caption><strong>表格标题</strong></caption> <!-- 定义表格标题 -->
<tr height="100">
<!-- 定义表格的行 -->
<td colspan="2">A1</td> <!-- 定义该行可以横跨两列 -->
<td>B1</td>
</tr>
<tr height="100">
<td>A2</td>
<td>B2</td>
<td rowspan="2">C</td> <!-- 定义该行可以横跨两行 -->
</tr>
<tr height="100">
<td>A3</td>
<td>B3</td>
</tr>
</table>
对于??<input>??不同的type属性值,输入字段拥有很多种形式。输入字段可以是文本字段、复选框、掩码后的文本控件、单选按钮、按钮等等。
文本输入框
简单示例如下。
<input type="text" name="username" maxlength="6" readonly="readonly" disabled="disabled" value="用户名">
密码输入框
简单示例如下。
<input type="password" name="pwd" maxlength="6" readonly="readonly" disabled="disabled" value="密码">
单选框
示例一,两个单选框都可以被选中
<div>
<input type="radio" name="man" checked="checked">男
</div>
<div>
<input type="radio" name="woman">女
</div>
示例二,两个单选框只能有一个被选中
<div>
<input type="radio" name="gender" checked="checked">男
</div>
<div>
<input type="radio" name="gender">女
</div>
下拉列表
??<select>??
??<optgroup>??
??<option>??
示例一,单选下拉列表
<select>
<option value="a">a</option>
<option value="b">b</option>
<option value="c" selected='selected'>c</option> <!-- 默认选中 -->
</select>
示例二,带组合的单选下拉列表
<select>
<optgroup label="A">
<option value="a1">a1</option>
<option value="a2" selected='selected'>a2</option>
</optgroup>
<optgroup label="B">
<option value="b1">b1</option>
<option value="b2">b2</option>
</optgroup>
</select>
示例三,带组合的多选下拉列表
<select multiple=”multiple”>
<optgroup label="A">
<option value="a1">a1</option>
<option value="a2" selected='selected'>a2</option>
</optgroup>
<optgroup label="B">
<option value="b1" selected='selected'>b1</option>
<option value="b2">b2</option>
</optgroup>
</select>
多选框
简单示例如下。
<input type="checkbox" checked="checked">A
<input type="checkbox">B
文本框
简单示例如下。
<textarea cols="5" rows="2" placeholder="text"></textarea>
文本上传控件
简单示例如下。
<input type="file" accept="image/gif, image/jpeg"/>
其他类型按钮
<input type="submit">文件提交按钮
<input type="button" value="">普通按钮
<input type="image" src="">图片按钮
<input type="reset">重置按钮
<input type="url">网址控件
<input type="date">日期控件
<input type="time">时间控件
<!--email提供了邮箱的完整验证,必须包含@和后缀,如果不满足验证,会阻止表单提交-->
<input type="email">邮件控件
<input type="number" step="3">数字控件
<input type="range" step="100">滑块控件
<input type="color">颜色控件
表单
示例一,普通表单
<form>
First name: <input type="text" name="fname"><br>
Last name: <input type="text" name="lname"><br>
<input type="submit" value="提交">
</form>
示例二,带分组信息表单
<form>
<fieldset>
<legend>Personalia:</legend>
First name: <input type="text" name="fname"><br>
Last name: <input type="text" name="lname"><br>
<input type="submit" value="提交">
</fieldset>
First nameA: <input type="text" name="fname"><br>
Last nameB: <input type="text" name="lname"><br>
</form>
??<progress>???与??<meter>??主要区别和用法见??HTML5 progress和meter控件??
??<progress>??
简单示例如下。
<progress value="60" max="100"></progress>
??<meter>??
简单示例如下
<meter min="0" low="40" high="90" max="100" value="91"></meter>
<meter min="0" low="40" high="90" max="100" value="90"></meter>
??<audio>??
简单示例如下
<audio src="demo.mp3" controls autoplay></audio>
??<video>??
简单示例如下
<video src="demo.mp4" controls autoplay height="500px" poster="0.jpg"></video>
??<source>??
简单示例如下
<video controls>
<source src="demo.mp3" type="audio/mp3">
<source src="demo.mp4" type="video/mp4">
您的浏览器不支持video元素。
</video>
??HTML特殊字符编码对照表??
*请认真填写需求信息,我们会在24小时内与您取得联系。