HTTP

204 阅读3分钟

HTTP的原理和工作机制

Http到底是什么

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

url->Http报文

1 2

报文格式

请求报文

  • 请求行: method(get/post) path(用于定位资源) HTTP version
  • 请求头header
  • 请求体body 3

响应报文

  • 状态行
  • 响应头
  • 响应体 4

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文本,用于浏览器页面响应
    • 6
  • application/x一www一form一urlencoded : 普通表单 ,encoded URL 格式
    • 5
  • multipart/form一data :多部分形式,一般用于传输包含二进制内容的多项内容,如文件上传等
    • 7
  • application/json : json形式 , 用于Web Api 的响应式 POST /PUT 请求
    • 8
  • image/jpeg、application/zip...:单文件,用于Web Api响应或POST/PUT请求
    • 9
  • (扩展了解)Chunked Transfer Encoding
    • 10

③Content-Length : Body的长度

④Location : 重定向的目标URL

⑤User-Agent :用户代理

Android扩展UA 浏览器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