「学习笔记」HTTP协议
HTTP 协议
基本介绍
- HTTP:超文本传输协议,是用于从万维网服务器传输超文本到本地服务器的传送协议,该协议是一种应用层协议,基于 TCP/IP 通信协议来传递数据。
- 协议:为了使数据能从源头到达目的地,参与各方都要遵守的规则,最终体现为网络上传输的数据包格式。
- TCP/IP:TCP/IP 是一个协议族,TCP 是传输控制协议,负责可靠的数据传输(如何可靠的把话送达),IP 是网际协议,负责寻址和路由,把数据包从源头发到目的地(如何找到对方)
- IP:互联网“邮政系统”,为互联网的每一台设备分配一个唯一的逻辑地址,即 IP 地址,根据 IP 地址,通过网络路由器决定数据包的最佳路径,从源头传递到目的地。
- TCP:在 IP 协议提供的服务之上,提供了可靠的、面向连接的数据传输服务,通过确认机制、超时重传、校验和等方式,确保数据包能完整无误不重复地到达目的地。
HTTP 负责通信“内容”,TCP/IP 负责通信“过程”。
HTTPS 是在 HTTP 的基础上做了加密的工作。
HTTP 协议工作过程
当在浏览器输入一个网址时,浏览器会对对应的服务器发送一个 HTTP 请求,而对应的服务器收到请求后,经过计算处理,会返回一个 HTTP 响应,当我们访问一个网站是,可能不止一次的 HTTP 请求和 HTTP 响应交互过程。
- 客户端:主动发起网络请求的一端。
- 服务器:被动接受网络请求的一端。
- 请求:客户端发给服务器的数据。
- 响应:服务器返给客户端的数据。
HTTP 协议一发一收,一问一答。
其他模式:
- 多发一收,如上传大文件。
- 一发多收,如搜索一个词汇,得到多条信息。
- 多发多收。
HTTP 请求 (request)
url
介绍:就是平时俗称的网址,互联网上每个文件都有唯一的 url,包含的信息指出文件的位置以及浏览器如何处理它。
基本格式:
-
标准格式:协议类型:[//服务器地址[:端口号]][/资源层级 UNIX 文件路径]文件名[?查询字符串][#片段标识符]
-
完整格式:协议类型:[//[访问资源需要的凭证信息@]服务器地址[:端口号]][/资源层级 UNIX 文件路径]文件名[?查询字符串][#片段标识符]
参数:
- 协议类型:常见的有 http 和 https,可以省略,省略后默认为
http:// - 访问资源需要的凭证信息:一般为登录信息,如用户名、密码等,现在的网站一般不在通过 url 进行,一般省略。
- 服务器地址:可以是一个 IP 地址,也可以是一个域名(域名通过 DNS 解析成一个具体的 IP 地址),HTML 中省略服务器地址就像跟浏览器说“去我自家仓库拿东西”,而不需要每次都说明“去某某地址的仓库拿东西”
- 端口号:是网络连接的“门牌号”,用于在一台机器上区分不同服务,它让一个 IP 地址可以同时提供多种不同的服务,数据包会根据端口号被准确地分发到对应的应用程序上。端口号可以被省略,省略后浏览器会根据协议自动决定使用哪个端口号。
(知名端口 0 - 1023 分配给系统级或公认的重大服务。普通程序不应使用;注册端口 1024 - 49151 分配给用户级的应用程序或服务。许多常见软件使用此范围。动态/私有端口 49152 - 65535 一般不固定分配给服务,主要用于客户端的临时连接。) - 资源层级 UNIX 文件路径:表示访问该服务器某个资源的路径,省略后相当于
/。 - 文件名:表示访问服务器上哪个资源,不可省略。
- 查询字符串:查询字符串是 URL 中的“问询部分”,用于向服务器传递额外参数。
?是起始符,&是间隔符,=是赋值符。查询字符串可以省略。 - 片段标识符:主要用于页面内跳转,可以省略。
查询字符串:如果把整个URL路径(/products/electronics)比作你去商场电子产品楼层(一个层级化的位置),那么查询字符串就是你向店员提出的具体需求:
https://example.com/products/electronics?category=phone&brand=apple&sort=price_asc
category=phone:我要看手机!
brand=apple:品牌要看苹果的!
sort=price_asc:按照价格排序!
method
| 方法 | 说明 | 试用版本号 |
|---|---|---|
| GET | 获取资源 | HTTP 1.0/1.1 |
| POST | 传输实体主题 | HTTP 1.0/1.1 |
| PUT | 传输文件 | HTTP 1.0/1.1 |
| HEAD | 获得报文首部 | HTTP 1.0/1.1 |
| DELETE | 删除文件 | HTTP 1.0/1.1 |
| OPTIONS | 访问支持的方法 | HTTP 1.1 |
| TRACE | 追踪路径 | HTTP 1.1 |
| CONNECT | 要求用隧道协议连接代理 | HTTP 1.1 |
| LINK | 建立和资源之间的联系 | HTTP 1.1 |
| UNLINE | 断开连接关系 | HTTP 1.1 |
GET
GET 常用于获取服务器上的某个资源。
触发 GET 的方法:
- 在浏览器输入 URL 回车或在收藏夹内点击链接。
- HTML 中的 link, img, script 等标签的属性中放的 URL。
- 使用 Javascript 重点 ajax,也能构造出 HTTP GET 请求。
- 各种编程语言(只要能够访问网络),就都能够构造出 HTTP GER 请求。
POST
POST 多用于提交用户输入的数据给服务器。
触发 POST 的方法:
- 通过 HTML 中的 form 标签可以构造 POST 请求。
- 使用 JavaScript 的 ajax 可以构造 POST 请求。
header
HOST:表示服务器主机地址和端口。
Content - Length:表示 body 的数据长度,长度单位是字节。
Content - Type:表示 body 的数据格式。
application/x-www-form-urlencoded
这是 form 表单提交的数据格式,此时 body 的格式就类似于 query string(是键值对的结构,键值对之间使用&分割,键与值之间使用=分割。multipart/form-data
这是 form 表单提交的数据格式(需要在 from 标签上加上 enctyped="multipart/form-data"),通常用于 HTML 提交图片或者文件。application/json
此时 body 数据为 json 格式,json 格式就是源自 js 的对象的格式。用一个 { } 括住,里面有多个键值对,键值对之间使用,分割,键和值之间使用:分割。
User-Agent(简称 UA):用户浏览器或操作系统的属性。
Referer:表示这个页面是从哪个页面跳转过来的。
Cookie:提供一种让程序员在本地存储数据的能力。
关于 Cookie:
Cookie 数据可能是客户端(网页)自行通过 JS 写入的,也可能来自于服务器在 HTTP 响应的 header 中通 Set-Cookie 字段给浏览器返回数据。
一个生动的比喻:会员卡
想象你去一家咖啡店(浏览器 访问 服务器):
首次光临:你点了一杯咖啡。店员说:“办张会员卡吧,记录您的喜好”。你同意了。
这相当于服务器在响应中设置了 Cookie(Set-Cookie 头)。
保存会员卡:你收下了这张卡。
这相当于浏览器收到了 Set-Cookie 指令,并将其保存在本地。
再次光临:下次你来这家店时,主动出示了会员卡。
这相当于浏览器在后续的每个请求中,都会自动在 Cookie 请求头里带上这段数据。
店员认出你:店员看到会员卡,立刻知道你是“王先生,喜欢中烘豆,不加糖”,不用再问一遍。
这相当于服务器收到了 Cookie,从而知道了你的身份和偏好,可以提供个性化服务。
主要用途:
- 会话管理:保持用户的登录状态
- 个性化:记录用户偏好,如语言主题、地区设置。
- 跟踪:分析用户行为,记录用户在不同页面间的浏览路径。
常用于广告投放。
HTTP 响应 (response)
状态码
状态码表示访问一个页面的结果,是一个三位整数。
| 状态码 | 状态 | 状态解释 |
|---|---|---|
| 200 | OK | 访问成功 |
| 301 | Moved Permanently | 表示永久重定向 |
| 302 | Move temporarily | 表示临时重定向 |
| 403 | Forbidden | 访问被拒绝 |
| 404 | Not Found | 没找到资源 |
| 405 | Method Not Allowed | 不支持或无法使用请求中的方法 |
| 500 | Internal Server Error | 服务器内部错误 |
| 504 | Gateway Timeout | 服务器负载较大,处理单条请求超时 |
重定向相当于手机呼号的呼叫转移功能,如果我们换了一个手机号,就可以去办理该呼叫转移业务,使朋友拨打你的旧号码时,自动跳转到新号码
header
Content - Type:
表示 body 的数据形式。
text/html:数据格式是 HTML。text/css:数据格式是 CSS。application/javascript:数据格式是 JavaScript。application/json:数据格式是 JSON。

浙公网安备 33010602011771号