关于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,告诉后端你要发送的大致是什么内容,方便服务器进行相应的解析。同时,由于设置了内容类型,也就没有中文乱码问题了。

时间: 2024-12-18 13:08:59

关于Ajax中http协议的相关文章

ajax中的stasus错误详解

一.英文版解析 0: (Uninitialized) the send( ) method has not yet been invoked. 1: (Loading) the send( ) method has been invoked, request in progress. 2: (Loaded) the send( ) method has completed, entire response received. 3: (Interactive) the response is be

jquery ajax中支持哪些返回类型以及js中判断一个类型常用的方法?

1 jquery ajax中支持哪些返回类型在JQuery中,AJAX有三种实现方式:$.ajax() , $.post , $.get(). 预期服务器返回的数据类型.如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如 XML MIME 类型就被识别为 XML.在 1.4 中,JSON 就会生成一个 JavaScript 对象,而 script 则会执行这个脚本.随后服务器端返回的数据会根据这个值解析后,传递给回调 函数.可用值: •"xml": 返回

AJAX中出现两次请求,OPTIONS请求和GET请求

在项目中发现ajax中出现两次请求,OPTIONS请求和GET请求,得到的数据出错,所以想要去掉OPTIONS请求. ajax请求如下: ajaxRequestGet: function (lastPath, requestParams, successFun) { $.ajax({ headers: { 'GISTTOKEN': getToken() }, url : this.baseUrl+lastPath, type : "get", data: requestParams,

ajax中网页传输(三)XML——下拉列表显示练习

XML:页面之间传递数据,跨平台传递 HTML:超文本标记语言,核心标签 XML的形势为 <xml version='1.0'> <Nation> <one> <code>n001</code> <name>汉族</name> </one> <two> <code>n002</code> <name>苗族</name> </two> <

ajax中网页传输(一)TEXT——带有删除功能的数据库表格显示练习

网页之间传输的三种方式:TEXT.JSON.XML. 本章将讲解带有TEXT形势的ajax网页传输 第一:body部分代码 <title>ajax中TEXT讲解并且带有删除功能的表格</title> <script src="jquery-2.0.0.min.js"></script> <style type="text/css"> .sc { width:70px; height:30px; backgr

iOS开发OC基础:OC中的协议

1.协议是一种为有源代码的类扩充方法的方式. 2.协议只是一系列方法的生命,就相当于一张任务清单,规定了要做的事情,但是具有的实施(也就是实现),是由服从该协议的类来实现.所以协议只有.h文件,并且不可以定义变量 3.协议的定义是以@protocol开头, + 协议的名字 <>(表示服从的协议)服从的协议写在<>之内,多个协议之间通过逗号来进行分隔,父协议中的内容就相当于子协议也具有这些内容,以@end结束. 下面的附件是协议的一个小例子,可以加深大家对协议的理解,看完之后一定要多

jQuery源码分析系列(33) : AJAX中的前置过滤器和请求分发器

jQuery1.5以后,AJAX模块提供了三个新的方法用于管理.扩展AJAX请求,分别是: 1.前置过滤器 jQuery. ajaxPrefilter 2.请求分发器 jQuery. ajaxTransport, 3.类型转换器 ajaxConvert 源码结构: jQuery.extend({ /** * 前置过滤器 * @type {[type]} */ ajaxPrefilter: addToPrefiltersOrTransports(prefilters), /** * 请求分发器 *

fileupload控件在ajax中无法使用

google得到的方法: 1.http://geekswithblogs.net/ranganh/archive/2008/04/01/file-upload-in-updatepanel-asp.net-ajax.aspx There is a better way of doing it with Ajax Control Toolkit version 3.0.30930 which works with .NET 3.5 SP1 and Visual Studio 2008 SP1. 

切记ajax中要带上AntiForgeryToken防止CSRF攻击

在程序项目中经常看到ajax post数据到服务器没有加上防伪标记,导致CSRF被攻击,下面小编通过本篇文章给大家介绍ajax中要带上AntiForgeryToken防止CSRF攻击,感兴趣的朋友一起学习吧 经常看到在项目中ajax post数据到服务器不加防伪标记,造成CSRF攻击 在Asp.net Mvc里加入防伪标记很简单在表单中加入Html.AntiForgeryToken()即可. Html.AntiForgeryToken()会生成一对加密的字符串,分别存放在Cookies 和 in