2020-08-23

HTTP协议

通讯格式
请求和响应都是一堆数据,客户端和服务端会按照格式解析
src、href会发请求
在这里插入图片描述

HTTP格式

3部分
一个请求行
多个请求头
一个请求体

请求行
  • 请求方式
  • 请求的资源路径(URL路径后段)
  • 版本号
请求头
  • 请求的服务器地址
  • 浏览器的信息(编码,语言。。)
GET请求
  • url带数据,限制1K内

请求头

在这里插入图片描述

  • 请求头:
    • 都是告诉服务端客户端的信息
    • Host:服务器主机和短裤
    • Accept,客户端支持接收什么数据(什么都接收/图片/网页)
    • Accept-Charset:客户端支持的编码(常见都支持),客户端用支持的编码形式解码,即告诉服务端用什么形式编码。对应,服务端响应也会告诉客户端用什么格式解码
    • Accept-Encoding:支持的压缩格式
    • Accept-Language:客户端的语言环境,不同国家不同语言页面
    • If-modified-since:资源缓存的时间戳,服务器拿这个时间和资源最后一次更新时间对比,时间一样叫客户端去拿缓存。不一样就返回最新资源,相当于版本号
    • referer:防盗链,告诉服务器是从哪个客户端访问过来的(url,包含主机和端口)
    • User-Agent:浏览器软件信息,哪个软件,什么版本
    • Connection:Keep-Alive ,服务器请求完后是保持链接还是关闭
    • Cookie:通过这个头向服务器带数据,存再浏览器中

响应头

在这里插入图片描述
3部分

  • 状态行:3部分–>协议版本,状态码,状态描述msg
  • 消息头:KV,描述服务器和数据信息,告诉客户端怎么处理,可以控制浏览器处理数据的行为(如:直接打开图片还是附件形式下载)
  • 实体内容:
    在这里插入图片描述
    响应头:
    • 告诉浏览器,浏览器有多种,所以响应头会多点,有些头只在部分浏览器起作用,最好都加上,兼容问题
    • Location:300转发时要请求什么链接
    • 服务器的信息:阿帕奇tomcat
    • Content-Encoding:压缩格式,服务器返回的数据压缩了快,指定后浏览器获取数据自动解压
    • Content-Length:返回数据长度
    • Content-Language:浏览器最好用什么语言解析
    • Content-Type:返回的数据类型,服务器返回的都是bit,显示成什么靠类型,application/xml。。
    • Last-Modified:告诉客户端资源的最后修改时间
    • Refresh:通知浏览器多久刷新一次
    • content-disposition:以下载方式打开数据
    • Tranfer-Encoding:数据传送形式
    • set-Cookie:设置Cookie
    • Etag:缓存相关,每个资源生成一个标识符,资源变化了标识符页也变,影响缓存
    • Exprise:资源缓存时间多久,-1或0不缓存,这段时间内不向服务器拿数据,去拿浏览器缓存
    • Cache-Cotroller:no-cache ,也是控制缓存的
    • Prama:no-cache,控制缓存
    • Range:实现断点下载
      在这里插入图片描述
      在这里插入图片描述

数据压缩在这里插入图片描述

IO流

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

掌握3点
  1. 操作字符还是字节
  2. 输入还是输出
  3. 作用的场景是什么(文件,缓冲。。)
重点流
  1. 文件流
  2. 缓冲流
  3. 转换流
  4. 对象流
手动断开流

不要throws IO异常,内存泄漏
在这里插入图片描述

内存泄露和溢出

  1. 内存泄漏:由于某种原因,没有使用的实例对象不能被GC回收,那部分内存没有使用也不能被使用,相当于泄露掉了(比如:物理链接没有关闭)
  2. 内存溢出:内存泄漏多了会导致内存不足,再使用就不够,你申请了10个字节的空间,但是你在这个空间写入11或以上字节的数据,出现溢出。

读取字节的优化–> 读一个字节写一个,改为读了一个字节数组再写
读到字节:读多少取多少,声明len

字节流传输字符不能在内存层面取读,不完整,传输完后大部分软件都会帮忙编解码

缓冲流:包装流,在4个基础实现流上包装(提升效率)
形式:new BufferedInputStream(new FileInputStream());
读写的时候用缓冲流的read(),write()
关闭流:先关包装流,再关其他流(关闭包装流的时候帮你做了)

缓冲的实现,相当于数组的优化,给你一个默认8个字节的数组当缓冲区

缓冲区:满了就刷出,缓冲流有write()自动帮你完成(其他包装流不一定有,要手动

在这里插入图片描述

//方式二:使用String
            String data;
            while((data = br.readLine()) != null){
                //方法一:
//                bw.write(data + "\n");//data中不包含换行符
                //方法二:
                bw.write(data);//data中不包含换行符
                bw.newLine();//提供换行的操作

            }

在这里插入图片描述

编码

  • 都是用10进制编码(最后底层是二进制)
    其他编码都兼容ASCII,一个字节表示字母
    unicode两个字节是两个ASCLL的字母还是一个字呢,开头0/1表示,少了一位,而且很多一个字节就能表示的都用两个字节,浪费
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

UTF-8

变长的编码方式,基本的所有字符1-4个字符表示(中文3个字符表示)
最新修正可以扩展到6个字符
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值