URI :Uniform Resource Identifier,统一资源标识符;
URL:Uniform Resource Locator,统一资源定位符;
URN:Uniform Resource Name,统一资源名称。
URI 属于父类,而 URL和URN 属于 URI 的子类
url结构
https://www.example.com:8080/path/to/resource?search=test#section1
- 协议:
https
- 域名(IP):
www.example.com
- 端口:
8080
- 路径:
/path/to/resource
- 查询字符串:
search=test
- 片段标识符:
#section1
域名可通过DNS来转换成IP,明确协议后端口可以省略,一般都是固定端口,片段标识符是用来实现网页内跳转的
我们在浏览器中输入url并处理成http报文,这时ip和端口就明确了,在向下的传输层和网络层交付过程中,会在ip报头和tcp报头中添加ip和port字段,所以http报头中请求行的url的协议和域名经常去掉,最后只留路径和查询字符串
浏览器中输入一个url的时候,填充字符可能会破坏url的结构,所以要对其进行编码,将其ascill码转换成十六进制%XX的形式。在查询字符串中,由于历史原因我们一般将空格编码为+,而在路径中并不这样编码
?:用于分隔路径和查询参数等。
=用于表示查询参数中的键值对。
&符号用于分隔查询多个键值对。
MIME(Multipurpose Internet Mail Extensions)
用于表明文件类型
MIME 类型由两部分组成:
- 主类型(Type):如
text
、image
、audio
、video
等。 - 子类型(Subtype):具体的文件类型或格式,如
plain
、html
、jpeg
、mp3
等。
text/html 就是html的文本文件
浏览器访问的过程
-
用户输入 URL: 当你在浏览器地址栏输入一个 URL 时,比如
http://example.com/hello world/
,浏览器会检测到这个 URL 是否包含任何需要编码的字符。- 空格(
#
、&
、?
等)可能需要编码成%20
或其他编码形式,以确保它们不会干扰 URL 的语法结构。
- 空格(
-
URL 编码: 浏览器会对输入的 URL 进行自动编码。比如:
http://example.com/hello world/
会被编码成http://example.com/hello%20world/
。
这个编码过程是在浏览器的前端(即客户端)完成的。
-
构造完整的 HTTP 请求: 浏览器随后将编码后的 URL 作为http报头请求行的一部分。
-
发送 HTTP 请求: 浏览器将该编码后的 URL 与其他必要的请求头(如
User-Agent
、Accept
等)一起构成完整的 HTTP 请求,并发送给服务器。- 请求头是不需要什么编码的,也跟url扯不上什么关系
- GET 请求:数据在 URL 查询字符串 中(例如
?key=value
)。 - POST 请求:数据在 请求正文 中,通常更适合传输较多或敏感的数据。