一个HTTP请求由4个部分组成: | 服务器返回的HTTP响应包含3部分: |
1,HTTP请求方法或动作(verb) 2,正在请求的URL 3,一个可选的请求头集合,其中可能包括身份验证信息 4,一个可选的请求主体 |
1,一个数字和文字组成的状态码,用来显示请求的成功和失败。 2,一个响应头集合 3,响应主体 |
请求HTTP
1.第一件事就是实例化XMLHttpRequest: var request = new XMLHttpRequest();
2.下一步是调用XHR对象的--open()方法,open方法的两个必需部分(“GET/POST”,URL)
URL是请求的主题,是相对于文档的URL(如果是绝对路径,协议和主机和端口通常必须匹配文档对应的内容,否则跨域的请求通常会报错)
3.(若没有主体,就忽略这一步)使用XHR发起HTTP请求倒数第二步,是制定可选的请求主体。(POST请求通常拥有主体,同时它应该匹配使用setRequestHeader()制定的“Content-Type”头)
4.向服务器发送send()方法
request.send()参数可选。由于get请求绝对没有主体,所以应该传递null或省略这个参数。有主体的就传主体。
取得响应
一个完整的HTTP相应,由状态码,响应头集合,响应主体组成。
状态码:status和statusText属性,以数字和文本的形式返回HTTP状态码:
常量 | 值 | 含义 |
unsent | 0 | open()尚未调用 |
opened | 1 | open已调用 |
headers_received | 2 | 接受到头部信息 |
loading | 3 | 接收到响应主体 |
done | 4 | 响应完成 |
理论上,每次readyState属性改变都会出发readystatechange时间,实际上,属性改为0或1时可能没有出发这个事件。
1,异步响应
由于本身性质,异步处理HTTP响应式最好的方式,然而XHR也支持同步响应。如果把false作为第三个参数传递给open(),那么send()方法将阻塞直到请求完成。
2.响应解码
编码请求主体
HTTP POST请求包括一个请求主体,它包含客户端传递给服务器的数据
1.表单编码的请求
表单数据编码格式有一个正式的MIME类型(POST提交这种顺序的表单数据时,必须设置“conten-type”请求头为下列值)
application/x-www-form-urlencoded
2.JSON编码的请求
JSON.stringify()
3.XML编码的请求(XML有时也用于数据传输的编码)
4.上传文件(通过表单上传)
5.multipart/form-data请求(当HTML表单同时包含文件上传元素和其他元素时,Content-Type应设置为“multipart/form-data”)
Http进度事件
XHR2这个新的事件模型中,XHR对象在请求的不同阶段触发不同类型的事件,所以不再需要检查readyState属性。
触发步骤:调用send()时,触发单个loadstart事件。
当事件完成,会触发load事件。
load事件程序检查status状态码来确定HTTP响应。
HTTP请求无法完成有这3种情况:
load(正常完成),abort(中止),timeout(超时),error(错误)
注:内容总结来源:《JavaScript权威指南》