HTTP 的原理和工作机制学习笔记整理

Author Avatar
dev.liang 1月 30, 2019
  • 在其它设备中阅读本文章

最近在学习 HenCoder Plus 的二期课程,想巩固一下基础的同时,也在这里记录一下,结合讲义做一下笔记。

HTTP 的定义(Hypertext Transfer Protocol)

一种网络协议传输协议,位于 TCP/IP 协议族的最顶层–(应用层);
超文本传输协议,和 HTML(Hypertext Markup Language) 超文本标记一起诞生,用于在网络上请求和传输 HTML 内容。
超⽂文本,即「扩展型⽂文本」,指的是 HTML 中可以有链向别的⽂文本的链接(hyperlink)。

1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>

<h1>This is a Heading</h1>
<p>This is a paragraph.</p>

</body>
</html>

HTTP 的工作方式

浏览器:

用户输入地址后回车或点击链接 -> 浏览器拼装 HTTP 报⽂并发送请求给服务器 -> 服务器处理理请求后 发送响应报文给浏览器 -> 浏览器解析响应报⽂并使⽤渲染引擎显示到界⾯

手机 App:

⽤户点击或界⾯自动触发联网需求 -> Android 代码调⽤拼装 HTTP 报⽂并发送请求到服务器器 -> 服务器处理理请求后发送响应报文给手机 -> Android 代码处理响应报文并作出相应处理理(如储存数据、加⼯数据、显示数据到界面)

URL 和 HTTP 报文

URL 格式

三部分:协议类型、服务器地址(和端口号)、路径(path)
协议类型: //服务器地址[:端口号]路径

报文格式

请求报文

请求行:

1
GET(method) + /users (path)+ HTTP/1.1 (HTTP version)

Headers:

1
2
3
Host:api.github.com    
Content-Type: text/plain
Content-Length: 243

Body:

1
balabalabala....

响应报文结构

状态行:

1
HTTP/1.1(HTTP version) + 200(state code) + OK (state msg)

Headers:

1
2
3
4
5
content-type: application/json; charset=utf-8
cache-control: public, max-age=60, s-maxage=60
vary: Accept,Accept-Encoding
etag: W/"02eec5b334b0e4c05253d3f4138daa46"
content-encoding: gzip

Body:

1
2
3
[{"login":"mojombo","id":1,"node_id":"MDQ6VXNlcjE
=","avatar_url":"https://avatars0.githubuserconte
nt.com/u/1?v=4","gravat......

Request Method 请求方法

GET 特点

  • 用户获取资源
  • 对服务器数据不进行修改
  • 不发送 Body

POST 特点

  • 用于增加或修改资源
  • 发送给服务器的内容写在 Body 里面
1
2
3
4
5
POST  /users  HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
name=rengwuxian&gender=male

PUT 特点

  • 用于修改资源
  • 发送给服务器的内容写在 Body 里面

DELETE 特点

  • 用于删除资源
  • 不发送 Body

HEAD 特点

  • 和 GET 使用方法完全相同
  • 和 GET 唯一区别在于,返回的响应中没有 Body

State Code 状态码

三位数字,⽤于对响应结果做出类型化描述(如 获取成功、内容未找到)

  • 1xx:临时性消息。如:100 (继续发送)、101(正在切换协议)
  • 2xx:成功。最典型的是 200(OK)、201(创建成功)
  • 3xx:重定向。如 301(永久移动)、302(暂时移动)、304(内容未改变)
  • 4xx:客户端错误。如 400(客户端请求错误)、401(认证失败)、403(被禁⽌止)、404(找 不不到内容)
  • 5xx:服务器器错误。如 500(服务器器内部错误)。

Cache 和 Buffer 的区别

Cache 是缓存,为了提升效率速度。
Buffer 是缓冲,上游多生产一些,给下游使用。