通信协议
通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。
在计算机通信中,通信协议用于实现计算机与网络连接之间的标准,网络如果没有统一的通信 协议,电脑之间的信息传递就无法识别。 通信协议是指通信各方事前约定的通信规则,可以简 单地理解为各计算机之间进行相互会话所使用的共同语言。两台计算机在进行通信时,必须使 用的通信协议。
TCP/IP
Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互 联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网 络层的IP协议和传输层的TCP协议组成。TCP/IP 定义了电子设备如何连入因特网,以及数据 如何在它们之间传输的标准。
HTTP
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络 协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和 接收HTML页面的方法。
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网 站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默 认端口为80)的HTTP请求。
前端面试题1:一次完整的HTTP事务是怎样的一个过程?
a. 域名解析
b. 发起TCP的3次握手
c. 建立TCP连接后发起http请求
d. 服务器端响应http请求,浏览器得到html代码
e. 浏览器解析html代码,并请求html代码中的资源
f. 浏览器对页面进行渲染呈现给用户
前端面试题2:HTTP和HTTPS的区别
HTTP协议通常承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL), 这个时候,就成了我们常说的HTTPS。默认HTTP的端口号为80,HTTPS的端口号为443。
COOKIE 的概念
Cookie又叫会话跟踪技术是由Web服务器保存在用户浏览器上的小文本文件,它可以包含相关用户的信息。无论何时用户链接到服务器,Web站点都可以访问Cookie信息 。
比如:自动登录、记住用户名,记住一些和用户相关的信息等
cookie的特点
禁用Cookie后,无法正常登陆。
cookie是与浏览器相关的,不同浏览器之间所保存的cookie也是不能互相访问的;
cookie可能被删除。因为每个cookie都是硬盘上的一个文件;
cookie安全性不够高。
cookie的常见使用
保存用户登录状态。
跟踪用户行为。
定制页面。
创建购物车。
cookie的使用及封装
Cookie名称和值可以由服务器端开发自己定义。
如果cookie不存在,输出undefined.
添加cookie
document.cookie=‘key = value ; expires=过期时间’;
获取cookie
document.cookie
删除cookie
将cookie的过期时间设为一个过去的时间。
了解XSS攻击(cross site script:跨站脚本攻击)
XSS攻击全称跨站脚本攻击,是为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
如何预防xss攻击:
用户的输入(url)要进行过滤。后端对你传入的内容一定进行过滤。对于输出进行转义。
加密方式:Md5/SHA1
数组、对象cookie的存储和访问。
1、JSON.parse 函数
作用:将 JavaScript 对象表示法 (JSON) 字符串转换为对象,具有json格式检测功能。
2、JSON.stringify()函数
作用:将 JavaScript 值转换为 JavaScript 对象表示法 (JSON) 字符串
3、eval()函数---性能不及JSON.parse(),安全性不好。
作用:eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
eval()在解析代码时还要用一对圆括号将字符串包起来。其目的是迫使eval函数在处理 JavaScript代码的时候强制 将括号内的表达式转化为对象,而不是作为语句来执行。
例如:eval("{}") 和 eval('('+'{}'+')')
强化练习
1.一周内免登陆。
2.记录图片位置。
3.照片墙的记录。
综合应用
1 . 购物车的操作。
1、encodeURI/decodeURI
encodeURI:方法返回一个已编码的 URI。如果将编码结果传递给 decodeURI,则将返回初始的字符串。encodeURI 不对下列字符进行编码:“:”、“/”、“;”和“?”。请使用 encodeURIComponent 对这些字符进行编码
decodeURI:从用encodeURI方法编码的String对象中返回已解码的字符串
例外字符:! @ # $ & * ( ) = : / ; ? + '
2、encodeURIComponent/decodeURIComponent
encodeURIComponent:encodeURIComponent 方法返回一个已编码的 URI。如果将编码结果传递给decodeURIComponent,则将返回初始的字符串。因为 encodeURIComponent 方法将对所有字符编码
decodeURIComponent:从用encodeURIComponent方法编码的String对象中返回已解码的字符串
例外字符:! * ( ) '
补充:
当ul的总宽度不想计算时,可以先设大概值,然后用浏览器的f12下调
cookie的结构,简单地说:cookie是以键值对的形式保存的,即key=value的格式。各个cookie之间一般是以“;”分隔。
以字符串的方式存键值对
cookie是客户端和服务器之间的,cookie本地娶不到
安装了http-server服务器,并用自带的编辑器打开页面,在下方终端处输入命令,打开服务器
终止命令ctrl+c
若8080端口被占用了,则利用hs -o -p 8888
一次会话过程是指打开直到关闭
cookie可以多次赋值,不会覆盖,会自动用“;”+空格来分开
后台传递的数据一般是json类型的;
以后键都加引号
1,
<script>
window.onload = function() {
var set = document.getElementById('set');
8
var get = document.getElementById('get');
var username = document.getElementById('username');
set.onclick = function() {
document.cookie = "username=" + username.value;
alert('存好了');
}
get.onclick = function() {
console.log(document.cookie);
}
}
</script>
2.
<script>
window.onload = function() {
var set = document.getElementById('set');
var get = document.getElementById('get');
set.onclick = function() {
document.cookie = 'username = zhangsan';
document.cookie = 'age=20';
document.cookie = 'sex=nan';
alert('存好了');
}
get.onclick = function() {
var arr = document.cookie.split('; ');
for (var i = 0; i < arr.length; i++) {
var item = arr[i].split('=');
if (item[0] == 'username') {
console.log('用户名:' + item[1]);
}
}
}
}
</script>
</head>
<body>
<button id="set">存 </button>
<button id="get">取 </button>
</body>
3.
<script>
window.onload = function() {
var username = document.getElementById('username');
var password = document.getElementById('password');
var reg = document.getElementById('reg');
reg.onclick = function() {
document.cookie = 'username=' + username.value;
document.cookie = 'password=' + password.value;
location.href = "eg05.login.html";
}
}
</script>
</head>
<body>
<input type="text" id="username">
<input type="text" id="password">
<input type="button" value="注册" id="reg">
</body>
4.
<script>
window.onload = function() {
var username = document.getElementById('username');
var password = document.getElementById('password');
var login = document.getElementById('login');
var str = document.cookie;
var arr = str.split('; ');
var yonghuming = '';
var mima = '';
for (var i = 0; i < arr.length; i++) {
var item = arr[i].split('=');
if ('username' == item[0]) {
yonghuming = item[1];
}
if ('password' == item[0]) {
mima = item[1];
}
}
login.onclick = function() {
var uname = username.value;
var pwd = password.value;
if (uname == yonghuming && pwd == mima) {
alert('登陆成功');
} else {
alert('登陆失败');
}
}
}
</script>
</head>
<body>
<input type="text" id="username">
<input type="text" id="password">
<input type="button" value="登陆" id="login">
</body>
5.
<script>
// JSON是一种中立于语言的轻量级数据交换格式 --- 符合JavaScript 对象 语法的
var data = [{
username: 'zhangsan',
age: 20,
sex: 'nan'
}, {
username: 'lisi',
age: 18,
sex: 'nv'
}, {
username: 'wangwu',
age: 12,
sex: 'nv'
}, {
username: 'zhaoliu',
age: 18,
sex: 'nv'
}]; // JSON数组
</script>
</head>
<body>
<button id="set">存</button>
<button id="get">取</button>
<script>
set.onclick = function() {
document.cookie = 'data=' + JSON.stringify(data);
alert('存好了');
}
get.onclick = function() {
var str = document.cookie;
var arr = str.split('; ');
for (var i = 0; i < arr.length; i++) {
var item = arr[i].split('=');
if (item[0] == 'data') {
var d = JSON.parse(item[1]); //将JSON字符串转换成JSON对象或JSON数组
console.log(d);
}
}
}
// JSON.stringify() 将JSON对象转换成JSON字符串,JSON字符串的key都需要带引号
</script>
</body>
6.
<script>
var str = '{"name":"zhangsan","age":20}';
console.log(JSON.parse(str)); // JSON.parse必须外面单引号,里面双引号
</script>
7
<script src="test.js"></script>
<!--[if lte IE 8]>
<script src="json2.js"></script>
<style>
.box{height:200px;width:200px;background:red;}
</style>
<![endif]-->
</head>
<body>
<div class="box"></div>
</body>
8.
<body>
<button id="set">存</button>
<button id="del">删</button>
<script>
var set = document.getElementById('set');
var del = document.getElementById('del');
set.onclick = function() {
var d = new Date();
d.setDate(d.getDate() + 2);
document.cookie = 'username=zhangsan;expires=' + d;
}
del.onclick = function() {
document.cookie = 'username="";expires=-1';
}
</script>
</body>
9.
<script>
// Storage是HTML5 新增API
var ls = localStorage;
// ls.setItem('username', 'lisi');
// ls.setItem('age', '18');
// ls.setItem('sex', '男');
// // ls.removeItem('age');
// // ls.clear();
// console.log(ls.key(1));
// console.log(ls.getItem('username'));
for (var i = 0; i < ls.length; i++) {
console.log('key:' + ls.key(i) + ' value:' + ls.getItem(ls.key(i)));
}
// var ss = sessionStorage;
</script>
<script type="text/javascript">
//1.添加cookie-会话结束自动消失,没有设置过期时间。
//key--value存储cookie值。
/*document.cookie='name=zhangsan';
document.cookie='age=100';
document.cookie='sex=男';*/
//2.添加cookie-带过期时间的。
/* var d=new Date();//获取当前的日期
d.setDate(d.getDate()+10);//获取当前几号+10天,设置日期
document.cookie='username=wangwu;expires='+d;*/
//3.获取所有cookie
//alert(document.cookie);//username=wangwu
</script>
<script type="text/javascript">
//1.添加cookie
/*var d=new Date();
d.setDate(d.getDate()+7);
document.cookie='username=lisi;expires='+d;*/
//md5和sha1 加密方式。
function addcookie(key,value,days){
var d=new Date();
d.setDate(d.getDate()+days);
document.cookie=key+'='+encodeURIComponent(value)+';expires='+d;
}
//addcookie('username','zhangsan',7);
//addcookie('password',hex_md5('123456'),7);
/*addcookie('name','wangwu',7);
addcookie('age',100,7);
addcookie('sex','男',7);*/
//2.获取cookie:传入key,返回value
//获取所有的cookie
//alert(decodeURIComponent(document.cookie));//name=zhangsan; age=100; sex=男
function getcookie(key){
var cookievalue=decodeURIComponent(document.cookie).split('; ');//数组
//console.log(cookievalue)//["name=zhangsan", "age=100", "sex=男"]
for(var i=0;i<cookievalue.length;i++){
var arr=cookievalue[i].split('=');
if(key==arr[0]){
return arr[1];
}
}
}
//alert(getcookie('name'));//zhangsan
//alert(getcookie('age'));//100
//3.删除cookie:Key值相同,存储时就会覆盖,存储一个cookie,将时间设为过去的时间。
function delcookie(key){
addcookie(key,'',-1);
}
</script>
<body>
<form action="xss.php" method="post">
请输入用户名:<input name="username" autocomplete="off" value="" /><br/>
<input type="submit" value="提交" />
</form>
<!-- "><script>alert(document.cookie)</script><!-- -->
<script type="text/javascript">
var inp=document.querySelector('input');
inp.οnblur=function(){
this.value=encodeURI(inp.value);
}
</script>
</body>
<script type="text/javascript">
//1.数组
//数组存储cookie,直接将数组当中value直接存在。
//也可以将数组转换成string进行存储--toString();
//利用split方法将取出的cookie转换成数组
//var arr=['apple','banana','orange'];
//addcookie('shuiguo',arr,7);
//console.log(getcookie('shuiguo').split(','));//["apple", "banana", "orange"]
//2.对象
var obj={
a:1,
b:2,
c:3
}
//alert(obj);//[object Object]
//addcookie('data',obj,7);//[object object]
//如果将对象存入cookie,取出cookie又是对象???
//JSON.stringify():将对象转换成json格式字符串。
//console.log(obj);//{a: 1, b: 2, c: 3}
//console.log(JSON.stringify(obj));//'{"a":1,"b":2,"c":3}'
//addcookie('data',JSON.stringify(obj),10);
//console.log(getcookie('data'));
//console.log(typeof getcookie('data'));
//JSON.parse:JSON格式的字符串转换为对象,具有json格式检测功能。
//console.log(JSON.parse(getcookie('data')));
</script>
<body>
<fieldset id="" style="width:600px;">
<legend>用户登录</legend>
<p>
<label for="">姓名:</label>
<input type="text" id="username" autocomplete="off" />
</p>
<p>
<label for="">密码:</label>
<input type="password" id="password" />
</p>
<p>
<input type="checkbox" id="check" />记住用户名和密码
</p>
<p>
<input type="button" id="btn" value="登陆" />
</p>
</fieldset>
<script src="cookie.js" type="text/javascript" charset="utf-8"></script>
<script src="md5.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var username=document.querySelector('#username');
var password=document.querySelector('#password');
var remember=document.querySelector('#check');
var btn=document.querySelector('#btn');
//判断cookie是否存在
if(getcookie('user') && getcookie('pass')){
username.value=getcookie('user');
password.value=getcookie('pass');
remember.checked=true;
}
btn.οnclick=function(){
if(remember.checked){//选中
addcookie('user',username.value,7);
addcookie('pass',hex_md5(password.value),7);
}else{
delcookie('user');
delcookie('pass');
}
}
</script>
</body>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
img{
width:300px;
position: absolute;
}
</style>
</head>
<body>
<img src="../Day 08/img/2.jpg" alt="" />
<script src="cookie.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
var oImg=document.querySelector('img');
if(getcookie('x') && getcookie('y')){
oImg.style.left=getcookie('x')+'px';
oImg.style.top=getcookie('y')+'px';
}
function drag(obj){
var sx=0;
var sy=0;
obj.οnmοusedοwn=function(ev){
var ev=ev||window.event;
sx=ev.offsetX;
sy=ev.offsetY;
document.οnmοusemοve=function(ev){
var ev=ev||window.event;
obj.style.left=ev.clientX-sx+'px';
obj.style.top=ev.clientY-sy+'px';
};
document.οnmοuseup=function(){
document.οnmοusemοve=null;
document.οnmοuseup=null;
addcookie('x',obj.offsetLeft,10);
addcookie('y',obj.offsetTop,10);
}
return false;//取消默认行为。
}
}
drag(oImg);
</script>
</body>
function addcookie(key,value,days){
var d=new Date();
d.setDate(d.getDate()+days);
document.cookie=key+'='+encodeURIComponent(value)+';expires='+d;
}
function getcookie(key){
var cookievalue=decodeURIComponent(document.cookie).split('; ');
for(var i=0;i<cookievalue.length;i++){
var arr=cookievalue[i].split('=');
if(key==arr[0]){
return arr[1];
}
}
}
function delcookie(key){
addcookie(key,'',-1);
}