http协议 请求报文响应报文 json字符串 cookie get cookie set cookie

http协议

<body>
http协议,我们主要是了解概念性的内容,实际项目中,我们暂时用不上

主要是为了应付面试等
复杂项目阶段,有可能会配合框架,使用一些http协议内容

什么是http协议,是做什么用的

所谓的http协议,是网络传输中,需要遵守的协议规范

例如,所谓的5G,也是一种传输规范协议,
5G 应用的是无线传输协议
http 是网络传输协议,在网络传输中,都要遵守的规范规则

通过http协议,完成网络传输中的 请求 响应 两部分的内容

在发送请求之前,必须要先确定的内容 --- 3次握手机制
    客户端: 1,客户端必须要能正常的发送消息
            2,客户端必须要能正常的接收消息
            3,服务器端必须要能正常的发送消息
            4,服务器端必须要能正常的接收消息

    服务器: 1,服务器端必须要能正常的发送消息
            2,服务器端必须要能正常的接收消息
            3,客户端必须要能正常的发送消息
            4,客户端必须要能正常的接收消息

所谓的3次握手,是在从客户端向服务器端发送请求之前,彼此相互做的确认
    http通过 TCP/IP协议,完成三次握手

    第一次握手:客户端向服务器发送一个消息
        客户端 : 确定客户端可以发送消息
        服务器 : 确定客户端可以发送消息
                 确定服务器能接收消息

    第二次握手:服务器给客户端,返回一个消息
        客户端 : 确定客户端可以接收消息
                 确定服务器可以接收消息
                 确定服务器可以发送消息
        服务器 : 确定服务器可以发送消息
    
    第三次握手:客户端给服务器发送请求
        服务器 : 确定客户端可以接收消息 

通过3次握手,确保,服务器和客户端,接收发送消息都正常,才可以发送真正的请求



2,中断请求,结束访问,断开连接 --- 4次挥手
    确定 客户端和服务器都不再发送消息了
    通过 TCP/IP 协议完成4次挥手

    第一次挥手
        客户端向服务器发送一个请求
            告诉服务器,客户端要断开和服务器的连接

    第二次挥手
        服务器向客户端发送一个响应
            告诉客户端,服务器知道客户端要断开连接
                      并且服务器也要不再发送消息了
    
    第三次挥手
        服务器再次向客户端发送一个响应
            告诉客户端,这是最后一条消息,之后服务器就不会再发送消息了
            但是,服务器可以随时 接收消息,请求 

    第四次挥手
        客户端向服务器发送一个请求
            告诉服务器,客户端知道服务器不再发送消息了
            客户端,也不再接收消息了,但是会随时再发送消息给服务器


总结:
    3次握手,是为了确保服务器和客户端,接收发送消息都正常,才能正常的建立链接
    4次挥手,是为了确保服务器和客户端,都不再与对方发送消息,才能正常的断开链接,建立新的链接


</body>
</html>

请求报文响应报文

<body>
请求报文和响应报文

请求报文:是客户端向服务器发送请求时,生成请求文件,称为请求报文

请求报文由4部分组成:
    请求行,请求头,请求空行,请求体

在 控制台中 Network 中 有请求报文的相关内容

    请求行: 请求的地址 包括3部分内容
    
        请求方式: get / post
        请求地址: http://127.0.0.1/nz2002/week7_day02/02_login_demo/02_login.php
        传输协议: HTTP/1.1

    请求头:
        由多个部分组成的
        host : 主机域名
        User-agent : 发起请求的客户端版本,包括客户端系统,浏览器信息等
        Accept : 客户端希望服务器返回的数据信息格式
        Referer : 发起请求的文件来源
        content-type : 本次请求参数数据的格式
        .....

    请求空行:
        在浏览器控制台中,无法显示
        只存在于 http协议 的 源代码中 存在
    
        浏览器控制台Network,只是浏览器显示相应报文的方式
        很多内容,会与 http协议源代码内容不相同

    请求体:
        get : 没有请求体
              参数是显示在地址栏中

        post : 有请求体
               请求体内容就是传参的参数

    get和post请求方式的区别:
        1,get方式,称为显性传参,传参参数会记录在地址栏中
                  传输数据内容,大小有限
                  一般用于向数据库进行查询操作

        2,post方式,称为隐性传参,传参参数,不会显示在地址栏中
                  会记录在请求体中
                  传输数据内容,比较大
                  一般用于向数据库执行写入操作

响应报文:包含三个部分
    响应行  响应头  响应体

    响应行: HTTP/1.1 200 OK
        协议版本       HTTP/1.1
        响应的状态码   200
        响应状态的描述 OK 成功

    响应头:
        Date    : 服务器时间,与中国时区时差 -8小时
        Server  : 由哪个服务器来响应你的数据信息
        content-length : 返回响应体的长度
        content-type   : 返回响应体的数据类型

    响应体:
        就是发送请求之后,服务器端,执行的输出结果
        也就是PHP程序 echo var_dump()  print_r() 等输出的内容
        也就是 response 中显示的内容,就是响应体

常见请求方式

  常见的请求方式
            GET  :
                存储在浏览器地址栏中
                用于搜索查询数据使用,百度搜索
                由于存储在地址栏中,存储数据大小受浏览器设定限制只能存储很少的内容
                会被浏览器自动缓存存储
                会显示在地址栏中,不安全
            POST
                存储在请求体中
                向数据库写入数据(注册),发送敏感信息(账号密码)
                理论
                上可以无限存储,但是收到服务器限制
                不会被浏览器自动缓存存储
                不会显示在地址栏中,比get稍微安全点

        其他的请求方式:
            本质上,还是POST方式请求,只是带有语义化
            div  nav  header 等标签,效果都是想用的,只是 nav 等有语义化
            实际项目中,基本使用的就是 get 和 post 两种方式

json字符串

        专门用于数据交互时使用的一种特殊的字符串

        不同计算语言,相同的数据类型,语法可能不同,需要将所有的计算机语言的数据内容
        转化为相同的格式,便于数据交互
        计算机程序,接收到json字符串之后,再转化为当前计算机语言可以支持的数据类型

        人族        精灵族        矮人族          亡灵 
        你好         fdas         2133         看301789

        相同的内容,不同的种族,不同的语言,内容并不同

        都转化为 世界通用语   阿里巴巴  所有种族所有语言都明白是表示你好

        不同的种族,接收的是 阿里巴巴(json串) 再翻译成自己种族的语言


        PHP 中 定义一个数组  $arr = ['name'=>'张三' , 'age'=>18];
        PHP 中 数组支持字符串作为索引键名

        JavaScript中,数组,只支持数值作为索引下标
        PHP 中 字符串数组,就要转化为 JavaScript中 对象

        不同计算机语言,都有自己定义json字符串,和将json字符串还原的方法

        PHP:
            json_encode()       将其他数值,转化为json字符串
            json_decode()       将json字符串,还原为其他数值

        JavaScript:
            JSON.stringify()    将其他数值,转化为json字符串
            JSON.parse()        将json字符串,还原为其他数值
<script>
    // 

JavaScript中的json操作

    const obj = {
        name:'张三',
        age:18,
        sex:'男',
    };

    // 转化为json串
    let str = JSON.stringify(obj);
    console.log(str);
    console.log(obj);

    // 将json串,还原为数据
    // 还原的是PHP中的json串
    const phpJson = JSON.parse('<?php echo $json;?>');
    // PHP的数组,转化为JavaScript的对象
    console.log(phpJson);

    // 实际项目中
    // 除了 数值 布尔类型  字符串类型
    // 其他的 数据传参,都要使用json字符串的形式

    
</script>

什么是

cookie

        cookie 是浏览器的 一个功能 
        是 前端浏览器的一种存储机制
        本质上是在浏览器内,建立一个文档文件,来存储浏览器执行页面时,产生的一些数据
        这些数据是各个浏览器都要使用的公共数据,会存储在cookie
        cookie本质上,一个是建立在浏览器文件夹中,存储页面公共数据的文件

    什么是cookie的时效
        cookie是浏览器存储数据的一种机制
        cookie存储的数据,不会一直存储在浏览器的文件中
        存储在文件中的数据,容易被攻击造成数据泄露
        为了确保数据的安全性,cookie存储的数据,是有时效性的
        也就是有存储时间,如果到达存储事件,浏览器会自动删除cookie中存储的数据

        cookie的时效性,可以设定,设定的是一个时间节点
        超过这个时间节点,浏览器会自动删除cookie数据

        如果没有设定时效,默认是会话时间
        所谓的会话时间,是浏览器打开执行前端程序的时间,也就是页面关闭,cookie就会被删除

        总结: cookie的时效,要么是会话时间 session
                          要么是超过当前时间的时效
                          一定不可能是小于当前时间的时效
                          因为小于当前时间,cookie就会被删除,不存在了

get cookie

<script>    
    // 获取当前的cookie
    // 获取内容是一个字符串
    // 格式 键名=数值;空格键名=数值;空格键名=数值
    // 字符串是没有办法直接使用的,必须要转化
    // 转化为对象,对象的键名就是cookie的键名,对象的数值就是cookie的数值
    // 必须要cookie的时效,只要有这个cookie键名数值就可以
    let cookieStr = document.cookie;
    console.log(cookieStr);

    // 定义一个函数来转化cookie字符串为对象
    // 参数:cookie字符串

    const cookieObj =  myGetCookie(document.cookie);
    console.log(cookieObj);

    function myGetCookie(cookieStr){
        // 定义一个对象
        // 在 { } 外定义变量,在 { } 中给变量赋值
        // 不影响变量的使用
        const obj = {};


        // 1,将cookie字符串,转化为数组,根据间隔符号 分号和空格
        const arr1 = cookieStr.split('; ');
        //  数组的形式 0:键名=数值 1:键名=数值....
        console.log(arr1);

        // 2,循环遍历arr1数组,键值对字符串的形式,要转化为 键名 数值独立的形式
        arr1.forEach((item)=>{
            // 以等号分割 键值对字符串,再定义成新的数组
            const newArr = item.split('=');
            // 数组 newArr 中 0是 键名 1是数值
            // console.log(newArr);

            // 要将 0存储的键名,设定成对象的键名
            // 要将 1存储的数值,设定为对象的数值

            // const obj ={};
            // 给对象添加单元
            // obj[变量] = 数据;
            obj[newArr[0]] = newArr[1];
        })
        return obj;
    }

    /*
    总结
    原因:JavaScript中,只能获取到cookie字符串
         必须将cookie字符串,转化为对象形式
         输入键名,可以获取数值
    步骤思路:
         1,定义一个函数,参数是 cookie字符串
         2,根据 ;空格  将 cookie字符串,转化为数组形式
            [
                0: 'name=张三',
                1: 'age=18',
                2: 'sex=男',
                3: 'addr=北京',
            ]
         3,定义一个对象,来存储转化的结果
         4,循环遍历 数组,获取数据item
              item 存储的是就是 cooKie 键值对字符串
              name=张三    age=18    sex=男    addr=北京

              按照 = 等号 将 item 分割为数组
                 0 存储键名name    1存储数值张三
              将0存储的键名作为对象的键名设定
              将1存储的数值作为对象的数值设定
              等于是 将 name=张三 字符串 设定为对象的单元 name:张三
         5,返回对象
           
    */

set cookie

<body>
    <script>
    // 1,必须要通过服务器运性前端程序,才会有cookie设定
    //   直接运行页面,设定cookie是有问题的


    // 2,设定cookie 必须是 键值对形式的字符串
    // '键名=数值' 
    // 没有设定时效,默认是会话时效
    document.cookie = 'name=张三';

    // 3,给cookie设定指定的时效
    // 设定cookie的时间,是服务器时间,不是本地当前时间
    // 全世界的计算机,都可以设定各个时区的时间,没有办法统一,必须设定的是服务器时间,才可以统一
    // 服务器时间是世界标准时 与中国时区时差有 -8个小时的时差 

    // 设定cookie时间的语法
    
    // document.cookie = 'name=张三;expires=时间对象';
    // 将设个时间对象表示的时间,设定为cookie的时效
    // 例如,时间对象,表示的时间是 2020-5-1 0:0:0 (服务器时间)
    // cookie的时效,就是 2020-5-1 0:0:0 (服务器时间)

    // 设定一个函数,来执行定义带有时效的cookie
    // 参数1:键名
    // 参数2:数值
    // 参数3:时效---cookie的时效是当前时间开始,往后多少秒

    function mySetCookie(key,value,time){
        // JavaScript中,时间单位默认是毫秒

        // 1,获取当前时间对象
        const nowTime = new Date();

        // 2,获取当前时间对象中的时间戳
        // 当前时间的时间戳和服务器时间,有8个小时的时差
        let t = nowTime.getTime();

        // 3,减去8个小时(毫秒)的时差
        // 当期时间相对应的服务器时间戳 
        t = t - (8*60*60*1000); 

        // 4,加上设定的cookie的时效性时间
        // 这个时效性就是cookie设定的时效性
        // time是秒,要转化为毫秒 ---  秒 * 1000
        t = t + time*1000;

        // 5,将时间戳,设定回时间对象
        // 时间对象,就具有了cookie设定需要的服务器时间戳
        nowTime.setTime(t);

        // 6,将这个时间对象,设定给cookie,作为时效性
        // 如果有 时间时效参数,设定cookie的时效是指定的时效时间
        // 如果没有 时间时效参数,应该设定的是会话时效

        // 通过三元运算符,来做判断
        // console.log(time);  如果没有给time传参,time是undefined
        // 如果 time 是 undefined 证明 time 没有输入参数
        //      给 a 赋值空字符串  a中就没有任何内容
        // 如果 time 不是 undefined 证明 time 有输入参数
        //      给 a 赋值计算后的 nowTime 时间对象
        let a = time === undefined ? '' : nowTime ;

        document.cookie = `${key}=${value};expires=${a}`;

    }
    // 每次执行,都是在当前时间基础上,给cookie增加60秒的时效
    // 刷新页面实际是重新执行设定cookie函数
    // 函数每次执行都会在当前时间基础上增加60秒时效
    // 要是页面没有设定 cookie函数的执行,不会影响 cookie时效的设定
    mySetCookie('age','18',3600);
    mySetCookie('sex','男',3600);
    mySetCookie('addr','北京',3600);

    // 删除cookie
    // 定义相同的键名,数值任意,时间是0或者负数都可以
 


    // 解释问题
    // 1, 直接设定cookie
    //    document.cookie = 'name=张三';
    //    会话时效,页面关闭,cookie就消失
    // 2, 通过函数设定
    //    mySetCookie('age','18',60);
    //    指定时效,只要不超过时间,cookie就会一直存在
    // 3, cookie不光是当前页面可以看到,同源的其他页面也可以看到
    //    一般是操作方式是
    //    在一个页面设定好cookie,在其他页面根据cookie来进行操作
    //    例如,在一个页面登录账号,同时设定cookie
    //    其他页面也可以读取这个cookie,只要有这个cookie,就可以不用再次登录了
    //    如果是会话时效的cookie,关闭页面,cookie小时,再次打开页面,就没有这个cookie,需要再次登录
    //    如果是设定时间的cookie,只要不超过这个事件,cookie都会存在,也就不需要再次登录了
    // 4, 关于cookie时效的计算
    //    (1),JavaScript中,所有的时间,默认都是毫秒,计算时,必须按照毫秒计算
    //    (2),服务器时间与中国时区时间,有8个小时的时差
    //        如果不计算这个时差,设定60秒时效,实际是8小时零60秒时效
    //    (3),要在当前时间戳继承上 增加 设定的 时效时间
    //        参数的时效时间是秒 * 1000 转化为 毫秒
    //        当前时间戳 - 8小时的毫秒 + 时效时间的毫秒
    // 5, 如果没有 时效时间 参数
    //    应该是设定为会话时效
    //    给 expires 通过三元运算符 赋值
    //    如果 time 是 undefined , 赋值空字符串 
    //    如果 time 不是 undefined , 赋值计算后的时间对象
    //    如果直接写不管有没有时间时效参数,都赋值 设定的时间对象
    //    看上去效果也是 会话事件时效 
    //    但是低版本的浏览器不支持这个效果,会设定为当前时间
    //    当前时间一执行,就会过期,就会直接删除
    //    为了兼容低版本浏览器,要写成赋值形式
    // 6, 删除cookie
    //    设定键名,数值任意,时间设定为 负数或者0 ,让cookie一设定就过期
    //    就不会出现在cookie
    // 7, 东时区,是当前时间 - N小时 是标准时间   东8区 当前时间 - 8小时
    //    西时区,是当前时间 + N小时 是标准时间   西8区 当前时间 + 8小时
    //    



</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值