重识HTTP
HTTP请求过程
1.建立TCP连接2.web浏览器向服务器发送请求命令3.web浏览器发送请求头信息4.web浏览器发送请求体5.web服务器应答6.web服务器发送应答头信息7.web服务器向浏览器发送数据8.web服务器关闭TCP连接
HTTP请求
一个HTTP请求一般有四部分组成 1.请求的方法或动作,比如是GET还是POST请求 2.正在请求的URL 3.请求头,包含一些客户端环境信息,身份验证信息 4.请求体即请求的正文,包含客户提交的字符串信息,表单信息等
HTTP响应
一个HTTP响应一般有三部分组成 1.一个数字或文字组成的状态码 2.响应头,包含服务器的环境信息例如服务器类型,日期时间,内容类型和长度等 3.响应体
补充:状态码
HTTP状态码由三位数字构成,其中首位数字定义了状态码的类型1xx:信息类,表示收到web浏览器的请求,正在进一步处理中2xx:成功,表示请求被正确接收,理解和处理:200 OK3xx:重定向,表示请求没有成功,客户必须采取进一步的动作4xx:客户端错误,表示客户端提交的请求有错误,例如404 NOT Found5xx:服务器错误,表示服务器不能完成对请求的处理。
常见的HTTP状态码:200 客户端请求成功302 临时跳转,跳转的地址通过location指定400 客户端请求有语法错误,不能被服务器识别403 服务器收到请求,但是拒绝提供服务404 请求的资源不存在500 服务器发生不可预期的结果
Ajax初体验
ajax简介
拙见:Ajax技术就好像把网页分割成若干个小部分,每个小部分都可以独自的通过JavaScript与服务器进行联系,刷新各自的数据。而不像原来没有ajax时只是想要网页中的刷新一部分,但不得不刷新整个网页浪费了资源。
异步就是每个小部分都在干自己的事。
同步就是大家捆绑在一起,你干什么我也必须干什么,你刷新我也必须刷新。
大牛:
异步的JavaScript和XML(Asynchronous JavaScript and XML)使用ajax技术的网页,可以局部异步的更新数据。
实现Ajax
拙见:所说的每个小部分便是XMLHttpRequest对象
运用XMLHttpRequest和web服务器进行数据的异步交换运用JavaScript操作DOM,实现动态局部刷新
创建XMLHttpRequest对象
XMLHttpRequest对象也称XHRjs:var requestif(window.XMLHttpRequest){ request = new XMLHttpRequest(); //IE7+,Firefox,Chrome,Opera,Safari}else{ request = new ActiveXObject("Microsoft.XMLHTTP") //IE6,IE5}
发送XHR对象
设置初始信息 open(method,url,async) method : 请求的方式是GET还是POST url : 请求的地址 async : 是否采用异步传输发送数据HTTP请求 send(string) string : POST请求时向服务器发送的数据,GET请求时为空注意 在发送POST请求时,要设置请求的头信息
实例 GET请求 request.open("GET","oneurl.php?fname=Bill&lname=Gates",true) request.send() POST请求 request.open("POST","oneurl.php",true) //设置HTTP请求头信息时,第一个字符串参数为名称, 第二个字符串参数为值 request.setRequestHeader("Content-type", "application/x-www-form-urlencoded") request.send("name=二狗&sex=男")
监听XHR发送情况
数据的发送过程是不可以看到的,但是可以通过 XHR对象的readyState属性和onreadystatechange事件 来实时监听数据的发送情况。readyState 属性 0: 请求尚未初始化,open还没有调用 1: 服务器连接已经建立,send方法已经调用,正在发送请求 2: send方法已经完成,且受到全部的响应内容 3: 正在解析从服务端的返回数据 4: 解析数据完成,可以再客户端调用该数据onreadystatechange 事件 每次状态码的改变都会触发该事件
取得响应数据
当readyState==4时即客户端解析数据完毕, 这时调用response的各种属性和方法可以方便查看各种数据responseText : 获得字符串形式的响应数据reponseXML : 获得XML形式的响应数据status和statusText : 以数字和文本的形式返回HTTP状态码getResponseHeader('name') : 查询响应中的某一个字段的值
原文