JavaWeb学习笔记:动静态Web、URL、HTTP

Web

Web是在互联网上,用浏览器访问的一种信息服务。可以简单理解成,我们打开一个网络链接,展示的一个个网页,就是Web。

Web有动态Web和静态Web:

  • 静态Web:是指开发者提前写好Web网页(HTML),所有人看到的网页内容都是一样的Web。早期的Web是静态Web,是使用HTML将网页内容写好放在服务器中,所有人访问网页,都是看到这个HTML的内容。静态Web的特点是所有人看到相同的内容,网页内容、数据都是写在HTML里,不与数据库交互。静态Web的业务流程大致如下:
    • Web开发者编写好HTML,保存到服务器某目录。
    • 用户从浏览器打开网页,比如www.xxxx.com/index.html
    • 服务器接受到请求,从文件目录中找到这个index.html文件,发送给用户。
    • 用户浏览器接收到HTML,渲染成网页展示给用户。
  • 动态Web:是指开发者并非提前写好Web网页,而是在用户访问时,动态生成网页HTML内容,每个人看到的网页内容都是不一样的Web。现代Web几乎都是动态Web,每个人看到的Web内容都可能不一样,比如有自己的用户昵称和头像,每个人看到的商品内容都不同。动态Web一般会与数据库交互,在生成网页HTML时,从数据库获取数据,动态拼接生成HTML内容。动态Web的业务流程大致如下:
    • Web开发者无需编写好HTML,而是编写生成HTML的模版程序。
    • 用户从浏览器打开网页,比如www.xxx.com/index.php?user=qiangzi
    • 服务器接受到请求,从数据库查询user=qiangzi的头像、昵称等信息,返回给后端程序。
    • 后端程序结合数据库数据,动态拼接生成HTML,发送给用户。
    • 用户浏览器接收到HTML,渲染成网页展示给用户。
上述动态Web的业务流程,为后端程序的动态Web。实际上,还有一种前端程序实现的动态Web:服务器接受到请求,只需要发送给用户一个空body的HTML。浏览器接收到这个HTML,会拉取JS代码,而JS代码会从API里获取数据库数据。最后,浏览器会执行JS代码,将数据处理,动态生成HTML,渲染并展示给用户。

URL

URL全称Uniform Resource Locator统一资源定位符,是指在互联网上的任意资源,比如一个网页(HTML)、一张图片、一个视频,都可以有一个全网唯一的定位符,这个就是URL。即使是我们自己目前电脑上的任意一个文件,只要我们开放外网IP,打开防火墙,使用一个web服务器,就可以用URL访问到。

HTTP URL

我们最常见的URL是HTTP或HTTPS协议的网络链接,比如:https://www.baidu.com:443/source/index.html?id=123&name=user#md。这个URL包含这几部分:

  1. https://:这是协议,代表URL采用的是HTTPS协议。
  2. www.baidu.com:这是域名/主机IP,代表互联网上的某台计算机。
  3. 443:这是端口号,代表这台计算机的网络端口号。端口号可以不写,如果是HTTPS协议,默认是用443端口号。如果是HTTP协议,默认是80端口号。端口号或主机IP与域名之间,用冒号:分隔。
  4. /source/index.html:这是路径,代表要获取计算机上这个路径的文件。在静态web时代,这个路径一般代表计算机上的真实存在的路径文件,而动态web时代,可能这个路径并不对应服务器计算机硬盘上的真实文件,而是由服务器端程序根据路由规则动态生成内容返回给客户端。因此,现代看到的很多网页,都不是以.html结尾的路径,而是类似/home/user这种非文件后缀结尾的路径。
  5. id=123&name=user:这是参数,由键值对组成,多个键值对之间用&隔开。路径和参数之间,用问号?分隔。参数用于向服务器传递参数,以便动态生成对应的资源。参数又被称为查询字符串,随请求发送给服务器,有长度限制。
  6. #md:这是定位符,一般用于HTML标记锚点的元素ID,与CSS ID选择器相同。定位符不会发送给服务器,仅在浏览器本地用于定位页面的元素。

其他URL协议

除了HTTP和HTTPS协议的URL,还有其他协议的URL,常见的比如:

  1. file://协议,用于访问计算机本地文件,格式通常是:file:///Users/zhongziqiang/Downloads/工作业绩总结.pdf,即协议file://、路径/Users/zhongziqiang/Downloads/工作业绩总结.pdf
  2. ftp://协议,即文件传输协议,用于在客户端和服务器之间传输文件。格式通常为ftp://ftp.example.com/software/readme.txt。在浏览器地址栏输入ftp协议的URL时,需要注意,下拉选择通过ftp原始的方式打开,否则很容易被浏览器当做搜索的关键词打开搜索界面。
  3. ftps://或者sftp://协议,是FTP的加密版本,更安全。与FTP关系就像HTTP与HTTPS一样。
  4. rtmp://协议,是实时流协议,用于流媒体传输,用于看在线直播或者播放流媒体视频时,可能会用到的协议。
  5. mailto:协议、tel:协议、sms协议、facetime协议等,用于打开计算机的邮件、电话、短信或者facetime应用。注意这些协议没有双斜杠//
  6. weixin://协议、whatapp://协议…:用于打开相关APP应用,称为URL Scheme,用于在应用之间进行跳转

URL中的百分比编码

需要注意,URL编码只允许使用ASCII码字符集中的字母、数字和部分字符,如果路径或者参数中包含非ASCII字符如中文、空格或者其他特殊字符,比如保留字符(/用来分隔路径、?用来分隔路径与查询参数等),需要进行百分号编码。在浏览器URL输入框输入URL,会自动进行百分号编码进行请求,但是为了方便用户查看,渲染时可能还是会展示原来的字符。

百分比编码是将非ASCII码字符、特殊字符转换成几个安全的,只由ASCII字符组成的格式,以便在网络中安全传输。

百分比编码规则:一个待转换字符(非ASCII码字符、特殊字符)被替换成一个或多个百分号%后面跟两个十六进制数字,这两个十六进制数字表示该字符在ASCII编码中的数值。

  • 对于ASCII码字符:直接转换其为ASCII码中的数值。比如空格,在ASCII码中码点为32,对应十六进制为20,则转换为%20。例如,一个URL为https://www.baidu.com/?id=%20ab,代表https://www.baidu.com/?id= ab
  • 对于非ASCII码字符:会将该字符按照某种编码集(一般是UTF-8)转换为字节,然后将每个字节按照上述规则进行百分比编码。比如字符“我”在UTF-8字符编码中使用3个字节存储,其十六进制表示为:E6 88 91,转换为%E6%88%91。例如,在浏览器输入https://www.baidu.com/?id=我时,浏览器会请求URL为https://www.baidu.com/?id=%E6%88%91

总结:百分号编码的本质是一种“转义”机制。它把有特殊含义或无法直接传输的字符,用 % 加上两个十六进制数字代替,从而保证URL的语法正确性和数据的完整性。在浏览器地址栏看到的那些 %E5%BC%A0 之类的乱码,其实就是经过编码的中文或特殊符号。

HTTP

HTTP全称Hypertext Transfer Protocol,即超文本传输协议。“超文本”是指HTTP最初发明是用来传输HTML文档的,而HTML即为超文本标记语言。“传输协议”是指HTTP本身是一个应用层的传输协议,即一个标准。

HTTP最初发明是为了做HTML传输,但是发展至今,已经成为了互联网最流行的传输协议,不仅可以传输HTML等文档、文件,还被用来作为API应用程序接口。

请求与响应

HTTP采用客户端-服务器模式,每次客户端发送请求(request),服务器做一次响应(response)。

HTTP的服务器是无状态的,即每次请求,服务器并不会记录客户端的信息,服务器处理完一个客户端请求后,同一个客户端再次请求,在服务器看来,就跟从来没有响应过请求一样。但是,随着技术的发展,cookie和session技术,可以让服务器“有记忆”。具体来说,服务器响应请求时,会在服务器内存里生成一个记录session,并给这个客户端赋予cookie,浏览器会存储cookie,在下次请求时,连同cookie带上去。服务器可以通过cookie,识别到这个是上次某个请求的客户端。

请求头

HTTP请求头包含请求行和Header,请求行固定格式为:请求方法 请求路径和参数 HTTP版本,比如:GET /all?keyword=%E4%BB%80%E4%B9%88%E6%98%AFURL%EF%BC%9F&from_source=webtop_search&spm_id_from=333.1007&search_source=3 HTTP/1.1

  • 请求方法:最常见的请求方法为GET和POST,还有其他请求方法如PUT、DELETE、PATCH、HEAD、OPTIONS方法。
  • 请求路径和参数:是URL中的路径和参数。
  • HTTP版本:固定为HTTP/ 加版本号。

HTTP请求头中的Header是键值对,只有Host要求必须传递,而其他Header如User-Agent、Accept、Connection等是非必须传递的Header。此外,Header可灵活扩展,只要客户端和服务器约定的参数,都可以通过Header进行传递。常见的HTTP请求头如下:

  • Host:是URL中的域名或者IP,及端口号,在HTTP/1.1是必须要传递的头部信息。比如Host: www.example.com:8080
  • Connection:是控制网络连接的选项。如Connection: Keep-Alive表示保持连接以便后续请求复用,Connection: Close表示完成后关闭连接。
  • Accept-Language:表示希望获得的资源内容的语言,比如zh-CN(代表中国大陆的简体中文)、zh-TW(代表台湾地区的繁体中文),一般用于支持国际化的Web服务。
  • Accept:告知服务器客户端能够处理的内容类型(MIME类型,由主类型/子类型组成),服务器可根据此返回合适的格式。比如text/html 表示HTML文档,application/json 表示JSON数据、image/jpeg 表示JPEG图片、audio/mpeg 表示MP3音频。
  • Content-Type:告知服务器客户端发送请求的请求体body的内容类型(MIME类型),在POST、PUT等携带请求体的方法中必须使用。
  • User-Agent:表示发起请求的客户端软件、操作系统、版本的信息,服务器可根据此优化响应,比如更具不同的浏览器返回不同的页面。例如Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36

请求头是使用ASCII码的字符,这也是为什么HTTP协议的URL如果含有非ASCII码的字符需要被百分比编码转义的原因之一。

请求头后是请求体,在POST、PUT等携带请求体的方法时,需要带请求体。

由此可见,HTTP请求,可以有很多方式向服务器传递参数,包括Query参数、Header请求头、Body请求体。

  • Query参数:是指HTTP URL中的路径?后的键值对,比如URLhttps://search.bilibili.com/all?vt=15612243&keyword=%E4%BB%80%E4%B9%88%E6%98%AFURL%EF%BC%9F&from_source=webtop_search&spm_id_from=333.1007&search_source=3中,Query查询参数有vtkeywordfrom_sourcespm_id_fromsearch_source等5个参数。
  • Header请求头:服务器和客户端可以约定自定义Header请求头参数。
  • Body请求体:Body请求体中可以传输任意MIME类型的文件,在POST、PUT等携带请求体的方法中使用。

响应头

HTTP响应头包含响应行(状态行)和Header,响应行固定格式为:HTTP版本 状态码 原因短语,比如:HTTP/1.1 200 OK

  • HTTP版本:固定为HTTP/ 加版本号,表示服务器使用的HTTP协议版本。
  • 状态码:三位数字,表示请求的处理结果。比如200代表成功,5XX代表服务器问题。
  • 原因短语:代表对状态码的简单文本描述,是与状态码一一对应的文本,比如200时为0K。

HTTP响应头中的Header是键值对,与请求头Header相似,响应头帮助客户端(如浏览器)正确解析、缓存、安全处理服务器返回的资源。常见的HTTP响应头如下:

  • Date:服务器响应生成的日期时间,是必须要传递的头部信息。
  • Content-Type:指定响应体的媒体类型(如 text/html; charset=utf-8)。
  • Content-Length:响应体的大小(字节数)。
  • Location:在重定向响应(3xx)中指定新的资源地址。

Read more

MySQL 8.0 超详细安装教程(附安装包获取方式)

MySQL 8.0 超详细安装教程(附安装包获取方式)

本文为大家带来 MySQL 8.0 保姆级安装教程,涵盖安装前准备、安装操作、配置及验证全流程,步骤清晰易懂,新手也能轻松上手。 一、安装前准备工作 (一)获取 MySQL 8.0 安装包 便捷获取方式MySQL 8.0 安装包快速下载:点击下载 官网下载方式打开浏览器访问 MySQL 官方网站,在下载专区找到「MySQL Community Server」选项,点击「Download」按钮;根据自身操作系统(如 Windows 64 位、Linux 主流发行版等)选择对应版本,点击下载链接即可。 (二)检查并满足系统要求 1. 操作系统兼容:MySQL 8.0.

By Ne0inhk
掌控消息全链路(4)——RabbitMQ/Spring-AMQP高级特性详解之事务与消息分发

掌控消息全链路(4)——RabbitMQ/Spring-AMQP高级特性详解之事务与消息分发

🔥我的主页:九转苍翎⭐️个人专栏:《Java SE》《Java集合框架系统精讲》《MySQL高手之路:从基础到高阶》《计算机网络》《Java工程师核心能力体系构建》《RabbitMQ理论与实践》天行健,君子以自强不息。 1.事务 AMQP(高级消息队列协议)实现了事务机制,主要用于确保消息的原子性发布和确认。换言之,它允许你将多个操作(如发送消息、确认消息)绑定在一起,要么全部成功,要么全部失败 发送消息 @RestController@RequestMapping("/producer")publicclassProducerController{@Resource(name ="transRabbitTemplate")privateRabbitTemplate transRabbitTemplate;@Transactional@RequestMapping("/trans")publicStringtrans(){ transRabbitTemplate.convertAndSend(""

By Ne0inhk
RUST异步微服务架构的最佳实践与常见反模式

RUST异步微服务架构的最佳实践与常见反模式

RUST异步微服务架构的最佳实践与常见反模式 一、项目优化前的问题分析 1.1 任务调度不合理 💡在第21篇项目中,用户同步服务的任务调度使用了Cron调度器,但Cron调度器的精度有限,可能导致任务执行延迟。此外,任务的并发度没有配置,可能导致任务积压。 1.2 I/O资源限制不足 订单处理服务的TCP连接队列大小没有配置,可能导致连接失败。数据库连接池的大小没有配置,可能导致数据库连接耗尽。 1.3 同步原语使用不当 实时监控服务中,Redis连接没有使用连接池,可能导致连接开销过大。任务结果的处理没有使用批量操作,可能导致上下文切换过多。 1.4 错误处理不完善 任务失败的处理逻辑不够完善,没有进行任务重试和错误统计。服务之间的通信没有进行超时管理和错误处理。 二、异步架构设计模式的应用 2.1 命令查询分离(CQS) CQS是一种架构设计模式,将系统的操作分为命令和查询两种类型。命令用于修改系统状态,查询用于获取系统状态,两者互不干扰。 在项目中,我们可以将用户同步任务视为命令操作,将系统状态查询视为查询操作: // 用户同步任务(

By Ne0inhk
基于ssm Web 教师业绩管理系统设计与实现

基于ssm Web 教师业绩管理系统设计与实现

博主介绍:翰文编程 专注于Java(springboot ssm 等开发框架) vue  .net  php phython node.js    uniapp 微信小程序 等诸多技术领域和课设项目实战、企业信息化系统建设,从业十八余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了2000+题目解决方法案例  方便大家学习使用 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人 文末下方有源码获取地址 4.1 系统总体模块图 教师业绩管理系统主要设计了用户管理、课程管理、课程执行鼓励等功能,满足用户在网站上面进行课程管理的信息浏览与查看,具体功能模块图如4.1所示: 图4.1 系统总体模块图 4.2 数据库层的设计 数据设计方案:采用DBMS方案——mysql . mysql关系数据库引擎支持当今苛刻的数据处理环境所需的功能。数据库引擎充分保护数据完整性,同时将管理上千个并发修改数据库的用户的开销减到最小。 4.2.

By Ne0inhk