HTTP的原理和工作机制
Http到底是什么
- 两种最直观的印象
- 浏览器地址栏输入地址,打开网页
- Android中发送网络请求,返回对应内容
- HyperText Transfer Protocol超文本传输协议
- 超文本:在电脑中显示的、含有可以指向其他文本的链接的文本 -> HHTML
url->Http报文
报文格式
请求报文
- 请求行: method(get/post) path(用于定位资源) HTTP version
- 请求头header
- 请求体body
响应报文
- 状态行
- 响应头
- 响应体
HTTP的请求方法和状态码
请求方法
- GET
- 获取资源;没有Body(body是用于操作服务器数据用的),具有幂等性
- get请求如果带有body是不规范的(retrofit会抛出异常:Non一body HTTP method cannot contain @Body)
- POST
- 增加或者修改资源;有Body,不具有幂等性
- PUT
- 修改资源;有Body,具有幂等性
- DELETE
- 删除资源; 没有body,具有幂等性
- HEAD
- 与GET大致相同, 不同的是, HEAD请求的响应是没有body的
- 不返回body,但是返回header, 比如下载资源可以先head请求一下,看资源的一些信息然后进行下一步的请求或者其他操作
状态码
作用:对结果做出类型化描述(如「获取成功」「内容未找到」 )
- 1xx:临时性消息
- 100: 接收请求不处理
- 101: 协议切换 如http1.1->http2, http1.1和http2不兼容
- 2xx:成功
- 3xx:重定向
- 301 资源永久迁移
- 302 资源临时迁移
- 4xx:客户端错误,如请求了服务端不存在的资源路径
- 401:未授权,可理解为未登录
- 5xx:服务器错误,说明客户端请求报文没有错误
HTTP的Header和Body
Header
作用: Http消息的元数据(metadara)
①Host:目标主机地址
通过DNS(Domain Name System)地址查询目标主机IP地址
②Content-Type : Body的类型
- text/html : html文本,用于浏览器页面响应
-
- application/x一www一form一urlencoded : 普通表单 ,encoded URL 格式
-
- multipart/form一data :多部分形式,一般用于传输包含二进制内容的多项内容,如文件上传等
-
- application/json : json形式 , 用于Web Api 的响应式 POST /PUT 请求
-
- image/jpeg、application/zip...:单文件,用于Web Api响应或POST/PUT请求
-
- (扩展了解)Chunked Transfer Encoding
-
③Content-Length : Body的长度
④Location : 重定向的目标URL
⑤User-Agent :用户代理
⑥Range/Accept-Range:指定Body的内容范围
范围上限为content-length
⑦Cookie/Set-Cookie
⑧Authorization: 授权信息
⑨Cache
- Cache和Buffer的区别
- Cache-Control: no-cache, no-store max-age
- Last-Modified
- If-Modified-Since
- Etag
- If-None-Match
- Cache-Control: private/public
⑩其他
- Accept:客户端能接受的数据类型。如 text/html
- Accept一Charset:客户端接受的字符集。如utf一8
- Accept一Encoding:客户端接受的压缩编码类型。如gzip
- Content一Encoding:压缩类型。如gzip
Rest
以下为维基百科对Rest的解释
- 什么是REST : A software architectural style that defines a set of constraints to be used for creating Web services
- Client-server architecture CS 客户端-服务器架构
- Statelessness 无状态
- Cacheability 可缓存的
- Layered system 分层系统
- Code on demand 可执行代码(JavaScript等)
- Uniform interface 统一接口
- Resource identification in requests 通过请求就足够对资源进行确认
- Resource manipulation through representations 通过表现形式(客户端发送的数据信息)操作资源
- Self-descriptive messages 自描述的信息
- Hypermedia as the engine of application state (HATEOAS) 超媒体作为应用程序状态的引擎(Rest和Http唯一的区别)
Restful Http
- 正确(规范地)使用http
- 事实上,国内外绝大多数的api并没有真正完全符合Rest