一、ajax的工作原理

a.创建XMLHttpRequeat对象

var xmlhttp;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

b.向服务器发送请求

使用XMLHttpRequest 对象的 open() 和 send() 方法

如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据。

注意:

当使用 async=true 时,请规定在响应处于 onreadystatechange 事件中的就绪状态时执行的函数

当使用 async=false 时,请不要编写 onreadystatechange 函数 - 把代码放到 send() 语句后面即可

c.onreadystatechange事件

当请求被发送到服务器时,我们需要执行一些基于响应的任务。每当 readyState 改变时,就会触发 onreadystatechange 事件。readyState 属性存有 XMLHttpRequest 的状态信息。

d.服务器响应

如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。

二、原生js实现Ajax方法

var Ajax={
get: function(url, fn) {
// XMLHttpRequest对象用于在后台与服务器交换数据
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onreadystatechange = function() {
// readyState == 4说明请求已完成
if (xhr.readyState == 4 && xhr.status == 200 || xhr.status == 304) {
// 从服务器获得数据
fn.call(this, xhr.responseText);
}
};
xhr.send();
},
// datat应为'a=a1&b=b1'这种字符串格式,在jq里如果data为对象会自动将对象转成这种字符串格式
post: function (url, data, fn) {
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
// 添加http头,发送信息至服务器时内容编码类型
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) {
fn.call(this, xhr.responseText);
}
};
xhr.send(data);
}
}

三、jquery实现Ajax方法:

$.ajax({
url: ,
type: '',
dataType: '',
data: { },
success: function(){ },
error: function(){ }
})

type:类型,get或者post

url:发送请求的地址

data:是一个对象,连同请求发送到服务器的数据

dataType:预期服务器返回的数据类型

success:请求成功后的回调函数

error:请求失败时调用此函数

四、http中get和post的区别

定义:

GET:从指定的资源请求数据

POST:向指定的资源提交要被处理的数据

其它HTTP请求方法:

五、http和https有什么区别

a.HTTP(Hypertext Transfer Protocol)超文本传输协议

缺省工作在TCP协议80端口

优点:使浏览器更加高效,使网络传输减少。

缺点:HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险。

b.HTTPS(Secure
Hypertext Transfer Protocol)
安全超文本传输协议

缺省工作在TCP协议443端口

一般的工作流程如下:

1.完成TCP三次握手

2.客户端验证服务器数字证书,通过,进入步骤3

3.DH算法协商对称加密算法密钥、hash算法的密钥

4.SSL安全加密隧道协商完成

5.网页以加密的方式传输,用协商的对称加密算法和密钥,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改

如果HTTPS是网银服务,以上SSL安全隧道成功建立后才会要求用户输入账号信息,账号信息是在安全隧道传输的,所以不会泄密。

六、TCP的三次握手和四次握手

TCP三次握手是为了建立可靠连接,存在一次请求,两次响应

TCP四次握手是为了关闭连接,存在两次请求,两次响应

七、OSI七层模型和TCP/IP四层模型

OSI七层模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层

物理层:单位bit,字节byte,同轴电缆,光纤,二进制,比特流
数据链路层:帧,16进制,0-9,A-FMac地址->全网唯一性     mac地址过滤
网络层:数据包,IP地址,十进制
传输层:数据段,TCP,UDP
会话层:建立维护管理会话链接
表示层:加密,解密,数据格式化
应用层是最接近用户的一层  http协议
 
 

TCP/IP四层模型:网络接口层,网络层,传输层,应用层

八、XSS和CSRF攻击

XSS跨站脚本攻击。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页时,嵌入的script代码会被执行,达到恶意攻击用户的目的
CSRF:跨站脚本伪造,对网站的恶意利用。要完成一次CSRF攻击,必须依次完成两个步骤1登录授信网站A,并在本地生成Cookie   2在不登出A的情况下,访问危险网站B
 
区别:
XSS只要指向客户端,CSRF针对服务器;CSRF危害程度更高;
XSS利用合法用户获取其信息,CSRF伪造合法用户发起请求

防御手段

对于CSRF

1.尽量使用POST,限制GET

2.加验证码

3.Anti CSRF Token

过程:

a. 用户访问某个表单页面。

b. 服务端生成一个Token,放在用户的Session中,或者浏览器的Cookie中。

c. 在页面表单附带上Token参数。

d. 用户提交请求后, 服务端验证表单中的Token是否与用户Session(或Cookies)中的Token一致,一致为合法请求,不是则非法请求。

这个Token的值必须是随机的,不可预测的。由于Token的存在,攻击者无法再构造一个带有合法Token的请求实施CSRF攻击。另外使用Token时应注意Token的保密性,尽量把敏感操作由GET改为POST,以form或AJAX形式提交,避免Token泄露。

对于XSS

1.使用XSS Filter

针对用户提交的数据进行有效验证,只接受规定长度或内容的提交,过滤掉其他输入内容

2.html 实体

在变量输出到html页面时,可以使用编码或转义的方式来防御XSS攻击

HtmlEncode:将字符转成HTMLEntities,对应的标准是ISO-8859-1。

3.Http Only cookie

浏览器禁止页面的JS访问带有HttpOnly属性的Cookie。

ajax的相关知识总结的更多相关文章

  1. Python全栈开发之18、cookies、session和ajax等相关知识

    一.cookies 本质为在浏览器端保存的键值对,由服务端写在浏览器端,以后每次请求的时候,浏览器都携带着cookie来访问,cookies的使用之处非常多,比如用户验证,登陆界面,右侧菜单隐藏,控制 ...

  2. AJAX跨域调用相关知识-CORS和JSONP(引)

    AJAX跨域调用相关知识-CORS和JSONP 1.什么是跨域 跨域问题产生的原因,是由于浏览器的安全机制,JS只能访问与所在页面同一个域(相同协议.域名.端口)的内容. 但是我们项目开发过程中,经常 ...

  3. 【转载】前端面试“http全过程”将所有HTTP相关知识抛出来了...

    原文:前端面试“http全过程”将所有HTTP相关知识抛出来了... 来一篇串通,一个http全过程的问题,把所有HTTP相关知识点都带过一遍 http全过程 输入域名(url)-->DNS映射 ...

  4. HTML入门基础教程相关知识

    HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文 ...

  5. 浅谈C#中的 async await 以及对线程相关知识的复习

    C#5.0以后新增了一个语法糖,那就是异步方法async await,之前对线程,进程方面的知识有过较为深入的学习,大概知道这个概念,我的项目中实际用到C#异步编程的场景比较少,就算要用到一般也感觉T ...

  6. web聊天相关知识

    http相关知识 http是无状态,请求,响应模式的通信模式,就是用户每次通过浏览器点击一下页面,都需要重新与web服务器建立一下连接,且发送自己的 session id 给服务器端以使服务器端验证此 ...

  7. web跨域及cookie相关知识总结

    原文:web跨域及cookie相关知识总结   之前对于跨域相关的知识一致都很零碎,正好现在的代码中用到了跨域相关的,现在来对这些知识做一个汇总整理,方便自己查看,说不定也可能对你有所帮助. 本篇主要 ...

  8. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  9. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

随机推荐

  1. pyqt5加载网页的简单使用

    如下初步使用了pyqt5,构造了一个webview来加载网址,呈现网页. 1.安装pyqt5包,可使用douban的源 pip install pyqt5 -i http://pypi.douban. ...

  2. 最短路径-Dijkstra算法与Floyd算法

    一.最短路径 ①在非网图中,最短路径是指两顶点之间经历的边数最少的路径. AE:1    ADE:2   ADCE:3   ABCE:3 ②在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径 ...

  3. 关于TCHAR和string对象的c.str()一些注意事项

    1.TCHAR 根据预处理器的设置,如果是_MBCS, 那么TCHAR = char: 如果 如果设置的是UNICODE和_UNICODE,那么TCHAR=wchar_t.就等于根据当前环境会选择不同 ...

  4. [转] 从此不再惧怕URI编码:JavaScript及C# URI编码详解

    混乱的URI编码 JavaScript中编码有三种方法:escape.encodeURI.encodeURIComponent C#中编码主要方法:HttpUtility.UrlEncode.Serv ...

  5. thinkphp5.0调用ajax无刷新加载数据

    控制器层那边就是调数据返回,这里不再赘述,视图层页面ajax部分写法如下 function shanchu(obj) { var code = $(obj).attr("code" ...

  6. SQL Server遍历所有表统计行数

    DECLARE CountTableRecords CURSOR READ_ONLY FOR SELECT sst.name, Schema_name(sst.schema_id) FROM sys. ...

  7. canny算子求图像边缘,edgebox那部分

    过程: 1.      彩色图像转换为灰度图像    2.      对图像进行高斯模糊    3.      计算图像梯度,根据梯度计算图像边缘幅值与角度(这里其实用到了微分边缘检测算子来计算梯度幅 ...

  8. 十三、IntelliJ IDEA 中的版本控制介绍(下)

    我们已经简单了解了 IntelliJ IDEA 的版本控制机制,那么接下来,就让我们一起看看在 IntelliJ IDEA 中进行具体的版本控制操作. 标注1:Checkout from Versio ...

  9. Gradle Goodness: Set Java Compiler Encoding

    If we want to set an explicit encoding for the Java compiler in Gradle we can use the options.encodi ...

  10. 【js】数组添加与删除

    做个表格,就会容易记忆四种方法.    返回值  是否改变数组长度 位置 功能 push() 改变数组的长度   是    末位  添加 unshift() 改变数组的长度  是 首位 添加 pop( ...