http
是我们前后台交互的时候的传输协议(即超文本传输协议)怎么和服务器建立链接呢?
需要保证客户端的接受和发送正常,服务器端的接受和发送正常
这里就涉及到一个东西叫做 TCP/IP
协议
建立链接的主要步骤叫做 三次握手
客户端发送一个消息给到服务端
此时:服务端知道了 客户端可以正常发送消息服务端知道了 服务端可以正常接受消息
服务端回给客户端一个消息
此时:服务端知道了 客户端可以正常发送消息服务端知道了 服务端可以正常接受消息客户端知道了 客户端可以正常发送消息客户端知道了 客户端可以正常接受消息客户端知道了 服务端可以正常接受消息客户端知道了 服务端可以正常发送消息
客户端再回给服务端一个消息
此时:服务端知道了 客户端可以正常发送消息服务端知道了 服务端可以正常接受消息客户端知道了 客户端可以正常发送消息客户端知道了 客户端可以正常接受消息客户端知道了 服务端可以正常接受消息客户端知道了 服务端可以正常发送消息服务端知道了 服务端可以正常发送消息服务端知道了 客户端可以正常接受消息
至此,依照 TCP/IP
协议的建立链接就建立好了
双方都知道双方可以正常收发消息
就可以进入到第二步,通讯了
建立完链接以后就是发送请求的过程
我们的每一个请求都要把我们的所有信息都包含请求
每一个请求都会有一个 请求报文
在 请求报文
中会包含我们所有的请求信息(也就是我们要和服务端说的话都在里面)
我们的请求报文中会包含几个东西
请求行
POST /user HTTP/1.1
# POST 请求方式
# /user 请求URL(不包含域名)
# HTTP/1.1 请求协议版本
请求头(请求头都是键值对的形式出现的)
user-agent: Mozilla/5.0 # 产生请求的浏览器信息
accept: application/json # 表示客户端希望接受的数据类型
Content-Type: application/x-www-form-urlencoded # 客户端发送的实体数据格式
Host: 127.0.0.1 # 请求的主机名(IP)
请求空行(请求头和请求主体之间要留一个空白行)
# 就是一个空行
请求体(本次请求携带的数据)
# GET 请求是没有请求体数据的
# POST 请求才有请求体数据
接下来看一个完整的请求报文
POST /user HTTP/1.1 # 请求行
Host: www.user.com
Content-Type: application/x-www-form-urlencoded
accept: application/json
User-agent: Mozilla/5.0. # 以上是首部
#(此处必须有一空行) # 空行分割header和请求内容
name=world # 请求体
客户端的请求发送到服务端以后
服务端进行对应的处理
会给我们返回一个响应
每一个响应都会有一个 响应报文
在 响应报文
中会包含我们所有的响应信息(也就是服务端在接受到客户端请求以后,给我们的回信)
我们的 响应报文
中会包含几个信息
状态行
HTTP/1.1 200 OK
# HTTP/1.1 服务器使用的 HTTP 协议版本
# 200 响应状态码
# OK 对响应状态码的简单解释
响应头
Date: Jan, 14 Aug 2019 12:42:30 GMT # 服务器时间
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45 # 服务器类型
Content-Type: text/html # 服务端给客户端的数据类型
Content-Length: 11 # 服务端给客户端的数据长度
响应体
hello world
# 服务端给客户端的响应数据
之前我们的建立链接是基于 TCP/IP
协议的 三次握手
我们的断开链接是基于
TCP/IP
协议的
四次挥手
querystring
的形式发送,也就是直接拼接在 请求路径的后面request body
的形式发送,也就是放在请求体中COOKIE
是一个以字符串的形式存储数据的位置COOKIE 是以字符串的形式存储,在字符串中以 key=value
的形式出现
每一个 key=value
是一条数据
多个数据之间以 ;
分割
// COOKIE 的形态
'a=100; b=200; c=300;'
读取 COOKIE 的内容使用 document.COOKIE
const COOKIE = document.COOKIE
console.log(COOKIE) // 就能得到当前 COOKIE 的值
设置 COOKIE 的内容使用 document.COOKIE
// 设置一个时效性为会话级别的 COOKIE
document.COOKIE = 'a=100'// 设置一个有过期时间的 COOKIE
document.COOKIE = 'b=200;expires=Thu, 18 Dec 2043 12:00:00 GMT";'
// 上面这个 COOKIE 数据会在 2043 年 12 月 18 日 12 点以后过期,过期后会自动消失
删除 COOKIE 的内容使用 document.COOKIE
// 因为 COOKIE 不能直接删除
// 所以我们只能把某一条 COOKIE 的过期时间设置成当前时间之前
// 那么浏览器就会自动删除 COOKIE
document.COOKIE = 'b=200;expires=Thu, 18 Dec 2018 12:00:00 GMT";'
/*** setCOOKIE 用于设置 COOKIE* @param {STRING} key 要设置的 COOKIE 名称* @param {STRING} value 要设置的 COOKIE 内容* @param {NUMBER} expires 过期时间*/
function setCOOKIE (key, value, expires) {const time = new Date()time.setTime(time.getTime() - 1000 * 60 * 60 * 24 * 8 + expires) // 用于设置过期时间document.COOKIE = `${key}=${value};expires=${time};`
}
/*** getCOOKIE 获取 COOKIE 中的某一个属性* @param {STRING} key 你要查询的 COOKIE 属性* @return {STRING} 你要查询的那个 COOKIE 属性的值*/
function getCOOKIE(key) {const COOKIEArr = document.COOKIE.split(';')let value = ''COOKIEArr.forEach(item => {if (item.split('=')[0] === key) {value = item.split('=')[1]}})return value
}
/*** delCOOKIE 删除 COOKIE 中的某一个属性* @param {STRING} name 你要删除的某一个 COOKIE 属性的名称*/
function delCOOKIE(name) {setCOOKIE(name, 1, -1)
}
// 设置COOKIE(增改一体);function setCOOKIE(name, value, expires) {// 核心 : 操作字符串 !;var COOKIE_str &#61; name &#43; "&#61;" &#43; value;//判定是否有必要增加过期时间;if (typeof expires &#61;&#61;&#61; "number") {var d &#61; new Date();d.setDate(d.getDate() &#43; expires);COOKIE_str &#43;&#61; ";expires&#61;" &#43; d;}// 把拼接好的字符串设置到 document.COOKIE 上;// console.log(COOKIE_str);document.COOKIE &#61; COOKIE_str;}// 结果验证//setCOOKIE("password","123456",1);// 获取COOKIE;function getCOOKIE(name) {// 分割;// 一定要以 分号加空格 的间隔进行分割;var COOKIE_arr &#61; document.COOKIE.split("; ");for (var i &#61; 0; i < COOKIE_arr.length; i&#43;&#43;) {// 每一条COOKIE &#61;> key&#61;value;var COOKIE_item &#61; COOKIE_arr[i]// console.log(COOKIE_item);COOKIE_item &#61; COOKIE_item.split("&#61;");if (COOKIE_item[0] &#61;&#61; name) {return COOKIE_item[1];}}return "";}// 结果验证// var res &#61; getCOOKIE("password")// console.log(res)// 删除 COOKIE ;function removeCOOKIE(name) {setCOOKIE(name, "", -1);}// 结果验证// removeCOOKIE("password")
设置COOKIE(增改一体)
获取COOKIE
删除 COOKIE
function setCOOKIE(name, value, options) {// options默认值 如果没有值&#xff0c;则为空对象options &#61; options || {}// 判断时间 如果不是数字类型 则为session COOKIE (会话COOKIE)if (typeof options.expires &#61;&#61;&#61; "number") {var time &#61; new Date()time.setDate(time.getDate() &#43; options.expires)}// 返回值 这里面是用数组形式 return document.COOKIE &#61; [// 拼接字符串 比如 fqniu&#61;hello worldname &#43; "&#61;" &#43; value,// 判断是否为字符串 是 执行前面的 不是则为空字符串typeof options.domain &#61;&#61;&#61; "string" ? ";domain&#61;" &#43; options.domain : "",// 判断是否为字符串 是 执行前面的 不是则为空字符串typeof options.path &#61;&#61;&#61; "string" ? ";path&#61;" &#43; options.path : "",// 判断是否为数值 是 执行前面的 不是则为空字符串typeof options.expires &#61;&#61;&#61; "number" ? ";expires&#61;" &#43; time : ""].join("");}var res &#61; setCOOKIE("fqniu", "hello world", {domain: "localhost",path: "0709",expires: 1})console.log(res)
为啥打开php之后不执行
http学习路线 :
COOKIE : 每个服务器的身份牌&#xff0c;存储在客户端由浏览器进行设置和读取
setCOOKIE( key , value , expires , path , domain )
$_COOKIE[COOKIE的key值]
数据库里面取出中文会乱码 中文
&#61;> ??
mysql_query("set namse utf8")
斤拷锟*类的乱码
header(content-type:text/html;charset&#61;utf8)