Android开发知识

文章目录

  • HTTP
    • HTTP到底是什么
    • HTTP的工作方式
    • URL ->HTTP报文
    • List item
    • HTTP的工作方式
    • 请求报文格式:Request
    • 响应报文格式:Response
    • HTTP的请求方法
    • 状态码
    • Header
    • Host
    • Content-Type
    • Content-Length
    • Transfer: chunked (分块传输编码 ChunkedTransfer Encoding)
    • Location
    • User-Agent
    • Range / Accept-Range
    • 其他 Headers
    • Cache
    • REST

HTTP

HTTP到底是什么

  • 两种直观印象
    • 浏览器地址输入地址,打开网页
    • Android中发送网络请求,返回对应内容
  • Hyper Text Transfer Protocol超文本传输协议
    • 超文本:在电脑中显示的、含有可以指向其他文本的链接的文本 ——HTML

HTTP的工作方式

发送请求
响应
浏览器
服务器

URL ->HTTP报文

  • List item

HTTP的工作方式

发送请求
响应
APP
服务器

请求报文格式:Request

Android开发知识_第1张图片

响应报文格式:Response

Android开发知识_第2张图片

HTTP的请求方法

  • GET
    • 获取资源,没有body
GET /users/1 HTTP/1.1
Host: api.github.com
  • POST
    • 增加或修改资源,有body
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
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
name=rengwuxian&gender=male
  • DELETE
    • 删除资源,没有body
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
name=rengwuxian&gender=male
  • HEAD
    • 和 GET 使用方法完全相同
    • 和 GET 唯一区别在于,返回的响应中没有 Body

状态码

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

Header

  • 作用:HTTP消息的元数据(metadata)

Host

目标主机地址

Content-Type

指定 Body 的类型。主要有四类:

  1. text/html
    HTML文本,用于浏览器页面响应

请求 Web ⻚面是返回响应的类型,Body 中返回 html 文本。格式如下:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 853
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
......
  1. x-www-form-urlencoded
    普通表单。encodeed URL格式
    Web ⻚面纯文本表单的提交方式。
    Android开发知识_第3张图片
    格式如下:
POST /users HTTP/1.1
Host: api.github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
name=rengwuxian&gender=male
  1. multipart/form-data
    多部分形式,一般用于传输包含二进制内容的多项内容
    Web ⻚面含有二进制文件时的提交方式。
    Android开发知识_第4张图片
    格式如下:
POST /users HTTP/1.1
Host: hencoder.com
Content-Type: multipart/form-data; boundary=----
WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Length: 2382

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="name"

rengwuxian
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="avatar";
filename="avatar.jpg"
Content-Type: image/jpeg

JFIFHHvOwX9jximQrWa......
------WebKitFormBoundary7MA4YWxkTrZu0gW--
  1. application/json , image/jpeg , application/zip …
    JSON形式,用于Web Api的响应或POST/PUT的请求
    单项内容(文本或非文本都可以),用于 Web Api 的响应或者 POST / PUT 的请求

请求中提交 JSON

POST /users HTTP/1.1
Host: hencoder.com
Content-Type: application/json; charset=utf-8
Content-Length: 38

{"name":"rengwuxian","gender":"male"}

响应中返回JSON

HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
content-length: 234
[{"login":"mojombo","id":1,"node_id":"MDQ6VXNl
cjE=","avatar_url":"https://avatars0.githubuse
rcontent.com/u/1?v=4","gravat......

请求中提交二进制内容

POST /user/1/avatar HTTP/1.1
Host: hencoder.com
Content-Type: image/jpeg
Content-Length: 1575

JFIFHH9......

响应中返回二进制的内容

HTTP/1.1 200 OK
content-type: image/jpeg
content-length: 1575

JFIFHH9......
  1. image/jpeg/application/zip
    单文件,用于Web Api响应或POST/PUT请求

Content-Length

指定 Body 的⻓度(字节)。

Transfer: chunked (分块传输编码 ChunkedTransfer Encoding)

用于当响应发起时,内容⻓度还没能确定的情况下。和 Content-Length 不同时使用。用途是尽早给出响应,减少用户等待。
格式

HTTP/1.1 200 OK
Content-Type: text/html
Transfer-Encoding: chunked

4
Chun
9
ked Trans
12
fer Encoding
0

Location

指定重定向的目标 URL

User-Agent

用户代理(客户端),即是谁实际发送请求、接受响应的,例如手机浏览器、某款手机 App。

Range / Accept-Range

指定body的内容范围
按范围取数据
Accept-Range: bytes 响应报文中出现,表示服务器支持按字节来取范围数据
Range: bytes=- 请求报文中出现,表示要取哪段数据
Content-Range:-/total 响应报文中出现,表示发送的是哪段
数据
作用:断点续传、多线程下载。

其他 Headers

  • Accept: 客户端能接受的数据类型。如 text/html
  • Accept-Charset: 客户端接受的字符集。如 utf-8
  • Accept-Encoding: 客户端接受的压缩编码类型。如 gzip
  • Content-Encoding:压缩类型。如 gzip

Cache

作用:在客户端或中间网络节点缓存数据,降低从服务器取数据的频率,以提高网络性能。

REST

REST 的定义众说纷纭,没有统一答案。
扔物线的观点:REST HTTP 即正确使用 HTTP。包括:

  • 使用资源的格式来定义 URL
  • 规范地使用 method 来定义网络请求操作
  • 规范地使用 status code 来表示响应状态
  • 其他符合 HTTP 规范的设计准则

你可能感兴趣的:(android)