HTTP学习笔记

HTTP

  • HyperText Transfer Portocol 超文本传输协议
    • 超文本:在电脑中,显示的含有可以指向其他文本链接的文本

HTTP的工作方式

  • 浏览器–>发送请求–>服务器
    GET/HTTP/1.1
    Host:····.com

  • 服务器–>响应–>浏览器
    HTTP/1.1 200 OK
    Server:nginx/1.13.1
    Date:Sun,0,…

URL—>HTTP报文

  • 示例:http://space.bilibili.comsp/56285643
    https: 协议类型
    space.bilibili.com:服务器地址
    56285643: 路径
    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
  • GET/56285643 HTTP/1.1
    Host:space.bilibili.comsp
  • 报文格式:Request
      GET/Users HTTP?1.1 //请求行
      Host:api.githu.com                 //headers    
      Content-Type: text/plain           //headers    
      Content-Length:243                //headers   
      ...                                       //body
    
  • 报文格式:Response
HTTP/1.1 200 OK //状态行
//请求头
Content-type:application/json;charset=UTF-8 //headers
Cache-control:public,max-age=60,S-maxage=60
vary:Accept,Accept-Encoding
etag:w/“02eec5b33460”
Content-encoding:g-zip
//Body
[{
    .......
}]

Request Methods

  • Get
    获取资源,无Body
  • Post
    增加或者修改资源;Body
  • Put
    修改资源;有Body
  • DELETE
    删除资源;无Body
  • HEAD
    获取信息;如下载文件的大小;服务器不返回Body
    Get/Put/DELETE具有幂等性

Status Code 状态码

  • 1xx: 临时性消息
    101:支持HTTP2.0
    100:未完成
  • 2XX:成功
  • 3XX:重定向
    301:永久迁移
    302:临时迁移
    304:内容无改变
  • 4XX:客户端错误
  • 5XX:服务器错误

Header 请求头

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

    • Host:服务器的主机地址 虚拟主机
    • Content-Type/Content-Length: Body的类型/长度
      • Content-Length:内容的长度(字节)
      • Content-Type:
        • 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响应或者put/post请求

    Chunked Transfer Encoding

  • Transfer-Encoding:chunked
    表示Body长度无法确定,Content-Length不能使用
    Body格式:
    <length>
    <data1>
    <length2>
    <date2>
    ......
    0
    
    

0加换行

最后传输0表示内容结束

  • Location:重定向的目标URL
  • User-Agent:用户代理
  • Range/Accept-Range:指定Body内容范围
  • Cookie/Set-Cookie:发送/设置 Cookie
  • Authorization:授权信息
  • Accept:客户端可接受的数据类型:如text/html
  • Accept-charset:客户端接收的字符集:如 UTF-8
  • Accept-Encoding:客户端接收的压缩类型编码。如gzip
  • Conetent-Encoding:压缩类型:如gzip

Cache 缓存

  • Cache和Butter的区别?
  • Cache-Control:
    • no-cache: 缓存,使用前询问
    • no-store:不缓存
    • max-age:指定日期
  • Last-Modified:
    • If-Modified-since
  • ETag: If-None-Match
  • Cache-Control:private/public 个性信息/公共信息

REST

  • 什么是REST
    一种架构风格对HTTP加以限制
  • Sever-Client architecture CS架构
  • StateLessness 无状态
  • Cacheablility 可缓存
  • Layered System 分层的服务器集群对客户端透明
  • Code on demand 服务器返回包含可执行代码
  • Uniform interface
    • Resource identication in requests
    • Resource manipulation through representation
    • self-descriptive messages
    • Hypermedia as engine of application state(HATEOAS)

RESTFUL HTTP

  • 正确的使用Http

编码,加密,Hash

加密

  • 对称加密
    • 原理:使用密钥和加密算法对数据进行转换,得到的无意义的数据即为密文。使用密钥和解密算法对密文进行逆向转换,得到原数据。
    • 经典算法:AES DES
  • 非对称加密
    • 原理使用公钥对数据进行加密得到密文,使用私钥对数据解密得到原数据
    • 经典算法:RSA DSA
    • 衍生用途:数字签名
      原数据—加密算法+加密密钥===>密文—加密算法+解密密钥===>原数据
  • 密钥(key)
    • 场景:用于加密和解密
    • 目的:保证数据被人截取时不被人读懂
    • 焦点:数据
  • 密码(pasword)
    • 场景:用户进入网站或者游戏的身份验证
    • 目的:数据提供方或者应用服务方对账户拥有者的数据的保护,保证你是你的时候提供权限
    • 焦点:身份

Base64

  • 将二进制数据转化为64个字符组成的字符串的编码算法
  • 用途:让原数据拥有字符串所拥有的特性,如可以放在URL中传播,可以保存到文本文件,可以通过普通聊天软件进行文本传输。
  • 可以将人眼可读的字符串变为读不懂的字符串,降低窥视危险

URL Encoding

  • 将URL中的保留字符使用百分号”%“进行编码(”+“,”/“,"&"等)
  • 消除歧义避免解析错误
    • 例: http://spica.com/user/?name=我&你
      👇
      http://spica.com/user/?name=我&26你

压缩和解压缩

  • 压缩:把数据换一种方式来存储,减少存储空间

  • 解压缩:把压缩后的数据还原为原先的形式,以便使用

  • 常见压缩算法:DEFLATE,JPEG,MP3

  • 压缩属于编码吗?

    • 编码五官方定义
    • 压缩属于编码
  • 媒体数据的编码解码

    • 图片的编码:把图像数据写成JPG,PNG,等文件的编码格式
    • 图片的解码:把JPG,PNG等文件的数据解析为标准的图像数据

    序列化

    • 把数据对象(一般为内存中的,例如JVM对象)转换为字节序列的过程
    • 目的:让内存中的对象可以被存储和传输

    Hash

    • 把任意数据转化为指定大小范围(通常很小的计算)
    • 作用:摘要,数字指纹
    • 经典算法:MD5,SHA1,SH256等等
    • 实际用途:数据完整性验证,快速查找:hashCode()和HashMap()

登录和授权

  • Cookie
  • Authorization

Cookie

  • 起源:购物车

  • 工作机制:

    1. 客户端----->服务器
      Post/cart HTTP/1.1
      Host:shop.com
      Cookie:cart="apple=1 " banana=1
    2. 服务器---->客户端
      HTTP/1.1 200 ok
      set-Cookie:Cart=”apple=1&banana=1“
    3. 客户端
      shop.com:
      cart:“apple=1&banana=1”
  • Cookie的作用:

    • 会话管理:购物车,登录状态等等
    • 使用Cookie管理登录状态
    • 个性化
    • 分析用户行为
  • Xss(cross-site scrpting):HTTP only 跨站脚本攻击

    • Set-Cookie:Sessionid=123;Http Only 使Cookie对本地脚本不可见
  • XSRF(cross-site request forgery ):Referer:跨站请求伪造
    利用之前登录留下的Cookie实现无登录转账

Authorization

  • Authorization: Basic<Username:passwor(base64)>
  • Authorization: Bearer<bearer token>
    • OAuth2
    • 微信登录

TCP/IP协议簇

  • 一系列模型组成的网络模型分层
  • 为什么要分层:因为网络不稳定
  • 具体分层:
    • 应用层:HTTP,FTP,DNS
    • 传输层:TCP,UDP
    • 网络层:IP
    • 数据链路层:以太网,WIFI
  • TCP连接
    • 三次握手…
  • 长连接:
    • 实现方式:心跳
      在类小区网络环境下,防止长时间不连接端口关闭

HTTPS

  • HTTP OVER SSL
  • SSL:Secure Socket Layer====>TLS:Transport Layer Secure
  • 定义:在HTTP下增加一个安全层,用于保障HTTP的加密传输
  • 本质:在客户端和服务器之间协商出一套对称密钥,每次发送信息之间将内容加密,收到之后在进行解密,达到内容加密传输

HTTP 连接

  1. 客户端请求建立TLS连接
  2. 服务器发回证明
  3. 客户端验证服务器证书
  4. 客户端信任服务器之后,和服务器协商对称密钥
  5. 使用对称密钥开始通信

在Android中使用

  • 正常情况下,直接使用
  • 什么时候不行:
    • 用的自签名证书(例如用于内网的Https)
    • 证书信息补全,缺乏证书机构信息
    • 手机操作系统较旧,没有安装新加入的根证书
  • 如何处理:
    • 手写验证过程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值