HTTP的原理和工作机制

概念
  • 两种最直观的印象
    · 浏览器地址栏输入地址,打开网页
    · Android 中发送网络请求,返回对应内容
  • HyperText Transfer Protocol 用于传输超文本的协议.以前是HTML,现在也包括Web API的数据
工作模型
  • 客户端按需求组装HTTP报文,发送给服务器,服务器处理后得到响应报文,发回给客户端,客户端处理响应报文

URL-> HTTP 报文

  • 示例 :http:// xxxxxx.com/users?gender=male
    • http: 协议类型
    • xxxxxx.com (Host 域名服务器主机地址,但是不是用来寻址的)
    • user?gender=male 路径 path
工作方式
  • 示例


    28e2ddbb35101d863cfab0e1aefc092.png
请求格式(报文格式 :Request)
  1. 请求行
  • method :请求方法 GET 、 POST、 PUT、DELETE、HEAD
  • path : 请求路径(给服务器看的,负责定位)
  • HTTP verson :目前大部分用的都是1.1版本
  1. Header
  • Host :服务器主机地址
  • Content-Type :
  • Content-Length: 内容的长度(字节)
  1. Body
  • 要发给服务器的内容
60a42eb46a504bd47ada25db0bd1676.png
返回数据格式 (报文格式 Reponse)
  1. 状态行
  • HTTP version :HTTP 版本
  • status code : 返回请求的状态码,对结果做出类型化描述
    • 1xx: 临时性消息 100 101
    • 2xx: 成功
    • 3xx: 重定向 (301 永久性迁移,需要重新定位 304 内容数据无改变)
    • 4xx: 客户端错误
    • 5xx: 服务端错误
  • status message :返回的状态信息
  1. Header
  • Content-Type
  • cache-control
  • vary
  • etag
  • content-encoding:
  1. Body
    3521b6ba25cde336041ed5b3d01e24c.png
Request method详解
  1. Get
  • 获取资源 : 没有body
    示例 :
             GET/users/1   HTTP/1.1
             Host:api.githup.com
  1. POST
  • 增加或者修改资源: 有body
    示例:
            POST/users/1   HTTP/1.1
            Host:api.githup.com
           
请求体  name =rengwuxian&gender=male    
  1. PUT(有幂等性)
  • 修改资源 : 有Body
  1. DELETE(具有幂等性)
  • 删除资源 : 没有Body

Head

  • 和GET 几乎一样,区别Head 请求后服务求不会返回body,其余都会返回
  1. Header
  • 作用: HTTP消息的元数据(metadata)
  • Host:服务器主机地址

例子 Host :api.githup.com -> "域名主机地址" 不是用来寻址的,在发出请求之前,通过DNS (域名系统)找到IP地址,例如返回IP地址“20.35.”,然后通过IP地址找到目标服务器, 一个域名可以对应多个IP地址,服务器有可能有子服务器,一个服务器下面可能有几个虚拟主机,同样的IP地址下面可能有多个服务器存在,所以还是需要把域名发给服务器,找到你想要的那台主机服务器>

  • Content-Length : 内容的长度(字节)

  • Content-Type :内容的类型

    • text/html: html 文本,用于浏览器页面响应
    示例 :Content-Type: text/html 
    
    • application/x-www-form-urlencoded: (只能传输文本格式的)普通表单,encodedURL格式
      示例:Retrofit 请求添加的header


      813a562b76d1b0c69d72f15572606c9.png

      在post 注解上面添加 注解@FromUrlEncoded 然后传递的参数注解用@Field ->他会把你传的这些参数拼节到boy里面

    • multipart/form-data : 传参注解(@Part “photo” RequestBoay photo)多部分形式,一般用于传输包含二进制内容的多项内容
    • application/json : json 形式,用于Web Api 的响应或者Post / Put 请求
    • image/jpeg :单文件,用于Web Api 响应或者Post /Put 请求
    • application/zip :单文件,用于Web Api 响应或者Post /Put 请求
  • Location : 重定向的目标URL

  • User-Agent : 用户代理

  • Range/Accept-Range:指定Body的内容范围 (当你的目标服务器支持你分段下载的时候可用)

  • Cookie/Set-Cookie :发送Cookie/设置Cookie

  • Authorzation : 授权信息

  • Accept: 授权客服端能接受的数据类型 ,如 text/ html ,application/json

  • Accept-Chartset: 客户端接受的字符集 如 utf-8

  • Accept-Encoding: 客户端接受的压缩编码类型 如 gzip

  • Content-Encoding: 压缩类型 如gzip

  • Cache

    • Cache 和Buffer 区别 : Cache 缓存 Buffer 缓冲
  • Cache-Contorl: no-cache(可以缓存,但是当你再次使用这个资源时需要访问服务器自否是否已经失效了) no-store(不缓存) max-age(订了一个失效日期,在失效日期之前绝对可用)

  • Last-Medified

    • If-Modified-Since
  • Etag

    • If-None-Math
  • Cache-Control:prvate/public

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容