本文部分转载自,由淘宝RDSS团队分享。由于SlideShare已无法访问,同时为了后续查阅方便,我将一些图表搬进了本文。
一、AJAX
名词解释:
AJAX = Asynchronous JavaScript and XML XHR = XMLHttpRequest
JSONP = JSON with Padding (Padding = Prefix = Callback Function Name)
1# 正向 AJAX
2# 反向AJAX
本文作者: fool2fish@gmail.com
2.1# HTTP/JSONP 轮询
优点:
不需要服务器的特别配置
全浏览器支持
客户端实现简单
缺点:
2.2# Piggyback
客户端不再为轮询单独发送请求,而是服务器借任何一个前端的ajax请求返回数据。
优点:
缺点:
2.3# Comet
用到Chunked transfer encoding的IFrame
优点:
缺点:
用到Multipart/x-mixed-replace的XHR
优点:
缺点:
2.4# Http长轮询
Script Tag方案:
优点:
缺点:
XHR方案
优点
2.5# Websocket
优点
缺点
3. AJAX跨域
3.1# 简单跨域(CORS)
Cross-Origin Resource Sharing (CORS)是W3c工作草案,它定义了在跨域访问资源时浏览器和服务器之间如何通信。CORS背后的基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定请求或响应成功与否。
浏览器 对一个简单的请求,没有自定义头部,要么使用GET,要么使用POST,它的Content-type 为text/plain ,请求会发送一个名叫Orgin的额外的头部。
服务器 如果服务器确定请求被通过,它将发送一个Access-Control-Allow-Origin 头部响应发送请求的同一个源,如果是一个公共资源,则返回“*”。
· 注意,请求和响应都不包括cookie信息。 · FF3.5 +,Safari 4和chrome通过使用XMLHttpRequest 对象支持其使用。在IE8中也是一样,用同样的方式你需要使用XDomainRequest 对象。
3.2# Preflight 请求
Browser 除了GET或POST,通过一种称之为preflighted请求的服务器透明验证机制,CORS允许使用自定义的头部和方法,以及不同主体内容类型。当你尝试使用高级选项中的一个来试着建立一个请求时,这时就建立了一个preflighted请求。该请求使用可选的方法,并发送如下头部:Origin /Access-Control-Request-Method /Access-Control-Request-Headers
Server 在请求期间,服务器能决定是否允许这类请求。服务器通过在响应中发送以下头部来与浏览器通信。Access-Control-Allow-Origin /Access-Control-Allow-Methods /Access-Control-Allow-Headers /Access-Control-Max-Age
preflighted 请求一旦作出,结果将按响应中规定的时间缓存下来;第一次做出这样的请求,你将引发一次额外的HTTP请求。 · Firefox 3.5+,Safari 4+和Chrome都支持preflighted请求,IE8则不支持。
3.3# 带验证跨域
Browser 默认状态下,跨域请求不提供证书(cookie、HTTP身份验证、客户端SSL证书)。你可以规定一个请求应该通过设置withCredentials属性为true来发送证书。如果服务器允许credentialed请求,那么它将用下面的头部作出响应:Access-Control-Allow-Credentials: true
Server 如果一个credentialed请求被发送,而这个头部没在响应头中相应的返回,浏览器不会将响应传递给JavaScript(responseText 是一个空字符串,状态为0,onerror() 被调用)。
· IE8不支持withCredentials属性,Firefox 3.5+,Safari 4+和Chrome都支持它。
3.4 跨域兼容性
二、Cookie
三、Query String & Hash
四、Multipart Form
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|