当前位置: 首页 > article >正文

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

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(服务器请求错误)

状态码首位已定义范围分类
1xx100-199提示信息,表示目前是协议处理的中间状态,还需要后续的操作
2xx200-299成功,报文已经收到并被正确处理
3xx300-399重定向,资源位置发生变动,需要客户端重新发送请求
4xx400-499客户端错误,请求报文有误,服务器无法处理
5xx500-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. 浏览器解析响应:浏览器接收响应报文,解析响应头和响应体,渲染页面或执行其他操作。

http://www.kler.cn/a/311382.html

相关文章:

  • 读数据质量管理:数据可靠性与数据质量问题解决之道03数据目录
  • 【ChatGPT】 如何让ChatGPT分析数据并得出结论
  • 移动端【01】面试系统的MVVM重构实践
  • 前端知识点---Javascript的对象(Javascript)
  • YUM 的使用
  • 11Java面向对象高级(篇2,Java程序的核心套路!!!!)
  • 十大排序算法的特点及应用场景
  • 英飞凌最新AURIX™TC4x芯片介绍
  • kafka原理剖析及实战演练
  • MySQL-binlog、redolog和undolog的区别
  • android BLE 蓝牙的连接(二)
  • AI生成内容:优点与缺点
  • Docker实操:安装MySQL5.7详解(保姆级教程)
  • 【软考】数据字典(DD)
  • 游戏、网关等服务借助Docker容器化并使用Kubernetes部署、更新等
  • MySQL 中的 EXPLAIN 命令:洞察查询性能的利器
  • MySQL 中的索引覆盖扫描:加速查询的秘密武器
  • 【Linux】Ubuntu 22.04 shell实现MySQL5.7 tar 一键安装
  • 独立站技能树之建站33项自检清单 1.0丨出海笔记
  • STM32 HAL freertos零基础(十一)中断管理
  • Linux技术04-IPVS
  • 游戏如何对抗定制挂
  • Linux线程基础
  • Java-测试-Mockito 入门篇
  • FTP、SFTP安装,整合Springboot教程
  • 基于剪切板的高速翻译工具