概念
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 方式
- 有请求体的
- 就在请求体的位置,不会再地址栏进行拼接
- 就是把你要携带的参数放在请求体里面
- GET 方式
- 请求行:
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);
?>