关于Ajax中http协议

关于ajax
ajax是异步的JavaScript和XML,优点是无刷新的与后天通信并获取数据,只更改页面中需要更改的部分,而不是刷新整个页面,减少无意义的数据传输,提高了效率和用户体验

1.协议和HTTP协议。
HTTP协议,它规定了在网络中发布、传输和接收html页面的方法。大家都遵循这个协议,就能实现信息的传输。
2.HTTP协议典型的工作流程。
客户端和服务器端没有任何联系——建立连接,客户端发送请求——沿着建立好的连接,服务器端返回响应信息——断开连接。
3.HTTP请求信息的格式。
请求信息分为三部分:请求行、请求头信息和请求主体信息。请求头信息和请求主体信息之间用一个空行分割,不管是否有请求主体信息,这个空行都必须存在。
请求行又分成三部分:请求方法,请求资源的路径,所用协议的版本(目前一般是http1.1,0.9和1.0已经基本不用了)。
请求方法又有以下几种:GET/POST/PUT/DELETE/TRACE/OPTIONS等。
get方式通过地址栏传递参数,post方式是通过请求头信息传递信息的。但是这两种方式传递数据的格式都是相同的。key=value&key=value
4.HTTP响应信息的格式。
响应信息同样分成三部分:响应行,响应头信息,响应主体信息。
响应行:协议版本,状态码,状态描述信息。
5.常见的http状态码:
200 OK,表示一切正常。对GET和POST请求的应答文档跟在后面。
301 Moved Permanently。永久重定向。客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
302 Found。临时重定向,新的URL被视为临时性的替代,而不是永久性的。
304 Not Modified。客户端有缓存的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓存的文档还可以继续使用。
400 Bad Request。请求出现语法错误。
403 Forbidden。资源不可用。
404 Not Found。无法找到指定位置的资源。
405 Method Not Allowed。请求方法(GET、POST、HEAD、Delete、PUT、TRACE等)对指定的资源不适用。
414 Request URI Too Long。输入的网站URI太长。
500 Internal Server Error。服务器遇到了意料不到的情况,不能完成客户的请求
501 Not Implemented。服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求
505 HTTP Version Not Supported。服务器不支持请求中所指明的HTTP版本。
6.HTTP协议的头信息
Refer信息是一个url,可以知道是从哪个页面跳转到当前页面的,也就是用户来到当前页面的上一页是哪里。通过这个特性结合服务器配置,可以用来防盗链。
7.XMLHttpRequest对象的属性。
(1)responseText。从HTTP协议的角度来看,它代表的是服务器响应的主体信息,body信息。从我们用户的角度看,就是在浏览器的页面上能看到的信息,这个属性的值肯定是字符串类型的。
(2)status是服务器返回的状态码。就是上面提到的http协议的状态码。
(3)statusText,状态码对应的文字描述,也是http协议中的内容。
(4)onreadystatechange,一个事件句柄,用来绑定一个函数。具体来说,它绑定的是当XMLHttpRequest对象的状态发生变化的时候激发的函数。
(5)readyState,这是XMLHttpRequest对象自身的状态码,有以下几种:
0(未初始化)还没有调用send()方法,此阶段确认XMLHttpRequest对象是否创建,值为0表示对象已经存在。
1(载入),此阶段对XMLHttpRequest对象进行初始化,已经调用 send()方法,值为1表示正在向服务端发送请求。
2表示载入完成,(send()方法执行完毕),已经收到全部的响应内容。但是此时收到的并不是我们能直接看懂的内容,所以还不能在客户端调用。
3正在解析响应内容。
4响应内容解析完成。这里要特别注意,完成并不一定代表成功得到了想要得到的内容。
(6).responseXML,对于大量的格式化文档,可以用XML来传输或交换,由后台程序把数据封装在XML文档中,JS接收XML对象并解析其中的内容。
8.XMLHttpRequest对象的方法。
(1).open('请求方式','url',同步/异步),默认为true,表示异步。同步和异步听起来有些高大上,其实可以这样形容,前面的没执行完,后面的就不能执行,这就是同步,它们排着队,前面的会阻塞后面的。而异步就是前面的没做完也不影响后面的执行,等到前面的执行完了把结果动态的拿过来就好了,通过及时“插队”的形式实现了异步。
(2).send(null,参数),参数的格式是键值对&键值对。
比如这样:obj.send('username='+un+'&email='+eml);
(3).getResponseHeader():获取响应的某个头信息,括号中写入到底要获得哪一个头信息,比如('Content-Type')用来获取返回的主体内容的长度。
(4).getAllResponseHeaders():获取响应的所有头信息。
(5).Abort,忽略,不要再进行下去了,到此为止。
(6).setRequestHeader(key,value),这个用来设置请求头信息。
9.get方式提交数据,直接把要发送的内容跟在请求地址的后面即可,同时还要注意两个问题:缓存和中文乱码。浏览器的缓存会导致后端更新的数据不能及时的反馈到前端,所以要在地址最后加上一个时间戳或者是随机数。而解决中文乱码,可以在发送的时候用encodeRUI函数对汉字进行编码,这个函数的作用就是把字符串作为URI进行编码。
10.post方式没有缓存问题,也没有中文乱码问题。它用来提交数据,提交数据是不会产生缓存的。把要提交的数据放到send方法的括号中作为参数传递过去。具体的拼接方式仍然不变,不过一定要注意一点,post提交数据的时候,必须在请求头信息中声明Content-Type,告诉后端你要发送的大致是什么内容,方便服务器进行相应的解析。同时,由于设置了内容类型,也就没有中文乱码问题了。

原文地址:https://www.cnblogs.com/jasonwang2y60/p/6075996.html