构造HTTP请求
上篇文章:
HTTP协议https://blog.csdn.net/sniper_fandc/article/details/147166900?fromshare=blogdetail&sharetype=blogdetail&sharerId=147166900&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link
目录
1 form表单构造HTTP请求
1.1 GET请求
1.2 POST请求
2 ajax构造HTTP请求
2.1 ajax介绍
2.2 引入jQuery
(1)方法1:引入网络地址
(2)方法2:把jQuery的内容拷贝到本地使用
2.3 ajax发送请求
(1)基本使用
(2)跨域问题
1 form表单构造HTTP请求
form表单只支持GET和POST请求:
1.1 GET请求
<form action="https://www.baidu.com/" method="GET">
<input type="text" name="userName">
<input type="password" name="password">
<input type="submit" value="提交">
</form>
使用form表单构造GET请求,action是请求的地址,method是请求的方法,而input标签中name和输入的数据就构成了查询字符串query string,当点击提交时,GET请求就会发送到百度的服务器地址,然后默认返回百度搜索引擎的首页,使用Fiddler抓包,关键信息如下(注意请求的数据没有放在body中):
1.2 POST请求
<form action="https://www.baidu.com/" method="post">
<input type="text" name="userName">
<input type="password" name="password">
<input type="submit" value="提交">
</form>
使用GET方法发现有个问题,用户名和密码被显示在URL中了,因此实际中登录更多使用的是POST方法,它会把数据放在body中。
注意:这不意味着POST比GET更安全,因为通过抓包,也会看到用户名和密码,实际上安全性的保证是通过加密机制实现的。
2 ajax构造HTTP请求
2.1 ajax介绍
ajax全称Asynchronous Javascript And Xml,是一种浏览器和服务器异步交互数据的方式。
Asynchronous是异步的意思,网络IO的同步和异步是指客户端等待结果的方式(多线程的同步的含义是互斥),客户端主动获取服务器的结果是同步,客户端等待服务器把结果推送给自己是异步。而同步和异步又可以延伸为同步阻塞(死循环主动获取)、同步非阻塞(边做其他事边主动获取)、异步阻塞(死循环等待结果的推送)和异步非阻塞(边做其他事边等待推送结果的推送)。
浏览器提供给JS的原生的ajax的API是XMLHttpRequest,并不好用,这里使用JS的第三方库jQuery封装的ajax的API:
2.2 引入jQuery
(1)方法1:引入网络地址
打开jQuery CDN,选择要引入的版本,把网络地址复制粘贴到html文件中:
这种方式有可能因为网络问题导致无法正常使用(CDN服务器在国外)。
(2)方法2:把jQuery的内容拷贝到本地使用
打开jQuery的网络地址复制全部内容,本地创建js文件,把内容粘贴进去,引用该文件的本地文件路径即可。
由于我的jQuery.min.js文件和html在同一级目录下,因此直接使用相对路径即可引用。
2.3 ajax发送请求
(1)基本使用
<script>
$.ajax({
type: 'get',
url: '请求的地址',
data: 'body中数据,也可以没有',
success: function(body){
// 回调函数:不会被立即执行,而是等待响应后再调用(异步的体现)
// body参数是http响应中的body
}
});
</script>
$是jQuery的一个对象,内部包含ajax函数,该函数允许接受对象类型的参数。type表示请求的方法,包括http协议允许的多种;url是请求的资源的地址;data表示在请求的body中放入的参数;success: function(body)是回调函数,不会被立即执行,如果响应成功返回,才会执行触发浏览器调用该函数,这也是ajax异步特性的体现。如果响应返回,调用success: function(body)时,就可以从body参数中获取响应中body存储的数据,进一步按需求操作。
注意:这里的url参数的写法,如果是/开头说明是绝对路径,就必须写全,比如要访问的路径是http://localhost:8080/firstServlet/hello,这是在firstServlet项目中某个方法的路径hello,因此要访问这方法的绝对路径就必须写成/firstServlet/hello。如果不以/开头,就说明是相对路径,此时如果写成url: 'hello',就说明hello所标识方法所在的文件一定和该html页面在同一级目录,即/firstServlet/xxx.html(注意:实际开发中,所有的xxx.html都是放在项目中的webapp目录下,让Tomcat可以找到,即访问路径时webapp省略,也就是省略后在同一级)和/firstServlet/hello。
(2)跨域问题
如果在当前域名下请求的url是其他服务器域名地址,就会出现“跨域”问题。即一个域名默认不允许通过ajax请求访问另一个域名的服务器(比如不允许搜狗在页面中的代码请求访问百度服务器),这是浏览器的默认行为,除非另一个域名的服务器允许跨域。
下篇文章: