HTTP是什么?
Hypertext Transfer Protocol,超文本传输协议,一种在网络上通过报文传输 HTML 内容的协议。
HTTP是怎么工作的?
桌面浏览器
用户输入地址后回车或者点击链接 -> 浏览器拼接HTTP报文并发送请求给服务器 -> 服务器处理请求后发送响应报文给浏览器 -> 浏览器解析响应报文并使用渲染引擎显示到屏幕上
手机APP
用户点击触发联网请求 -> Android 程序调用拼接 HTTP 报文并发送请求给服务器 -> 服务器处理请求后发送响应报文给手机 -> Android 程序处理响应报文并做出相应处理(如存储数据、显示数据到屏幕上等)
HTTP 报文格式
-
请求报文
请求报文由请求行、Headers、Body三个部分构成。
GET /users HTTP/1.1 Host: api.baidu.com Content-Type: text/plain Content-Length: xx xxxxxx....第一行对应请求行:
GET是请求方法、/users是资源路径、HTTP/1.1是 HTTP 版本。2-4行对应 Headers,用于表示当前请求的报文属性。5行对应 Body , Body 可以有多行也可以没有,内容长度由Content-Length指定。 -
响应报文
响应报文由状态行、Headers、Body构成。
HTTP/1.1 200 OK Content-Type: application/json Content-Encoding: gzip xxxxx响应报文与请求报文区别在于第一行,响应报文第一行对应状态行,
HTTP/1.1对应 HTTP 版本,200是状态码(状态码对应含义下文有说明),OK是状态对应的消息。响应报文 Headers 和 Body 与请求报文基本一致。
HTTP 请求方法及常见状态码
常见请求方法
- GET
- 用于获取资源
- 对服务器数据不修改
- 无 Body 内容
- POST
- 用于增加或者修改资源
- 发送给服务器的数据存在 Body 中
- PUT
- 用于修改资源
- 发送给服务器的数据存在 Body 中
- DELETE
- 用于删除资源
- 无 Body 内容
- HEAD
- 与 GET 基本一样,用于获取资源,对服务器内容不修改,无 Body
- 与 Get 唯一区别在于,HEAD 返回的响应报文中无 Body
常见状态码
- 1XX 临时性消息
- 100 继续发送
- 101 正在切换协议
- 2XX Success 标识
- 200 OK
- 201 创建成功
- 3XX 资源重定向
- 301 资源永久移动
- 302 资源暂时移动
- 4XX 客户端错误
- 客户端请求错误
- 401 认证失败
- 404 资源未找到
- 5XX 服务器错误
- 500 服务器内部错误
HTTP 报文常见 Headers
Header
Header 是 HTTP 消息的元数据(metadata),最重要的三个 Header:Host、Content-Length、Content-Type。
-
Host
- 目标主机。此处的目标主机是指目标服务器上用于定位资源的子服务器。
-
Content-Length
- 指定 Body 的长度,单位字节。
-
Content-Type
-
用于指定 Body 数据的类型。常见有以下几类。
-
text/html
请求 Web 页面是返回响应的类型, Body 中返回 html 文本。
-
application/x-www-form-urlencoded
Web 页面纯文本表单的提交方式。
-
multipart/form-data
Web 页面有二进制文件时的提交方式。
-
application/json
请求报文中提交 json。
-
Image/jpeg
请求报文中提交二进制 jpeg 数据。
-
-
-
Transfer: chunked
分块传输、常用于断点续传和多线程下载场景。
-
Location
指定重定向的目标资源。
-
User-Agent
用户代理,表示客户端来源,可根据此判断网页渲染方式(如手机端、PC端)
-
Range/Accept-Ranges
数据范围。
-
Cookie
存储于客户端的,用于在服务器端快速鉴定身份的“ id card ”。
-
Authorization
登录授权。
-
Cache
在客户端或者中间网络节点缓存数据,降低从服务器取数据的频率,以提高网络性能。