HTTP和Ajax-0320

88 阅读4分钟

前后端数据交互

1-1 初识前后端通信

  1. 前后端通信是什么
  • 前后端数据交互的过程
  • 浏览器和服务器之间数据交互的过程
  1. 后端向前端发送数据
  • 访问页面
  1. 前端向后端发送数据
  • 用户注册

1-2 前后端通信的过程与概念解释

1.前后端通信的过程

  • 前后端通信是在请求-响应中完成的
  1. 概念及解释
  • 前端
  • 浏览器端
  • 客户端:只要能和服务器通信的就叫客户端
  • 后端:服务器端

1-3 前后端的通信方式

    <a href="www.baidu.com">百度</a>
    <form action="https://www.imooc.com" method="post">
        <input type="text" name="username">
        <input type="password" name="password">
        <input type="submit" value="登录">
    </form>
    <script>
        // 1.使用浏览器访问网页
        // 浏览器地址栏输入网址 按下回车

        // 2.HTML标签
        // link/img/script
        // 浏览器在解析HTML标签的时候遇到一些特殊标签 会再次向服务器发送请求
        // 还有一些标签 浏览器解析的时候 不会向服务器发送请求 但是用户可以使用他们向服务器发送请求
        // a/form
    </script>

HTTP协议

2-1 初识HTTP

  • http是什么
  • 超文本传输协议 HyperText Transter Protocol
  • 超文本:原先一个个单一的文本 通过超链接将其联系起来 由原先的单一的文本变成了可无限延伸 扩展的超文本 立体文本
  • http请求响应的过程 image.png

2-2 HTTP报文

  1. http报文是什么
  • 浏览器向服务器发送请求时 请求本身就是信息叫请求报文
  • 服务器向浏览器发送响应时传输的信息叫响应报文 2.HTTP报文格式 请求 请求头(起始行+首部) 请求体 (Get请求没有请求体) 响应 响应头(起始行+首部) 响应体

2-3 HTTP方法

        // 1.常用的http方法
        // 浏览器发送请求时采用的方法 和响应无关

        // GET POST PUT DELETE
        // 用来定义对资源采取什么样的操作的 有各自的语义

        // get获取数据
        // 获取资源(文件)

        // post创建数据
        // 注册

        // put修改数据
        // 修改密码 个人信息

        // delete删除数据
        // 删除一条评论
        // 增删改查

        //这些方法虽然有各自的语义 但并不是强制的

        // 3.RESTful接口设计
        // 一种接口设计风格 充分利用http语义
        // 通过id获取用户信息 使用GET方法
        // https://www.imooc.com/getUser?id=1
        // GET
        // https://www.imooc.com/getUser?id=1   

        // 注册新用户 使用post方法
        // https://www.imooc.com/api/http/addUser
        // POST
        // https://www.imooc.com/api/http/addUser

2-4 GET和POST方法的对比

        // 1.语义
        // GET 获取数据
        // POST 创建数据

        // 2.发送数据
        // GET通过地址在请求头中携带数据
        // 能携带的数据量和地址的长度有关系 一般最多就几K

        // POST既可以通过地址在请求头中携带数据 也可以通过请求体携带数据
        // 能携带的数据量理论上是无限的

        // 携带少量数据 可以使用GET请求 大量的数据可以使用POST请求
        // 3.缓存
        // GET可以被缓存 POST不会被缓存

        // 4.安全性
        // GET和POST都不安全
        // 发送密码或其他敏感信息时不要使用GET 主要是避免直接被他人窥屏或通过历史记录找到你的密码

2-5 HTTP状态码

1.http状态码是什么?

  • 定义服务器对请求头的处理结果 是服务器返回的 2.http状态码的定义 100-199 代表请求已被接受 需要继续处理 200-299 成功 300-399 重定向 www.imooc.com www.imooc.com

301 Moved Permanently 永久性重定向 302 Move Temporaily 临时性重定向 304 NOT Modified 没有修改 400-499 404 Not Found 500-599 服务器错误 500 internal server error

Cookie

3-1 初识cookie

        // 1.cookie是什么
        // cookie全称http cookie 简称cookie
        // 是浏览器存储数据的一种方式
        // 因为存储在用户本地 而不是存储在服务器上 是本地存储
        // 一般会随着浏览器每次请求发送到服务器上

        // 2.cookie有什么用
        // 利用cookie跟踪统计用户访问该网站的习惯 比如什么时间访问 访问了哪些页面 在每个网页的停留时间等

        // 3.浏览器中操作cookie
        // 不要在cookie保存密码或敏感信息

3-2 Cookie的基本用法

        // 写入cookie
        // document.cookie = `username=ZS`
        // document.cookie = `age=18`

        // document.cookie = `username=ZS; age=18`
        
        // 2.读取cookie
        console.log(document.cookie);
        // 读取的是一个由名值对构成的字符串 每个名值对之间 由`;`(一个分号一个空格)隔开
        // username='zs'; age=18

3-3 Cooike的属性

<script>
        // 1.Cookie的名称 (name)和值(value)
        // 最重要的两个属性 创建Cookie时必须填写 其他属性可以使用默认值

        // Cookie的名称或值如果包含非英文字母 则写入时需要使用encodeURIComponent()编码 读取时使用
        // decodeURIComponent()解码
        document.cookie=`username=${encodeURIComponent('张三')}`
        document.cookie=`${encodeURIComponent('用户名')}=${encodeURIComponent('张三')}`
        // 一般名称使用英文字母 不要用中文 值可以用中文 但是要编码

        // 2.失效(到期)时间
        // 对于失效的Cookie会被浏览器清除
        // 如果没有设置失效(到期)时间 这样的Cooike称为会话Cookie
        // 它在内存中 当会话结束 也就是浏览器关闭时 Cookie消失
        // expires
        // 值是日期类型
        // document.cookie=`username=alex; expires=${new Date(
        //     `2100-1-01 00:00:00`
        // )}`

        // max-age
        // 值为数字 表示当前时间+多少秒后过期 单位是秒
        // document.cookie = `username=alex; max-age=5`
        // document.cookie = `username=alex; max-age=${24 * 3600 *30}`

        // 如果max-age的值是负数或0,cookie会被删除
        // document.cookie = `username=alex; max-age=0`
        
        // 3.Domain域
        // Domain限制了访问cookie的范围
        // document.cookie = `username=alex; domain=www.imcooc.com`

        // www.imcooc.com m.imcooc.com
        // 父域:.imcooc.com

        // 4.path 路径
        // path限定了访问cookie的范围(同一域名下)
        // 使用JS只能读写当前路径和上级路径的cookie 无法读写下级路径的cookie
        // document.cookie = `username=alex; path='course/list'`

        // 当name domain path属性都相同时才是同一个cookie

        // httpOnly
        // 设置了httpONLY属性的cookie不能通过JS去访问

        // secure
        // secure限定了只有在使用https而不是http的情况下才可以发送给服务端

        // domain path secure都要满足条件 还不能过期的cookie才能随着请求发送到服务器端
    </script>

3-4 cookie的封装

// 写入cookie
const set = (name,value,{maxAge,domain,path,secure}={})=>{
    let cookieText = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;
    if(typeof maxAge==='number'){
        cookieText+=`; max-age=${maxAge}`
    }
    if(domain){
        cookieText+=`; domain=${domain}`
    }
    if(path){
        cookieText+=`; path=${path}`
    }
    if(secure){
        cookieText+=`; secure=${secure}`
    }
    document.cookie = cookieText
}
// 通过name属性获取cookie的值
const get = name=>{
    name=`${encodeURIComponent(name)}`

    const cookies= document.cookie.split('; ');
    for(const item of cookies){
        const [cookieName,cookieValue] = item.split('=');
        if(cookieName===name){
            return decodeURIComponent(cookieValue)
        }
    }
    return
}

// 根据name domain path删除cookie
const remove =(name,{domain,path}={})=>{
    set(name,'',{domain,path,maxAge:-1})
}
export {set,get,remove}

3-5 Cookie的注意事项

1.前后端都可以创建cookie 2.cookie有数量限制

  • 每个域名下的cookie数量有限
  • 当超过单个域名限制后 再设置cookie 浏览器就会清除以前设置的cookie 3.cookie有大小限制
  • 每个cookie的存储容量很小 最多只有4kb左右

localstorage

4-1 初识localstorage

  • localstorage是什么
  • localstorage也是一种浏览器存储数据的方式(本地存储)它只是存储在本地 不会发送到服务器端
        // 单个域名下的localstorage总大小有限制
        // 在浏览器中操作localstorage
        // localstorage的基本用法
        // console.log(localStorage);

        localStorage.setItem("username",'alex')
        localStorage.setItem("username",'zs')
        localStorage.setItem("age",18)
        localStorage.setItem("sex",'male')
        // length
        console.log(localStorage.length);
        // getItem()
        console.log(localStorage.getItem('username'));
        console.log(localStorage.getItem('sex'));
        console.log(localStorage.getItem('age'));
        // removeItem()
        localStorage.removeItem('username')
        localStorage.removeItem('age')
        // 删除不存在的key不报错
        localStorage.removeItem('aa')
        // clear()清除
        localStorage.clear()
        // 获取不存在的返回null
        console.log(localStorage);

4-2 使用localstorage实现自动填充

    <form action="https://www.imooc.com" method="post" id="login">
        <input type="text" name="username">
        <input type="password" name="password">
        <input type="submit" value="登录" id="btn">
    </form>
    <script>
        // 使用localstorage实现自动填充
        const loginForm = document.getElementById('login')
        const btn = document.getElementById('btn')
        const username = localStorage.getItem('username')
        if(username){
            loginForm.username.value = username
        }
        btn.addEventListener('click',e=>{
            e.preventDefault()
            localStorage.setItem('username',loginForm.username.value);
            loginForm.submit()
        })
    </script>

4-3 localstorage的注意事项

1.localstorage的存储期限 localstorage是持久化的本地存储 除非手动清除 (比如通过JS删除或者清除浏览器清除缓存)否则数据是永远不会过期的

sessionStorage 当会话关闭(比如关闭浏览器)的时候 sessionStorage中的数据会被清空 sessionStorage.setItem('username','alex'); console.log(sessionStorage.getItem('username')); sessionStorage.removeItem('username') sessionStorage.clear()

localStorage键和值的类型 localstorage存储的键和值只能是字符串类型 不是字符串类型也会转换为字符串类型再存进去 localStorage.setItem({},18) console.log(typeof localStorage.getItem('[object Object]'),localStorage.getItem('[object Object]')); console.log({}.toString()); 3.不同域名下能否共用localstorage 不同域名不能共用localstorage的

4,localstorage的兼容性 IE7以下版本不兼容localstorage