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

【网站架构部署与优化】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. 浏览器解析响应:浏览器接收响应报文,解析响应头和响应体,渲染页面或执行其他操作。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • RockTrack:A 3D Robust Multi-Camera-Ken Multi-Object Tracking Framework
  • Oracle事物
  • 计算机人工智能前沿进展-大语言模型方向-2024-09-18
  • Hexo框架学习——从安装到配置
  • HTB-Blue(永恒之蓝漏洞复现)
  • 更换UFS绑定固件与“工程固件”的区别 小米10s机型更换cpu绑定包对比 写入以及修复基带
  • 【C++】猜数字小游戏
  • Hotohiko Sakamoto算法,以及用其计算星期几【算法 15】
  • Vue 中阻止点击事件穿透
  • Arcgis实现面空间位置从东至西从南至北排序
  • Matlab simulink建模与仿真 第十四章(信号输出库)
  • 梯度计算中的一些算子
  • Go语言错误处理详解
  • 【AIGC】Kolors:快手开源的文生图大模型
  • WebGL系列教程九(动画)
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • CSS 三角实现
  • CSS相对定位
  • Git初体验
  • Leetcode 27 Remove Element
  • LeetCode18.四数之和 JavaScript
  • Python socket服务器端、客户端传送信息
  • sessionStorage和localStorage
  • vue总结
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 今年的LC3大会没了?
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端性能优化--懒加载和预加载
  • -- 数据结构 顺序表 --Java
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 智能合约Solidity教程-事件和日志(一)
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • 我们雇佣了一只大猴子...
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • ######## golang各章节终篇索引 ########
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (c语言)strcpy函数用法
  • (阿里云万网)-域名注册购买实名流程
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (差分)胡桃爱原石
  • (第二周)效能测试
  • (二)Linux——Linux常用指令
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (三)Honghu Cloud云架构一定时调度平台
  • (转)Linux整合apache和tomcat构建Web服务器
  • ******之网络***——物理***
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .net 验证控件和javaScript的冲突问题
  • .net的socket示例