【网站架构部署与优化】web服务与http协议

文章目录

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>三个主要部分:

html 复制代码
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>页面标题</title>
        <!-- 其他head标签,如<link>、<meta>、<script>、<style>等 -->
    </head>
    <body>
        <!-- 网页的可见内容 -->
        <p>这是一个段落。</p>
        <!-- 其他body标签</body>
</html>

也就是:

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#等高级程序设计语言、数据库编程等多种技术,以实现高效、动态和交互式的网站内容和风格管理。

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 追踪请求-响应的传输路径
  1. GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。
  2. 与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。
  3. POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会将数据携带在body当中,通常表示的是"create"的含义,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。
  4. 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文档、图片等。

流程总结

  1. 用户输入URL:用户在浏览器地址栏输入URL并按下回车键。
  2. 浏览器解析URL:浏览器解析URL,确定请求的资源位置(IP地址和端口)和路径。
  3. 构建请求报文:浏览器根据请求的资源和方法(如GET、POST)构建请求报文,包括请求行、请求头、请求体(如果有)。
  4. 发送请求:浏览器将请求报文发送给服务器。
  5. 服务器处理请求:服务器接收请求报文,解析请求,根据请求执行相应的操作(如查询数据库、生成动态页面)。
  6. 构建响应报文:服务器根据处理结果构建响应报文,包括状态行、响应头、响应体。
  7. 发送响应:服务器将响应报文发送给浏览器。
  8. 浏览器解析响应:浏览器接收响应报文,解析响应头和响应体,渲染页面或执行其他操作。
相关推荐
Smile丶凉轩2 分钟前
微服务即时通讯系统的实现(客户端)----(1)
微服务·云原生·架构
精进攻城狮@17 分钟前
Redis(value的数据类型)
数据库·redis
人类群星闪耀时19 分钟前
未来运维的发展趋势:运维领域的新技术与趋势
运维
爪哇学长24 分钟前
SQL 注入详解:原理、危害与防范措施
xml·java·数据库·sql·oracle
落非24 分钟前
NFS存储基础操作
运维
Vanish_ran44 分钟前
gitlab与jenkins
运维·gitlab·jenkins
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
mybatisPlus打印sql配置
数据库·sql
朱容君1 小时前
Linux系统编程多线程之读写锁讲解
linux·开发语言
弗拉唐1 小时前
将Excel文件的两个表格经过验证后分别读取到Excel表和数据库
数据库·excel
大风吹PP凉1 小时前
38配置管理工具(如Ansible、Puppet、Chef)
linux·运维·服务器·ansible·puppet