【网站架构部署与优化】web服务与http协议
文章目录
- HTML
- HTML 概述
- HTML 语法规则
- HTML 文件结构
- 头标签中常用标签
- 静态网页与动态网页
- 1. 静态网页
- 2. 动态网页
- 3. 动态网页语言
- HTTP协议
- 概述
- 主要的HTTP版本包括:
- HTTP方法
- GET与POST方法的比较
- HTTP状态码分类及常见状态码
- HTTP常见状态码
- HTTP 请求流程分析
- 1. 请求报文
- 2. 响应报文
- 流程总结
HTML
HTML 概述
HTML(HyperText Markup Language)是一种用于创建网页和网页应用程序的标准标记语言。它不是一种编程语言,而是一种标记语言,通过不同的标签(tags)来告诉浏览器如何显示内容。
HTML 语法规则
- 标签:HTML标签使用尖括号
<
和>
包围,如<p>
。大多数标签成对出现,即有一个开始标签和一个结束标签(结束标签前会加上斜杠/
),但也有自闭合标签(如<img />
、<br />
等)。 - 属性:标签可以包含属性,属性提供了有关HTML元素的额外信息。属性总是以名称/值对的形式出现,如
<a href="https://www.example.com">链接</a>
。
HTML 文件结构
一个基本的HTML文件结构包括<html>
、<head>
和<body>
三个主要部分:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>页面标题</title>
<!-- 其他head标签,如<link>、<meta>、<script>、<style>等 -->
</head>
<body>
<!-- 网页的可见内容 -->
<p>这是一个段落。</p>
<!-- 其他body标签</body>
</html>
也就是:
<html>
<head>网页的内容描述信息</head>
<body>网页显示的内容</body>
</html>
头标签中常用标签
<title>
:定义了文档的标题,显示在浏览器的标题栏或页面的标签上。<meta>
:用于提供有关HTML文档的元数据,如字符集定义(<meta charset="UTF-8">
)、页面描述、关键词、作者等。<link>
:定义文档与外部资源的关系,常用于链接CSS样式表。<script>
:用于定义客户端脚本,如JavaScript。<style>
:定义内部样式表,用于直接在当前页面中编写CSS样式。<td>
:分别用于定义表格、表格中的行和单元格。<img>
:用于嵌入图像。<a>
:定义超链接,可以链接到其他网页、文件、邮箱地址、位置等。<p>
:定义段落。<br>
:插入一个简单的换行符。- 注意:
<font>
和<h1>
到<h6>
的用法有所不同。<font>
标签已不推荐使用(HTML5中已废弃),用于定义文本的字体、大小和颜色等样式。而<h1>
到<h6>
标签用于定义六级标题,<h1>
是最高级别的标题。
静态网页与动态网页
1. 静态网页
- 定义:在网站设计中,纯粹由HTML(HyperText Markup Language)编写的网页被称为“静态网页”。这些网页的文件扩展名通常为
.htm
或.html
。 - 特点:
- 静态网页的内容在HTML代码生成后基本不会发生变化,除非手动修改HTML代码。
- 静态网页可以包含视觉上的“动态效果”,如GIF动画、FLASH动画、滚动字幕等,但这些效果并不改变页面的实际内容或结构。
- 静态网页是网站建设的基础,早期的网站大多由静态网页构成。
2. 动态网页
- 定义:动态网页是与静态网页相对的一种网页编程技术。动态网页的内容可以根据时间、环境或数据库操作的结果而发生变化,即使页面代码本身没有改变。
- 特点:
- 动态网页的URL后缀通常不是静态网页的常见格式(如
.htm
、.html
、.shtml
、.xml
),而是.aspx
、.asp
、.jsp
、.php
、.perl
、.cgi
等。 - 动态网页的网址中常包含“?”符号,作为查询字符串的开始,用于传递参数。
- 动态网页结合了HTML语法规范与Java、PHP、C#等高级程序设计语言、数据库编程等多种技术,以实现高效、动态和交互式的网站内容和风格管理。
- 动态网页的URL后缀通常不是静态网页的常见格式(如
3. 动态网页语言
-
早期技术:通用网关接口(CGI,Common Gateway Interface)是早期的动态网页技术,尽管功能强大,但编程复杂、效率低下,逐渐被新技术取代。
-
当前常用语言:
- PHP:Hypertext Preprocessor(超文本预处理器),语法借鉴了C、Java、PERL等语言,易于学习,是Internet上广泛使用的脚本语言。
- JSP:Java Server Pages(Java服务器页面),基于Java Servlet及Java体系的Web开发技术,由Sun Microsystems(现为Oracle所有)推出。
- Python:一种面向对象、跨平台的动态类型计算机程序设计语言,初用于自动化脚本编写,现广泛用于大型项目开发。
- Ruby:一种简单快捷的面向对象脚本语言,由日本人松本行弘开发,灵感来源于多种编程语言,如Perl、Smalltalk、Eiffel、Ada和Lisp。
HTTP协议
概述
HTTP协议是一种基于请求与响应模型的应用层协议。在这种模型中,客户端首先向服务器发起请求,该请求中包含了请求的方法、目标URL、所使用的HTTP协议版本,以及一些请求修饰符、客户端信息和消息体(类似于MIME结构)。随后,服务器会返回一个响应,该响应以状态行开始,其中包含了消息协议的版本、表示成功或错误的编码,以及服务器信息、实体元信息和可能的实体内容。
随着时间的推移,HTTP已经发展出了多个版本,且大部分版本都保持了向下兼容性。
主要的HTTP版本包括:
http1.0:只支持短连接(在一个TCP连接中只能完成一次http请求和响应过程)
http1.1:支持长连接(连接保持、持久连接)和管道机制,即支持在一个TCP连接中可完成多次http请求和响应,且要求按照顺序一一对应
http2.0:支持长连接和多路复用,即支持在一个TCP连接中可完成多次http请求和响应,且不用按照顺序一一对应;还支持网页头部压缩和服务端主动推送;使用二进制格式代替文本格式
http3.0:基于UDP协议实现。具有更高的传输效率
版本 | 描述 |
---|---|
HTTP/0.9 | 已过时,仅支持GET请求,不指定版本号,不支持请求头 |
HTTP/1.0 | 首次指定版本号,广泛使用于代理服务器 |
HTTP/1.1 | 引入持久连接和管道机制,提高传输效率 |
HTTP/2.0 | 实现完全多路复用、头部压缩和服务端推送等功能 |
HTTP/3.0 | 基于UDP协议实现。具有更高的传输效率 |
HTTP方法
HTTP定义了一系列请求方法(也称为HTTP动词),用于指示服务器应执行何种操作。这些方法包括GET、POST、PUT、DELETE等,每种方法都有其特定的用途和语义。
方法 | 描述 |
---|---|
GET | 获取服务器资源,类似于数据库的SELECT操作 |
PUT | 向服务器提交数据以修改资源,类似于数据库的UPDATE操作 |
DELETE | 删除服务器上的资源,类似于数据库的DELETE操作 |
POST | 发送包含用户提交数据的请求,类似于数据库的INSERT操作 |
HEAD | 请求页面的首部,获取资源的元信息 |
CONNECT | 建立特殊的连接隧道 |
OPTIONS | 列出可对资源实行的方法 |
TRACE | 追踪请求-响应的传输路径 |
- GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。
- 与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。
- POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会将数据携带在body当中,通常表示的是“create”的含义,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。
- DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作
GET与POST方法的比较
-
GET方法:
- 用于从服务器获取数据。
- 请求可以被缓存。
- 请求会保存在浏览器历史记录中。
- 请求长度有限制。
- 查询字符串会显示在URL中,可能存在安全风险。
-
POST方法:
- 用于向服务器提交数据进行处理。
- 请求不能被缓存。
- 请求不会保存在浏览器历史记录中。
- 请求长度无限制。
- 查询字符串不会显示在URL中,相对更安全。
特性 | GET方法 | POST方法 |
---|---|---|
缓存 | 能被缓存 | 不能被缓存 |
浏览器历史记录 | 会保存 | 不会保存 |
长度限制 | 有长度限制 | 无长度限制 |
数据获取/提交 | 主要用于获取数据 | 主要用于提交数据 |
安全性 | 查询字符串显示在URL中,不安全 | 查询字符串不会显示在URL中,相对安全 |
以下是根据您提供的信息整理成的表格:
HTTP状态码分类及常见状态码
HTTP 状态码(HTTP Status Code)是用以表示网页服务器 HTTP 响应状态的 3 位数字代码,当浏览器请求某一 URL 时, 服务器根据处理情况返回相应的处理状态。
正常的响应状态码 1XX(提示信息) 2XX(正常处理) 3XX(重定向)
异常的响应状态码 4XX(客户端请求错误) 5XX(服务器请求错误)
状态码首位 | 已定义范围 | 分类 |
---|---|---|
1xx | 100-199 | 提示信息,表示目前是协议处理的中间状态,还需要后续的操作 |
2xx | 200-299 | 成功,报文已经收到并被正确处理 |
3xx | 300-399 | 重定向,资源位置发生变动,需要客户端重新发送请求 |
4xx | 400-499 | 客户端错误,请求报文有误,服务器无法处理 |
5xx | 500-599 | 服务器错误,服务器在处理请求时内部发生了错误 |
HTTP常见状态码
状态码 | 功能描述 |
---|---|
200 | 一切正常 |
301 | 永久重定向 |
302 | 临时重定向 |
401 | 用户名或密码错误 |
403 | 禁止访问(客户端IP地址被拒绝) |
404 | 请求的文件不存在 |
414 | 请求URI头部过长 |
500 | 服务器内部错误 |
502 | 无效网关 |
503 | 当前服务不可用 |
504 | 网关请求超时 |
HTTP 请求流程分析
当用户在浏览器中输入一个URL并按下回车键时,浏览器会发起一个HTTP请求到服务器。这个请求包含了请求报文,而服务器在接收到请求后会返回一个响应报文。整个过程可以细分为以下几个步骤:
1. 请求报文
请求报文由以下几个部分组成:
- 请求行:包含请求方法(如GET、POST)、请求的URL以及HTTP协议版本(如HTTP/1.1)。
- 请求头:键值对类型的元数据信息,由多个“名/值”对组成,用于传递附加信息给服务器。常见的请求头包括:
Host
:请求的目标主机名和端口号。User-Agent
:发起请求的应用程序名称和版本,如浏览器类型和版本。Connection
:指定与连接相关的属性,如是否保持连接(Keep-Alive)。Accept-Charset
:客户端可以接受的字符编码集。Accept-Encoding
:客户端可以接受的内容编码格式,如gzip、deflate。Accept-Language
:客户端优先使用的语言。
- 空行:请求头部和请求体之间的分隔符,表明请求头部的结束。
- 请求体:可选部分,包含发送给服务器的数据。GET请求通常不包含请求体,数据通过URL传递;POST请求的数据则包含在请求体中。
2. 响应报文
响应报文也由几个部分组成:
- 状态行:包含HTTP协议版本、状态码以及状态码描述。状态码用于表示请求的处理结果,如200表示成功,404表示未找到资源。
- 响应头:键值对类型的元数据信息,与请求头类似,用于传递附加信息给客户端。常见的响应头包括:
Server
:服务器软件的名称和版本。Content-Type
:响应体的媒体类型,如text/html
表示HTML文档。Content-Length
:响应体的长度(字节数)。Content-Charset
:响应体使用的字符编码。Content-Encoding
:响应体使用的数据压缩格式。Content-Language
:响应体使用的自然语言。
- 空行:响应头部和响应体之间的分隔符,表明响应头部的结束。
- 响应体:服务器返回给客户端的实际数据,如HTML文档、图片等。
流程总结
- 用户输入URL:用户在浏览器地址栏输入URL并按下回车键。
- 浏览器解析URL:浏览器解析URL,确定请求的资源位置(IP地址和端口)和路径。
- 构建请求报文:浏览器根据请求的资源和方法(如GET、POST)构建请求报文,包括请求行、请求头、请求体(如果有)。
- 发送请求:浏览器将请求报文发送给服务器。
- 服务器处理请求:服务器接收请求报文,解析请求,根据请求执行相应的操作(如查询数据库、生成动态页面)。
- 构建响应报文:服务器根据处理结果构建响应报文,包括状态行、响应头、响应体。
- 发送响应:服务器将响应报文发送给浏览器。
- 浏览器解析响应:浏览器接收响应报文,解析响应头和响应体,渲染页面或执行其他操作。