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包含这几部分:
https://:这是协议,代表url采用的是https协议。www.baidu.com:这是域名/主机ip,代表互联网上的某台计算机。443:这是端口号,代表这台计算机的网络端口号。端口号可以不写,如果是https协议,默认是用443端口号。如果是http协议,默认是80端口号。端口号或主机ip与域名之间,用冒号:分隔。/source/index.html:这是路径,代表要获取计算机上这个路径的文件。在静态web时代,这个路径一般代表计算机上的真实存在的路径文件,而动态web时代,可能这个路径并不对应服务器计算机硬盘上的真实文件,而是由服务器端程序根据路由规则动态生成内容返回给客户端。因此,现代看到的很多网页,都不是以.html结尾的路径,而是类似/home/user这种非文件后缀结尾的路径。id=123&name=user:这是参数,由键值对组成,多个键值对之间用&隔开。路径和参数之间,用问号?分隔。参数用于向服务器传递参数,以便动态生成对应的资源。参数又被称为查询字符串,随请求发送给服务器,有长度限制。#md:这是定位符,一般用于html标记锚点的元素id,与css id选择器相同。定位符不会发送给服务器,仅在浏览器本地用于定位页面的元素。
其他url协议
除了http和https协议的url,还有其他协议的url,常见的比如:
file://协议,用于访问计算机本地文件,格式通常是:file:///users/zhongziqiang/downloads/工作业绩总结.pdf,即协议file://、路径/users/zhongziqiang/downloads/工作业绩总结.pdf。ftp://协议,即文件传输协议,用于在客户端和服务器之间传输文件。格式通常为ftp://ftp.example.com/software/readme.txt。在浏览器地址栏输入ftp协议的url时,需要注意,下拉选择通过ftp原始的方式打开,否则很容易被浏览器当做搜索的关键词打开搜索界面。ftps://或者sftp://协议,是ftp的加密版本,更安全。与ftp关系就像http与https一样。rtmp://协议,是实时流协议,用于流媒体传输,用于看在线直播或者播放流媒体视频时,可能会用到的协议。mailto:协议、tel:协议、sms协议、facetime协议等,用于打开计算机的邮件、电话、短信或者facetime应用。注意这些协议没有双斜杠//。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中的路径?后的键值对,比如url
https://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查询参数有vt、keyword、from_source、spm_id_from、search_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)中指定新的资源地址。
总结
到此这篇关于javaweb学习笔记之动静态web、url、http详解的文章就介绍到这了,更多相关javaweb动静态web、url、http内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论