day22-http,cookie

概念

01 .url = 协议 + 域名 + 资源路径 比如: https://www.baidu.com/index.html

  • http:超文本传输协议
  • https:安全的超文本传输协议
  • file
  • tcp/ip

02 . 思考:地址栏输入:https://www.gz2005.io/code/index.html 到页面展示这个过程浏览器内部做了什么?(面试)

  • 输入网址
  • DNS解析
  • 建立tcp连接
  • 客户端发送HTPP请求
  • 服务器处理请求
  • 服务器响应请求
  • 浏览器展示HTML
  • 浏览器发送请求获取其他在HTML中的资源。

03 . http 协议

  • 作用:用于从www服务器传输超文本到本地浏览器的传输协议

04 . http 工作原理

  • 浏览器解析 url ,把 url 地址中的域名给DNS服务器
  • 询问DNS服务器该域名对应的IP是什么
  • DNS返回IP给浏览器
  • 浏览器与NDS返回的IP的端口进行TCP连接
  • 请求站点目录下的code/index.html
  • 服务器响应返回一个状态码,浏览器就断开TCP连接
  • 如果状态码是2开头或者是3开头,就可以加载页面

05 .http 的工作流程
【1】与服务端建立连接

  • 三次握手

【2】客户端向服务端发送消息(请求request)

  • 客户端发送请求的信息:请求报文

【3】服务端需要向客户端返回信息(响应response)

  • 服务端发送的信息:响应报文

【4】和服务端断开连接

  • 四次挥手

06 . 客户端发送请求

  • 每发送一个请求都会伴随一个 请求报文
  • 请求报文包含:
    • 请求行:GET /http/login.php?username=admin&password=123456 HTTP/1.1
      • ‘GET’ 请求方式
      • /http/login.php 请求url(路径的标识)
      • HTTP/1.1 请求协议的版本
    • 请求头
      • 详细的对本次请求进行一个描述
      • Host 主机名(域名)
      • User-Agent 发起请求的客户端版本
      • Accept 告诉服务端我希望你给我返回的是一个什么数据类型
      • Referer 从哪一个地址发起的请求
      • content-type 本次请求我给你携带的参数是什么数据格式
      • cookie
    • 请求空行
      • 请求头部和请求体之间必须留一个空行
    • 请求体
      • GET 方式
        • 没有请求体
        • 直接把参数拼接在地址栏的后面
      • POST 方式
        • 有请求体的
        • 就在请求体的位置,不会再地址栏进行拼接
        • 就是把你要携带的参数放在请求体里面

07 . 服务端响应报文

  • 每一个响应会有一个 响应报文
  • 响应报文包含:
    • 状态行
      • HTTP/1.1 200 OK
      • HTTP/1.1 响应协议版本
      • 200 本次请求的状态码
      • OK 本次状态码的简单描述信息
    • 响应头
      • Date 服务器时间
      • Server 由哪一个服务器给你返回的信息
      • Content-Length 响应体的长度
      • Content-Type 服务端给你返回的数据是什么数据类型的
      • cookie
    • 响应体
      • 就是服务端返回的信息

08 . 断开连接是基于 TCP/IP 协议的 四次挥手

  • 客户端向服务端发送一个消息 我要关闭链接了
  • 服务端接受到以后,会回一个消息,我已经进入关闭等待状态
  • 服务端发送第二个消息,当我再一次接受你的消息的时候,我就会关闭了,并且不会再有回信
  • 客户端向服务端发送消息,我知道了,并且在你接受到这个消息的时候我已经关闭了,我不会再接受任何消息了

09 . HTTP 的响应状态码

  • 100 ~ 199
    • 表示请求继续
  • 200 ~ 299
    • 表示成功
  • 300 ~ 399
    • 表示重定向成功
  • 400 ~ 499
    • 表示一切客户端错误
  • 500 ~ 599
    • 表示一切服务端错误

10 . HTTP 的请求方式

  • GET 向服务器获取一些数据
  • POST 向服务器提交
  • PUT 修改,增加
  • DELECT 删除
  • HEAD 没什么响应信息,只是为了获取报文头
  • CONNECT HTTP 保留的一个请求方式
  • PATCH 修改,修改局部信息
  • OPTIONS 用来获取服务端信息的

11 .GET 和 POST 请求的区别(面试,熟读并背诵)

  • GET 请求
    • 参数拼接在地址栏
    • 会被浏览器自主缓存
    • 受限制浏览器地址栏的大小
    • 对参数有限制 只能接受 ASCII
    • 相对不安全
  • POST请求
    • 参数在请求体里面
    • 不会被浏览器自动缓存
    • 理论上参数大小不受限制(可以被服务器限制)
    • 对参数相对自由,理论上发送各种类型过的数据,要和请求头中的 content-type 配套
    • 相对安全

12 . cookie

  • cookie是浏览器 提供的一个存储数据的空间

  • 前端可以使用js控制这个存储空间

  • 后端也可以 控制这个存储空间

  • cookie的存储形式

    'a=10;b=200;c=300;'
  • cookie存储的位置

    • 按照域名来存储
    • 你在哪个域名下存储的cookie,就只能在哪个域名下访问使用
  • cookie的存储大小

    • 存储 4KB 左右
    • 50 条左右
    • webkit 内核理论上没有上限
  • cookie的作用:

    • 可以帮我们存储一些数据
  • cookie 的时效性

    • 默认是会话级别的时效性(浏览器打开到浏览器结束)

13 . cookie 和 前后台交互的关系(重点)

  • 当一个请求发起的时候,如果 cookie 空间中有内容
  • 那么这个请求中会自动在请求头里面携带 cookie 空间中的内容到后台
  • 当后端返回响应的时候,如果之前的请求报文中有 cookie,我还会一摸一样的给你带回去
  • 如果后端自己设置了 cookie 浏览器上同样会出现

14 . 后端对cookie的增删改查

  • 设置cookie:setcookie(key,value,expires);
    • key:你要设置的cookie 属性
    • value:你要设置的属性值
    • expires:这个属性的过期时间
  • 获取cookie的值:$_COOKIE['key']
  • 删除某个cookie的属性:setcookie('key',value,time()-1)

15 . 前端操作cookie

  • 设置cookie:document.cookie = "key=value;expires=时间;"
  • 获取cookie:document.cookie 获取这个域名下面所有的cookie
  • 删除:只能设置过期时间为当前时间之前

在这里插入图片描述

登录注册案例

在这里插入图片描述

  • zhuce.html
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        
        <title>Document</title>
    </head>
    <body>
        <form action="./zhuce.php" method="GET">
            <p>
                <label for="">用户名:</label>
                <input type="text" name="username" />
            </p>
            <p>
                <label for="">密码:</label>
                <input type="text" name="password" />
            </p>
            <button>注册</button>
        </form>
    </body>
</html>

  • zhuce.php
<?php
    // 获取前端传递过来的用户名和密码
    // 去数据库中进行匹配(查询数据库中是否存在这个用户名)
    // 如果已经存在(查询到数据的时候 表示存在),提示用户名存在请重新输入
    // 如果没有查询到 可以把这个数据添加到数据库
    $user = $_GET['username'];
    $pass = $_GET['password'];

    $con = mysqli_connect('localhost','root','123456','login');
    $selectSql = "SELECT * FROM `user` WHERE `username`='$user'";

    $selectRes = mysqli_query($con,$selectSql);

    $row = mysqli_fetch_assoc($selectRes);

    if($row){
        die('用户名已经存在 请重新输入');
    }

    $insertSql = "INSERT INTO `user` VALUES (null, '$user', '$pass', null)";
    $insertRes = mysqli_query($con,$insertSql);

    if(!$insertRes){
        die('添加失败');
    }
    $arr = array('code'=>$insertRes,'msg'=>'添加成功');
    print_r(json_encode($arr,JSON_UNESCAPED_UNICODE));
?>

cookie演示

在这里插入图片描述

  • cookie.html
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <link rel="stylesheet" href="./02_cookie.php">
    </head>
    <body>
        <script>
            // js 获取cookie
            // 会把所有的cookie都获取出来
            // document.cookie   name=aaa; age=18
            let cookie = getCookie("name");

            console.log(cookie);

            function getCookie(attr) {
                // name=aaa; age=18
                let res = document.cookie;
                // {name:'aaa',age:18}
                let obj = {};
                let arr = res.split("; ");

                arr.forEach((item) => {
                    let array = item.split("=");
                    obj[array[0]] = array[1];
                });
                return obj[attr];
            }
        </script>
    </body>
</html>

  • cookie.php
<?php
    // php 设置cookie 
    // setcookie(key,value)

    // time() 当前时间(服务器当前时间,0时区的时间)
    // cookie 的过期时间也是为0时区的时间 
    // time() 以秒为单位  2*24*60*60
    setcookie('name','aaa',time()+2*24*60*60);
    setcookie('age','18',time()+2*24*60*60);

    // 获取cookie
    $cookie = $_COOKIE['name'];


    print_r($cookie);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值