一、HTTP协议
1、HTTP: 计算机通过网络进行通讯的规则,用于浏览器向服务器发送请求。
2、HTTP是一种无状态的协议,无状态是指服务器端不保留任何连接相关的信息,浏览器客户端向服务器发送请求,服务器端返回响应,然后连接就关闭了,这个连接不存在任何记忆。后续的处理如果需要之前连接传递的信息,则需要重新传递。
3、完整的HTTP请求需要以下7个步骤:
(1)建立TCP连接,通常HTTP协议都是用TCP协议连接,TCP是可靠的协议。
(2)Web浏览器向Web服务器发送请求命令。
(3)Web浏览器发送请求头信息。
(4)Web服务器应答。
(5)Web服务器发送应答头信息。
(6)Web服务器向浏览器发送数据。
(7)Web服务器关闭TCP连接。
4、一个HTTP请求包含四个部分:
(1)HTTP请求的方法:GET或者POST。
(2)请求的URL,即请求的地址。
(3)请求头,包含客户端环境信息、身份验证信息等。
(4)请求体,也就是请求正文,包含客户提交的查询字符串信息、表单信息等。
5、GET方法与POST方法
(1)GET:一般用于获取信息,即查。使用URL传递参数,参数一般为用户获取信息的条件。HTTP协议默认使用的方法是GET方法,对于查询请求,GET方法是安全的,但用GET方法发送用户名和密码是不安全的,因为GET请求发送的信息对任何人都是可见的,GET请求所传输的数据都会显示在URL路径中。GET方法对所发送信息的数量有限制,一般在2000个字符。
(2)POST:一般用于修改服务器上的资源,即增、删、改等。一般是通过表单向服务器传递数据,所传递的数据并不可见,所传递的都被封装在请求体中。
6、一个HTTP相应包含三个部分:
(1)响应码:一个数字或文字组成的状态码,用来显示请求成功还是失败。
(2)响应头:包含服务器的信息,如服务器类型、日期时间、内容类型和长度等。
(3)响应体:响应正文,即返回的响应信息内容。
7、HTTP响应状态码介绍:
1XX:信息类,表示收到WEB浏览器的请求,正在进一步的处理中。
2XX:成功,表示用户的请求被正确接收、理解和处理:如200 OK。
3XX:重定向,表示请求没有成功,客户必须采取进一步的动作。
4XX:常见,客户端提交的请求有错误,比如:404 NOT FOUND,意味请求的路径不存在等。
5XX:常见,服务器错误,表示服务器不能完成对请求的处理,比如500错误。
二、使用XMLHttpRequest对象发送请求:
AJAX最重要的部分就是使用XMLHttpRequest对象发送请求,XMLHttpRequest对象针对IE7以上、Firefox、Chrome、Safari以及Opera,对于IE5和IE6则使用ActiveXObject对象,因此创建对象的方法如下:
var xmlHttpRequest;
if(window.XMLHttpRequest){//存在XMLHttpRequest,表示是IE7及其他主流浏览器。
xmlHttpRequest = new XMLHttpRequest();
}else{
xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
该对象通过两个方法发送请求。
1、open(method,url,async):
method:POST或者GET。
url:请求的路径。
async:是否异步,true表示异步,false表示同步,默认为true,AJAX一般用异步。
备注:同步和异步:同步表示同一时间只能执行一个请求,后面的请求必须等到前面的请求执行完毕才能继续执行;异步表示多个请求可以同时执行,不必等待前一个请求执行完毕,异步的请求效率远远高于同步请求。
2、send(string):发送请求,send(string)方法的String类型的参数用于传递请求的参数,由于GET方法的参数通常接在url的后面,因此在使用GET方法发送请求时,send(string)方法的参数可以不填写或者填写null;而POST方法不能通过url传递参数,因此当使用POST方法发送请求时,通常send(string) 方法String类型的参数都要填写,当然不填写也没有错,但应用情况很少。
3、XMLHttpRequest.setRequestHeader()方法
setRequestHeader()方法用于在发送HTTP请求时对请求头包含信息的设置和更改。通常有两个参数,第一个参数表示请求头中的字段名称,第二个参数表示该字段名称对应的内容。比如原始请求头:
GET /bb.asp?www=1234 HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
Host: www.e4j.cn:89
Connection: Keep-Alive
Cookie: %C3%F7%CC%EC=%B0%CB;ASPSESSIONIDASDBSDRR=BLEDBIBBCGKBJAKJCFEJKGII
调用setRequestHeader()方法对请求头信息进行更改:
xmlHttpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlHttpRequest .setRequestHeader("Content-length", paramsSend.length);
此时的请求头内容为:
GET /bb.asp?www=1234 HTTP/1.1
Accept: */*
Accept-Language: zh-cn
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)
CONTENT-TYPE:application/x-www-form-urlencoded
Host: www.e4j.cn:89
Content-length: 8
Cookie: %C3%F7%CC%EC=%B0%CB;ASPSESSIONIDASDBSDRR=BLEDBIBBCGKBJAKJCFEJKGII
xmlHttpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");设置了一个请求头,表示设置提交给服务器文本内容的编码方式是URL编码,还有其他编码方式,比如文件上传的 CONTENT-TYPE:multipart/form-data
xmlHttpRequest .setRequestHeader("Content-length", paramsSend.length);表示提交的数据的字节大小,对于采用GET方法提交的请求,由于不需要提交数据,Content-length 是无效的。
XMLHttpRequest.setRequestHeader()方法必须写在open()和send(string)方法的中间,否则会抛出异常。
4、XMLHttpRequest取得响应
responseText:获得字符串形式的响应数据。
responseXML:获得XML形式的响应数据。通常应用中都是用Json返回响应信息。
status和statusText:以数字和文本形式返回HTTP状态码
getAllResponseHeader(): 获取所有的响应报头
getResponseHeader(String string): 查询响应中的某个字段的值。
5、监听响应状态
readyState属性:
0:请求未初始化,open还没有调用。
1:服务器连接已建立,open已经调用了。
2:请求已接收,已经接收到头信息了。
3:请求处理中,已经接收到响应主体了。
4:请求已完成,响应完成了。
监听响应状态的方法:onreadystatechange事件,在readyState属性变化的时候会触发,
var request = new XMLHttpRequest();
request.open("GET","get.php",true);
request.send();
request.onreadystatechange = function(){
if(request.readystate === 4 && request.statue === 200){//readystate表示响应状态,status表示请求状态
do something;
}
}
备注:在js中两个等号和三个等号的区别,如果采用两个等号比较大小,当“==”两边的变量类型不相同时,会自动转换成相同的类型再进行比较;当采用三个等号时,“===”两边变量的类型不相同,则比较结果为不等。比如:
var a = 0, b = ‘0’; alert((a == b) + ‘–‘ + (a === b))此时看到的结果为“true–false”。
XMLHttpRequest.setRequestHeader()
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...
- C#学习笔记(基础知识回顾)之值传递和引用传递
一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...
- C#学习笔记(基础知识回顾)之值类型和引用类型
一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...
- Quartz学习笔记:基础知识
Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...
- .net学习笔记---xml基础知识
一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...
- Docker的学习笔记(一)基础知识
概述 本人最近在学习docker相关的知识,既是工作本身的需要也是自己对技术的追求的必要,以后我也会推出容器相关的随笔,既可以增长自己的知识,也可以和读者广泛交流,岂不乐乎?话不多说.第一篇先介绍do ...
- Scala学习笔记--正则表达式基础知识、如何在scala内使用
正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...
- (C/C++学习笔记) 一. 基础知识
一. 基础知识 ● 程序和C/C++ 程序: 根据Wirth (1976), Algorithms + Data Structures = Programs. Whence C: 1972, Denn ...
- C#学习笔记(基础知识回顾)之枚举
一:枚举的含义 枚举是用户定义的整数类型.在声明一个枚举时,要指定该枚举的示例可以包含的一组可接受的值.还可以给值指定易于记忆的名称.个人理解就是为一组整数值赋予意义. 二:枚举的优势 2.1:枚举可 ...
随机推荐
- Linux C 程序的开发环境
1.开发环境的构成 编辑器 vim,vi 编译器 gcc 调试器 gdb 函数库glibc 系统头文件glibc_header 2.gcc编译器 功能强大.性能优越的多平台编译器,gcc可以将c.c+ ...
- Java Synchronization
Volatile Since Java 5 the volatile keyword guarantees more than just the reading from and writing to ...
- Android相机是如何获取到图像的
在研究zxing的过程中,脑袋中一直有个疑惑,那个相机并没有拍照,它是怎么获取图像的 带着这个疑惑查看Camera源码 Camera源码中有这样一个接口: public interface Previ ...
- Good Vegetable 4级算法题 分值: [320/3120] 问题: [8/78]
1523 非回文 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 一个字符串是非回文的,当且仅当,他只由前p个小写字母 ...
- java.util.Properties类 学习笔记
学习目标: 1.认识properties文件,理解其含义,会正确创建properties文件. 2.会使用java.util.Properties类来操作properties文件. 3.掌握相对路 ...
- [原创]首次SDN比赛的记录-部分
SDN大赛环境搭建和第一大题实现 由于物理设备不足的原因,故用虚拟机实现Floodlight控制器,openvswitch(以下简称:OVS)和mininet各种要用到的SDN环境的搭建.下面将给出它 ...
- Java常用类之【日期相关类】
一.日期类 Java语言提供了2个类来处理日期 Date类 Date类以毫秒来表示特定的日期 构造方法 Date date = new Date(); System.out.println(date) ...
- nodejs - 守护进程 supervisor
1. 安装 npm -g install supervisor 2. 如果使用了expres框架 需要修改启动方式 到 package.json中的 "scripts&quo ...
- lucene全文搜索之四:创建索引搜索器、6种文档搜索器实现以及搜索结果分析(结合IKAnalyzer分词器的搜索器)基于lucene5.5.3
前言: 前面几章已经很详细的讲解了如何创建索引器对索引进行增删查(没有更新操作).如何管理索引目录以及如何使用分词器,上一章讲解了如何生成索引字段和创建索引文档,并把创建的索引文档保存到索引目录,到这 ...
- iOS,Android,Jave后台AES加密解密
AES256 在iOS和Android上的相关代码: http://www.tuicool.com/articles/RVFbmmU 里面可以下载相关的代码. 我们遇到的问题是: 把Android的代 ...