观察HTTP协议中客户端向服务器发送的请求,理解并实现一个最简单的AJAX请求案例

一.什么是HTTP协议

HTTP协议即超文本传输协议,网站就是基于HTTP协议的,例如网站的图片、CSS、JS等都是基于HTTP协议进行传输的。HTTP协议是由从客户机到服务器的请求(Request)和从服务器到客户机的响应(Response)进行了约束和规范。

大白话的说,就是你在浏览器输入一个网址,例如http://baidu.com,这时你就是向百度的服务器发送了请求了....经过一系列你看不到的处理之后,你的浏览器出现一个百度的首页,这就是百度的服务器对你的浏览器的成功的响应.

二.在浏览器的NETWORK处观察请求的报文

1.请求:客服端向服务器发起

2.响应:由服务器发出...

三.AJAX

1.Ajax 的原理简单来说通过 XmlHttpRequest 对象来向服务器发异步请求, 从服务器获得数据,然后用javascript来操作DOM而异步更新页面。

2.本质:本质是在HTTP协议的基础上以异步的方式与服务器进行通信。

3.一个简单的AJAX请求:

<form action="login.php" method="get">
    用户名:<input type="text" name="userName" id="userName"><br>
    密码:<input type="password" name="userPwd"> <br>
    <input type="submit" value="注册">
</form>

<script>
  /*需求:当输入用户名时,立即去服务器端帮我验证当前用户名是否存在*/
    document.getElementById("userName").onblur=function(){
        var name=document.getElementById("userName").value;
        /*1.创建一个能够实现异步请求的对象*/
        var xhr=new XMLHttpRequest();
        console.log(xhr.readyState);
        /*2.生成请求报文*/
        /*2.1请求报文行*/
        xhr.open("get","register.php?name="+name);
        /*2.2请求报文头*/
        /*如果是get请求就没有设置设置报文头,但是如果是post请求就必须设置Content-Type*/
        /*2.3请求报文体*/
        /*如果是get请求,那么就应该在url里面进行传递,那么 send(null)
        如果是post请求,那么才需要创建单独的请求报文体   send(username=** & pwd=**)*/
        xhr.send(null);
        /*监听服务器的响应*/
        xhr.onreadystatechange=function(){
            console.log(xhr.readyState);
            /*判断当前的响应是否成功  1.服务器做出了响应  2.响应的结果是正确的*/
            if(xhr.status==200 && xhr.readyState==4){
                console.log(xhr.readyState);
                var result=xhr.responseText;
                if(result==1){
                    alert("用户名已经存在,请重新输入");
                }
            }
        }
    }
</script>

四.总结

一个简单的AJAX请求(以post为例)

1.创建一个异步对象

var xhr=new XMLHttpRequest();

2.请求行

xhr.open(‘post‘,‘url地址‘);

3.请求体

xhr.setRequestHeader(‘Content-Type‘,‘application/x-www-form-urlencoded‘);

4.请求体

xhr.send(‘name=...&age=....‘);//浅白的说就是: 需要向上面的url里传输的数据

5.get和post请求的区别

5.1get不需要设置请求头

5.2get的数据传递通过url进行传递,而post在send方法中传递。

时间: 2024-12-24 13:19:47

观察HTTP协议中客户端向服务器发送的请求,理解并实现一个最简单的AJAX请求案例的相关文章

java实现客户端向服务器发送文件的操作

服务器源代码: import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket;

C语言 Socket入门示例2——模拟远程CMD(客户端向服务器发送命令,服务端执行该命令)

只要把上一篇文章"C语言 Socket入门示例1"中的两段程序彻底搞懂,那么再看本文就没有任何难度了,因为仅仅是对上篇文章中服务端代码的简单修改扩充.但是简单修改过后,功能变得异常强大,犹如一个远程CMD.随着不断深入学习,功能将会变得越来越强大.欢迎大家评论指点. 1.服务端(Server): #include <stdio.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.lib")

TCP协议的客户端与服务器的通信过程

使用TCP时,客户端与服务器端的通信流程 服务器初始化1)调用socket,创建文件描述符fd2) 调用bind将fd与服务器的IP与PORT绑定3)调用listen将套接字设为监听模式,准备接收客户端连接请求4)调用accept等待并接收客户端的连接请求,建立好TCP连接后,该函数会返回一个新的已连接套接字newfd 建立连接1)客户端调用socket创建文件描述符2)调用connect,向服务器发送连接请求3)connect会发送一个请求SYN段并阻塞等待服务器应答(第一次握手)4)服务器收

介绍一款chrom浏览器插件 DHC是一款使用chrome模拟REST客户端向服务器发送测试数据的谷歌浏览器插件

先打个小广告哈 公司招java架构师,月薪25K以上,负责电商平台架构工作,工作地点在北京 1号线永安里站 附近,如有意向 请把简历发我邮箱[email protected] 可以内部推荐. DHC是一款使用chrome模拟REST客户端向服务器发送测试数据的谷歌浏览器插件. DHC的开发背景 在web开发中,服务器端和客户端的开发和测试必不可少,但是测试的工作往往需要服务器端完成之后,客户端才能进行测试,这无疑延后了测试流程,导致服务器端开发完成后,无法进行充分的数据测试,很容易造成服务器端和

C语言 Socket入门示例1—— 单工通信(客户端向服务器发送消息)

如果对Windows API不太熟悉.对TCP/IP通信协议不太熟悉,或者对C语言本身不太熟悉的话,学习Socket会有点难受的.以前学习操作系统的时候,被API吓怕了,很多莫名其妙的API有着多如牛毛的参数,令人费解.学习计算机网络的时候,又有那么多的协议,并且很多协议本身比较复杂,什么三次握手建立连接,什么四次握手释放链接等等,也没有学得特别透彻.更遗憾的是,以前学C的时候,误以为自己把C学会了,误以为C就那么几个头文件而已,就一个黑框子而已. 现在,经过一段时间的痛苦磨练,又有了一些新的认

iOS 中客户端和服务器的 Web Service 网络通信

当你打开你手机上新浪微博应用或者知乎应用是,你是否会去想这些显示在手机上的图片和数据时从哪里来的?又是通过怎样的方法实现的?好,那么接下来就介绍是如何实现的,过程又是怎么样的. 当我们浏览着关注或者好友的微博时,那些图片和数据不是凭空出现的,而是通过你的客户端向服务器请求后由新浪微博的服务器返回本地所获得,通过数据的解析就能够在客户端上进行显示,甚至是操作.而这些,就是我们通常所说的 Web Service.Web Service 技术是一种通过 Web 协议提供服务,保证不同平台的应用服务可以

C语言Socket-模拟远程CMD(客户端向服务器发送命令,服务器执行该命令)

服务端(server) #include <stdio.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") //把ws2_32.lib加到Link页的连接库 #define PORT 15001 //通信的端口(指服务器端) #define ERROR 0 #define BUFFER_SIZE 1024 //注意:此Server端数据接收缓冲区 >= Client端数据发送缓冲区 ,否则造

C语言Socket-单工通信(客户端向服务器发送数据)

服务端(server) #include <stdio.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") //把ws2_32.lib加到Link页的连接库 #define PORT 15001 //通信的端口(指服务器端) #define ERROR 0 #define BUFFER_SIZE 1024 //注意:此Server端数据接收缓冲区 >= Client端数据发送缓冲区 ,否则造

LWIP协议中tcp_seg结构相关指针的个人理解

最在在研读老衲五木写的那本<嵌入式网络那些事儿:LWIP深度剖析与实战>书的时候,由于项目的需要,操作LWIP协议中TCP层的tcp_seg结构指针.遇到了问题: 对 如上图所示,其tcp_seg中的dataptr指针和payload指针全都指向了TCP数据部分.而在老衲五木的那个博客文档中确写成如下: 对应的图为: 上下存在一些出入.因此我查阅了一下tcp_enqueen()函数(在tcp_out.c中).其源代码如下: 重点在上图红箭头部分那个pbuf_header(seg->p,T