美文网首页
为Android开发者普及HTTP基本知识

为Android开发者普及HTTP基本知识

作者: 月枫cc | 来源:发表于2019-06-11 23:05 被阅读0次

    前言

    作为一个Android开发,平时学习的侧重点一直在Android这边,久而久之会发现有些其它方面的基础知识欠缺,导致工作中不可避免的尴尬。

    • 跟后端沟通一些网络接口相关问题,因为Http基础知识欠缺导致总是不理解他们的意图
    • 同事跟你代码合并出现了一些棘手的冲突,或需要回滚版本等问题,开始搜索git命令
    • 项目总是时不时的编译或者依赖出问题,又看不懂报错信息,开始可恨自己的Gradle知识的欠缺。

    经常遇到的这些问题,开始意识到其它相关领域的基础知识要补一补了。

    适合谁看

    我希望你经历过实际开发,有一些使用过Http的经验,但是只停留在最基本的使用,对很多问题一知半解,这篇文章会给你一些帮助,让你明白一些网络编程的原理。

    定义

    HTTP:HyperText Transfer Protocol 超文本传输协议
    所谓超文本,就是对文本的扩展,包括二进制文件等

    基本工作方式

    请求报文

    GET /img/bd_logo1.png HTTP/1.1
    Host: www.baidu.com
    Content-Type: text/plain
    Content-Length: 243
    ......
    
    bodybodybody
    
    • GET /img/bd_logo1.png HTTP/1.1是请求行
    名称 含义
    GET 请求方式(method)
    /img/bd_logo1.png 请求路径(path)
    HTTP/1.1 Http版本
    • 请求行和body中间的内容,格式为xxx:xxx的是Headers,后面会具体介绍
    • body可能有也可能没有,例如POST表单提交就会用到body,GET可能用不到

    响应报文

    HTTP/1.1 200 OK
    Connection: Keep-Alive
    Content-Encoding: gzip
    Content-Length: 984
    Content-Type: image/x-icon
    ......
    
    bodybodybody
    
    
    • HTTP/1.1 200 OK是状态行
    名称 含义
    HTTP/1.1 HTTP版本
    200 状态码(status code)
    OK 状态信息(status message)
    • 状态行和body中间是Headers
    • body中是返回信息,可能是文本,还可能是二进制文件

    Request Method 请求方式

    目前HTTP1.1版本一共4种请求方式,常用的有2种GET和POST

    GET

    为了获取服务器资源,不需要发送body

    GET /img/bd_logo1.png HTTP/1.1
    Host: www.baidu.com
    

    目的是 获取www.baidu.com/img/bd_logo1.png这个图片

    POST

    用于增加或修改服务器资源,携带body

    POST /user HTTP/1.1
    Host: www.baidu.com
    Content-Type: application/x-www-form-urlencoded
    
    name=yuefeng&gender=male
    

    目的是向www.baidu.com/user发送了一串表单数据name=yuefeng&gender=male

    PUT

    用于修改资源,携带body
    目前一般做法都是通过POST完成,知道即可

    DELETE

    用于删除资源,不发送body
    目前一般做法都是通过POST完成,知道即可

    Status Code 状态码(重要)

    这块内容一定要记下,属于网络编程的常识问题

    Status Code 含义
    100 继续发送,一般用于服务器发送大文件
    101 正在切换协议
    200 成功
    301 永久重定向,目标地址在Header中,key是Location
    302 暂时重定向,目标地址在Header中,key是Location
    304 内容无变化
    4xx 4开头表示客户端错误
    400 客户端请求错误
    401 客户端认证失败
    403 客户端被禁止
    404 内容找不到
    5xx 5开头表示服务器内部错误

    Header

    元数据,就是数据的数据;数据的属性;用来描述数据的

    • Host (例如:Host: api.yuefeng.com)
      只出现于Request中
      DNS拿着这个域名,返回一个ip,因为有的公司可能只有一个IP主机,但是却有可能有好几个域名服务
      例如IP是1.1.1.1的主机下存在blog.yuefeng.comapi.yuefeng.com两个服务地址
      所以host可以准确找到具体的服务
    • Content-Length:内容的长度,让服务器知道从开始到哪里结束
    • Content-Type:指定body的类型,可能会是以下几种
      1.text/html html信息
      2.x-www-form-urlencoded:web页面纯文本表单的提交方式,body内容和get的方式一样(name=yuefeng&age=26)
      3.multipart/form-data:web页面含有二进制文件时的提交方式
      4.application/json:json信息
      5.image/jpeg:提交单个图片
    • Transfer-Encoding:chunked
      分块传输
    • Location:重定向的目标URL
    • User-Agent:用户代理
    • Range/Accept-Range
      分段传输,用于断点续传,多线程下载
    • Cache-Control:no-cache、no-store、max-age

    说一下Cache和Buffer在代码中的区别
    cache:这次用过了,一会可能还会再用,降低访问服务器频率
    buffer:提前存下来,一会可能用到(例如视频缓冲)

    相关文章

      网友评论

          本文标题:为Android开发者普及HTTP基本知识

          本文链接:https://www.haomeiwen.com/subject/mjocfctx.html