一、http请求
1.http是一种无状态的协议。即,服务器不会记录客户端的请求,每次都需重新建立连接。
2.一个完整的http请求通常包含以下7个步骤:
(1)建立TCP连接
(2)web浏览器向web服务器发送请求命令
(3)web浏览器向web服务器发送请求头信息
(4)web服务器向web浏览器发送应答命令
(5)web服务器向web浏览器发送应答头信息
(6)web服务器向web浏览器发送数据
(7)web服务器关闭TCP连接
3.一个http请求一般有4部分组成:
(1)http请求的方法或动作(GET还是POST)
(2)正在请求的URL(地址)
(3)请求头(包含一些客户端信息、身份验证信息等)
(4)请求体(请求的正文)
4.GET和POST
GET:一般用于信息获取,使用URL传递参数,对所发信息的数量有限制(一般在2000个字符)
POST:一般用于修改服务器上的资源,对所发信息的数量无限制
附:GET是幂等的。即,一个GET请求,无论执行多少次,它的影响都是相同的。也可以理解为,信息不会因为GET请求而改变,所以它是幂等的。(GET只是查询嘛,并不修改信息~)
5.一个http响应一般由3部分组成:
(1)状态码
(2)响应头(服务器类型、内容类型长度等信息)
(3)响应体
6.状态码
1**:信息类,表示收到web浏览器请求,正在进一步处理中
2**:成功,表示用户请求被正确接收、理解和处理
3**:重定向,表示请求没有成功,客户必须采取进一步操作
4**:客户端错误,表示客户端提交的请求有错误
5**:服务器错误,表示服务器不能完成对请求的处理
二、XMLHttpRequest请求&响应
请求:
1.open(method,url,async):
method:GET或POST
url:地址
async:是否异步(true或false)
2.send(string):
GET时,通常不传string字符串,POST时,传string,即:传想要进行的修改。
响应:
1.获取响应值
responseText:获得字符串形式的响应数据
responseXML:获得XML形式的响应数据
status和statusText:以数字和文本形式返回http状态码
getAllResponseHeader():获取所有的响应报头
getResponseHeader():查询响应中的某个字段的值
2.readyState属性取值:
0:请求为初始化,open还未调用
1:服务器连接已建立,open已经调用
2:请求已接收,即服务器接收到头信息
3:请求处理中,即接收到响应主体了
4:请求已完成,且响应已就绪。也就是响应完成了
三、一个典型的XMLHttpRequest(XHR)建立ajax异步请求的过程:
1.var requset=new XMLHttpRequest();//new一个XHR对象
2.request.open("GET","get.php",true);
3.request.send();
4.request.onreadystatechange=function(){ //readyState每次变化,就执行一次本函数
if(request.readyState===4&&request.status===200){
//做一些事情 request.responseText
}
}
四、jQuery中的ajax
type:POST或GET,默认为GET
url:发送请求的地址
data:一个对象,连同请求发送到服务器的数据
dataType:预期服务器返回的数据类型,一般为json
success:是一个方法,请求成功后的回调函数。传入返回后的数据,以及包含成功代码的字符串。
error:是一个方法,请求失败时调用此函数。传入XMLHttpRequest对象。
调用举例:
$.ajax({
type:"POST",
url:"service.php?number="+$("#keyword").val(),
dataType:"json",
data:{ //POST传data,GET不传
name:xxx,
stuno:xxx,
age:xxx
},
success:function(data){
if(data.success){
}else{
}
},
error:function(jqXHR){
alert("发生错误");
}
});
五、关于跨域
一个域名地址的组成:
http://www.abc.com:8080/scripts/jquery.js
【协议、子域名、主域名、端口号、请求资源地址】
当协议、子域名、主域名、端口号这4者中任意一个不相同时,都算作不同域。不同域之间互相请求资源,就是跨域。例如:http://www.abc.com:8080/index.html 请求 http://www.efg.com:8080/service.php。
处理跨域的方式:代理、JSONP、XHR2