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

压缩和解压缩

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

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

  • 常见压缩算法: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)
    • 证书信息补全,缺乏证书机构信息
    • 手机操作系统较旧,没有安装新加入的根证书
  • 如何处理:
    • 手写验证过程
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Web 页面的实现 Web 基于 HTTP 协议通信 客户端(Client)的 Web 浏览器从 Web 服务器端...
    毛圈阅读 4,897评论 0 2
  • 网络基础知识 URL和URI URI(Uniform Resource Idenifier)统一资源标识符。即由某...
    d9fc24a0c9a9阅读 4,855评论 0 6
  • 五、与HTTP协作的web服务器 HTTP/1.1 规范允许一台HTTP服务器搭建多个web站点,即在相同IP地址...
    BeckJiang阅读 3,535评论 0 2
  • HTTP初识 HTTP协议是超文本传输协议(Hyper Text Transfer Protocol)的缩写,是用...
    THQ的简书阅读 4,189评论 0 1
  • 投射:1投射盧鋒會留9天贏錢打600萬業績!2投射執到大客打3000分!3投射會有勁多大客點來爆數業績!感恩:1感...
    謝奕鋒阅读 721评论 0 0