- AJAX 是一种用于创建快速动态网页的技术
- 通过在后台与服务器进行少量数据交换
- AJAX可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
- 传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个网页页面。
AJAX只是是一个前端技术,不是一个新的语言。它是利用浏览器提供操作HTTP
的接口(XMLHttpRequest
或者ActiveXObject
)来操作HTTP
以达到异步的效果。
网页渲染的同步与异步的区别
- 同步:当你在浏览器的地址栏里输入百度网址并访问的时候,浏览器都是创建新的tabpage、新的内存块、加载网页的全部资源、渲染加载过来的资源。这些那都是从头开始的,就想上帝创作世界一样。只要与后台交互数据,那怕数据只有那么一丢丢,也得重新创造一次世界,如此反复。浏览器自己控制
HTTP
操作
- 异步:不需要重新创造一次世界,用之前已经存在的世界来达到目的。与后台交互数据不需要重新来渲染页面.自己来控制
HTTP
操作。
而ajax
就可以让我们实现这里所说的异步请求。这也正是我们学习ajax
的目的。
在学习ajax
之前我们得先学习下HTTP
协议。
在当前web环境中走的流量大部分都是走的HTTP
流量,也就是说你在浏览器中访问任何东西,那怕是一张小图片也是HTTP
来给你当搬运工显示在你面前的。而且AJAX就是基于HTTP来传输数据的。所以要想精通AJAX,适当的了解并掌握HTTP是十分必要的。
web内容都是存储在web服务器上的,web服务器所使用的是http协议,因此经常会被称为http服务器。这些http服务器存储量因特网中的数据,如果http客服端发出请求的话,它们会提供数据。客户端向服务器发送http请求,服务器会在http响应中会送所请求的数据。http客服端和http服务器共同构成了万维网的基本组建。可能你每天都是使用http客服端。最常见的http客户端就是浏览器。web浏览器向服务器请求http对象,并将这些对象显示在你的屏幕上。
一个http事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。这种通信时通过名为HTTP message
的格式化数据块进行的。
只有当请求和响应都成功时此http事务才算成功,也就是这条http才算成功。只有当其中任意一个命令(请求或者响应)失败,那么这个http就算失败。
一个http就是一个http事务,且http事务完成之后此http不可在复用。
请求或者响应的内容就叫做报文。
http报文是由一行一行的简单字符串组成的。http报文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写。
http报文分为三部分:
- 报文的第一行就是起始行,在请求报文中用来说明做些什么,在响应报文中说明出现了什么情况。
- 起始行后面有零个或多个首部字段。每个首部字段都包含了一个名字和一个值,首部分为5种类型:
通用首部、请求首部、响应首部、实体首部、扩展首部
- 报文主体包含了所有类型的数据。请求主体中报错了要发送给web服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部字段都是结构化的文本形式的,而主体可以包含任意的二进制数据。当然,主体中也可以包含文本。
http支持几种不同的请求命令,这些命令被称为http方法
每条http请求报文都包括一个方法。这个方法会告诉服务器执行什么动作(获取一个web页面、运行一个网关程序、删除一个文件)。
- 从服务器向客户端发送命名资源,主要是传给服务器一些参数来获取服务器上指定的资源
-
对发送的数据有大小限制
- 将客户端数据发送到一个服务器网关程序
-
没有发送数据的大小限制
- 从服务器上删除命名资源
-
服务器处理成功返回的状态码为202
- 仅发送命名资源中的http首部
- 服务器只返回响应起始行和首部,不会返回响应主体
-
该方法既没有请求主体也没有响应主体
- 将来自客户端的数据存储到一个服务器资源中去
- 和POST方法特点类似
-
此方法有幂等性,而POST没有
-
决定可以从服务器上执行哪些方法
这里所说的区别只是在浏览器中的表现
,并不是严格按照RFC文档比较的区别
。
- 资源大小限制:get方法限制大小,get是将数据直接拼接在URL后端query部分,而浏览器是对URL有长度限制的,所以get有大小限制。post不限制大小。因为post是将数据放到请求的主体里,而主体是不限制大小的,所以post没有大小限制。
- 功能 get主要是用来从服务器拉取数据,而post主要是用来将数据发送到服务器。
- 安全 get可以看到发送给服务器的数据,而post不会被看到,因为post把数据放到主体里了。
每条http响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他操作。
- 301 Redirect 永久重定向。一直从其他地方去获取资源
- 302 Redirect 临时重定向。临时到其他地方去获取资源
伴随着每个数字状态码,http还会发送一条解释性的原因短语
文本。包含文本短语主要是为了进行描述,所有的处理过程使用的都是数字码。
http软件处理下列状态码和原因短语的方式是一样的:
是为了解决在不同的电子邮件系统之间搬移报文时存在的问题。MIME在电子邮件系统中工作得非常好,因此HTTP也采纳了它,用它来描述并标记多媒体内容。
web服务器会为所有的http对象数据附加一个MIME类型。当web浏览器从服务器中取回一个对象时,回去查看相关的MIME类型,看看它是否知道应该如何处理这个对象。大多数浏览器都可以处理数百种常见的对象类型。
MIME Type就是告诉浏览器用什么方式来处理这个数据。
MIME类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。
- 每个web服务器资源都有一个名字,这样客户端就可以说明他们感兴趣的资源是什么了。服务器资源名被称为
统一资源标识符(Uniform Resource Identifier,URI)
URI就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。
- 例如 这是一个百度服务器上一个图片资源的URI。
-
统一资源定位符(URL)
是资源标识符最常见的形式。URL描述了一台特定服务器上某资源的特定位置。它们可以明确说明如何从一个精确、固定的位置获取资源。
//将百度返回的数据输出到控制台中
虽然实现CORS不需要做任何事情,但是还有一些安全细节需要了解。首先,如果通过XMLHttpRequest的open()方法传入用户名和密码(详情见open方法),那么它们绝不会通过跨域请求发送。另外跨域请求也不会包含其他任何的用户证书:cookie和HTTP身份认证的令牌(TOKEN)通常不会作为请求的内容发送
到对方的服务器且对方服务器返回任何数据(cookie以及其他的一些响应头)都将被丢弃。如果跨域请求必须需要传入这几种用户证书才能成功,那么就必须在调用send()方法之前设置XMLHttpRequest的WithCredentials为true,此属性默认为false。也可以检索XMLHttpRequest对象有没有该属性来判断是否它支持CORS操作。
默认情况下,在浏览器中使用XMLHttpRequest进行跨源请求不提供凭据(cookie、HTTP认证及客户端SSL证明等)。通过将XMLHttpRequest的withCredentials属性设置为true,可以指定某个请求应该发送凭据。如果服务器接收带凭据的请求,会用下面的HTTP头部来响应。
//服务器端返回此响应头