AJax与Comet,跨源资源共享

来源:互联网 发布:国外电视台直播软件ios 编辑:程序博客网 时间:2024/06/05 03:32

Ajax技术能够向服务器请求额外的数据而无须卸载页面,带来更好是用户体验。
其核心技术书XMLHttpRequest对象,简称XHR,能够已异步方式从服务器获得更多的信息,然后再通过DOM将新的数据插入到页面中。
Ajax中虽然包含XML的成分,但是Ajax通信与数据格式无关。

1.1XMLHttpRequest对象

var xhr = createXHR();

1.1.1 XHR 的用法

  • 调用open方法:xhr.open(“get”,”example.php”,false);在此需要注意的是:1)URL相对于执行代码的当前页面;2)调用open方法,并不会真正的发生请求,只是启动了一个请求以备发送。false表示同步
  • 调用send方法:xhr.send(null);//一个参数,作为请求主体发送的数据,没有要发的,则传null,必须要有。
  • 收到服务器的响应后,响应的数据会自动填充XHR对象的属性

    • responseText:作为响应主体被返回的文本
    • responseXML:“text/xml”或者”application/xml”:则在这个属性中包含中响应数据的XML DOM文档
    • status:响应的HTTP状态
    • statusText:HTTP状态的说明

    第一步:检查status属性
    第二步:发送responseText
    if((xhr.status >= 200 && xhr.status <300)|| xhr.status ==304) alert(xhr.responseText);
    else alert(“Request was unsuccessful:”+ xhr.status);

  • 在异步请求时,需要检测XHR的readyState属性
    • 0: 为初始化。尚未调用open
    • 1:启动。调用了 open ,未调用send
    • 2:发送。 调用了send ,未接收的响应
    • 3:接收。已经接收到部分响应数据
    • 4:完成。已经接收到全部响应数据
 var xhr = createXHR();     xhr.onreadystatechange = function(){        if(xhr.readyState == 4){             if((xhr.status >= 200 && xhr.status <300)|| xhr.status ==304)                                      alert(xhr.responseText);        else             alert("Request was unsuccessful:"+ xhr.status);                  }    };    xhr.open("get","example.txt",true);    xhr.send(null);

1.1.2 HTTP头部信息

  • Accept:浏览器能够处理的内容类型
  • Accept-Charset:浏览器能够显示的字符集
  • Accept-Encoding:浏览器能够处理的的压缩编码
  • Accept-Language:浏览器当前设置的语言
  • Connection:浏览器与服务器之间的连接类型
  • Cookie:当前页面设置的任何cookie
  • Host:发出请求的页面所在的域
  • Referer:发出请求的页面的URI
  • User-Agent:浏览器的用户代理字符串

Get请求

向服务器查询某些信息
xhr.open(“get”,”example.php?name1=value1&name2=value2”,true);

Post请求

通常用于向服务器发送应该被保存的数据
xhr.open(“post”,”example.txt”,true);

 var xhr = createXHR();     xhr.onreadystatechange = function(){        if(xhr.readyState == 4){             if((xhr.status >= 200 && xhr.status <300)|| xhr.status ==304)                                      alert(xhr.responseText);        else             alert("Request was unsuccessful:"+ xhr.status);                  }    };    xhr.open("post","example.php",true);    xhr,setRequestHeader("Content-Type","application/w-www-form-urlencoded");//设置为表单提交时的类型    var form = document.getElementById("user-info");    xhr.send(serialize(form));    xhr.send(null);

2.1 XMLHttpRequest 2级

2.1.1 FormData

FormData为序列化表单以及创建与表单格式相同的数据提供了便利

var data = new FormData();data.append("name","Nicholas");

2.1.2 超时设定

xhr.timeout = 1000;//表示请求在等待响应1秒后就终止。

2.1.3 overrideMimeType()方法

用于重写XHR响应的MIME类型

2.3 进度事件

  • loadstart:在接收到响应数据的第一个字节时触发
  • progress:在接收响应期间持续不断地触发
  • error:在请求发生错误时触发
  • abort:在因为调用 abort() 方法而终止连接时触发
  • load:在接到完整的响应数据时触发
  • loadend:在通信完成或者触发 error、abort、或者load事件后触发

2.4 跨源资源共享—CORS(Cross-Origin Resource Sharing)

通过XHR实现Ajax通信的一个主要限制,来源与跨域安全策略。默认情况下,XHR对象只能访问与包含它的页面位于同一个域中的资源。
CORS背后的基本思想,就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是应该失败
Access-Control-Allow-Origin:http://www.nczonline.net
作为头部信息发送请求信息,如果没有这个头部,或者这个头部但源信息不匹配,浏览器就会驳回请求。

2.5 其他跨越技术

2.5.1 图像Ping

使用标签,我们知道,一个网页可以从任何网页中加载图像,不用担心跨域的问题。

2.5.2 JSONP

JSONP是JSON with padding(填充式JSON)的缩写,是被包含在函数调用中的JSON

callback({"name":"Nicholas"});

JSONP 由俩个部分组成:回调函数和数据。回调函数是当响应到来时应该在页面中调用的函数。回调函数的名字一般是在请求中指定的。而数据就是传入回调函数中的JSOB数据

http://freegeoip.net/json/?callback=handleResponse

JSONP 是通过动态

2.5.3 Commet

如果说Ajax是一种从页面向服务器请求数据的技术,而Commet则是一种服务器向页面推送数据的技术。
实现comet的两种方式:

+ 长轮询:浏览器定时向服务器发送请求,看有没有更新的数据、+ HTTP流:与轮询不同在整个生命周期内只使用一个HTTP连接。即浏览器向服务器发送一个请求,而服务器保持连接打开,然后周期性地向浏览器发送数据。

2.5.4 服务器发送事件

SSE(Server - Sent Events,服务器发送事件)是围绕只读Comet交互推出的API或者模式。SSE用于创建到服务器的单向连接,服务器通过这个连接可以发送任意数量的数据。服务器响应的MIME类型必须是text/event-stream,而且是浏览器中的JavaScript API能解析格式输出。SSE支持短轮询、长轮询和HTTP流,而且能在断开连接时自动确定何时重新连接。

2.5.5 Web Sockets

Web Sockets的目标是在一个单独的持久连接上提供全双工、全向通信。在JavaScript中创建了WebSocket之后,会有一个HTTP请求发送到浏览器以发起连接。在取得服务器响应后,建立的连接会使用HTTP升级HTTP协议交换为Web Socket协议。

var socket = new WebSocket("ws://www.example.com/server.php");socket.send("hello world")

2.6 安全

为了确保通过XHR访问的URL安全,通常的做法就是验证发送请求者是否有权限访问对应的资源,有以下几种方式:

  • 要求以SSL连接来访问可以通过XHR请求的资源
  • 要求每一次请求都要附带经过相应算法计算得到的验证码
    注意:以下几种措施对CSRF攻击不起作用
  • 要求发送POST而不是GET请求—很容易改变
  • 检查来源URL以确定是否可信—来源记录很容易伪造
  • 基于cookie信息进行验证—同样很容易伪造
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新摩托车被交警查到怎么办 写字楼保安夜班巡逻害怕怎么办 全民k歌歌曲删了怎么办 莲藕洞里的黑膜怎么办 鞋子后面的拉链磨脚怎么办 磨砂鞋尖踢掉皮怎么办 塔吊吊装过程中遇到障碍物怎么办 高速路上突然遇到障碍物怎么办 被不明物蛰了怎么办 喝酒后开车撞路政护栏怎么办 电脑过了质保期怎么办 电闸推不上去怎么办啊? 寝室的电闸不亮了怎么办 海绵城市改造只挖不修怎么办 怀孕一个月做了胸透怎么办 怀孕了照了胸透怎么办 刚怀孕照了胸透怎么办 怀孕进了ct室怎么办 消防稳压罐气囊压力不够怎么办 备孕期间拍了ct怎么办 晚上睡不好老做梦怎么办 零线和地线短路怎么办 火花塞拧的过紧怎么办 眼睛被电弧光灼伤怎么办 电脑模拟器微信附近人屏蔽了怎么办 美的电压锅漏气怎么办 电压力锅排气阀漏气怎么办 win10系统上不了网怎么办 手机自拍杆坏了怎么办 车辆遭核生化打击时怎么办? 遭核生化打击时怎么办? 车辆行驶中遭核生化打击时怎么办? 硫酸气体熏到嗓子怎么办 硫酸味儿进嗓子了怎么办 吸入二氧化氯气体后怎么办 衣服84消毒 变色了怎么办 我的身份证被诈骗犯知道了怎么办 母婴店来客人少怎么办 键盘驱动被卸载了怎么办 广州 狗狗随地大小便怎么办 上海 狗狗随地大小便怎么办