应用层之 HTTP 协议

admin2024-05-15  0

HTTP 协议

        HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议。所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些 其他的资源, 比如图片, 视频, 音频等二进制的数据。浏览器获取到网页,就是基于 HTTP 的,也就相当于 浏览器 和 服务器 之间的桥梁。

应用层之 HTTP 协议,第1张

应用层之 HTTP 协议,第2张

        目前我们主要使用的还是 HTTP1.1

HTTP 协议的工作过程

        当我们在浏览器中输入一个 "网址", 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收 到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应.

应用层之 HTTP 协议,第3张

        事实上, 当我们访问一个网站的时候, 可能涉及不止一次的 HTTP 请求/响应 的交互过程。可以通过 fiddler 来抓包显示。

应用层之 HTTP 协议,第4张

        Fiddler 相当于一个 "代理". 浏览器访问 sogou.com 时, 就会把 HTTP 请求先发给 Fiddler, Fiddler 再把请求转发给 sogou 的服务器. 当 sogou 服务器返回数据时, Fiddler 拿到返回数据, 再把数据交给浏览器. 因此 Fiddler 对于浏览器和 sogou 服务器之间交互的数据细节, 都是非常清楚的.(相当于是一个跑腿小弟)

应用层之 HTTP 协议,第5张

HTTP 请求 (Request)

认识 URL

        平时我们俗称的 "网址" 其实就是说的 URL (Uniform Resource Locator 统一资源定位符). 互联网上的每个文件都有一个唯一的URL。

应用层之 HTTP 协议,第6张

URL 最关键的四个部分:1. 域名 / IP,2. 端口号,3. 带层次的路径,4. 查询字符串。

应用层之 HTTP 协议,第7张

例如:https://v.bitedu.vip/personInf/student?userId=10000&classId=100

        https : 协议方案名. 常见的有 http 和 https, 也有其他的类型. (例如访问 mysql 时用的 jdbc:mysql )

        user:pass : 登陆信息. 现在的网站进行身份认证一般不再通过 URL 进行了. 一般都会省略

        v.bitedu.vip : 服务器地址. 此处是一个 "域名", 域名会通过 DNS 系统解析成一个具体的 IP 地址. 

        端口号: 上面的 URL 中端口号被省略了. 当端口号省略的时候, 浏览器会根据协议类型自动决定使用 哪个端口. 例如 http 协议默认使用 80 端口, https 协议默认使用 443 端口.

        /personInf/student : 带层次的文件路径.

        userId=10000&classId=100 : 查询字符串(query string). 本质是一个键值对结构。以 开头,键值对之间使用 & 分隔,键和值之间使用 = 分隔。

        片段标识: 此 URL 中省略了片段标识,片段标识主要用于页面内跳转, 通过不同的片段标识跳转到文档的不同章节。

关于 URL encode

        像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现. 比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.

应用层之 HTTP 协议,第8张

"+" 被转义成了 "%2B"

urldecode就是urlencode的逆过程,就是解码跟编码的过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!