构造HTTP请求

导读:本篇文章讲解 构造HTTP请求,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

一、浏览器自己构造

1)地址栏里写URL,构造出GET请求
2)点击a标签等,也会构造GET请求
3)img、link、script也会构造GET请求

二、通过 form 表单构造

form (表单) 是 HTML 中的一个常用标签。可以用于给服务器发送 GET 或者 POST 请求。

form 的重要参数:

  • action:构造的 HTTP 请求的 URL 是什么
  • method:构造的 HTTP 请求的 方法 是 GET 还是 POST (form 只支持 GET 和 POST)

input 的重要参数:

  • type:表示输入框的类型:text 表示文本;password 表示密码;submit 表示提交按钮
  • name:表示构造出的 HTTP 请求的 query string 的 key;query string 的 value 就是输入框的用户输入的内容
  • value:input 标签的值。对于 type 为 submit 类型来说,value 就对应了按钮上显示的文本

name 也就决定了使用 getParameter 获取键值对的值时,传入的参数是什么 ~~

构造一个GET请求:(在VSCode中编写form.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>form</title>
</head>
<body>
    <form action="http://www.sogou.com" method="get">
        <input type="text" name="aa">
        <input type="text" name="bb">
        <input type="submit" value="提交">
    </form>
</body>
</html>

打开form.html文件,在输入框随便填写数据:
在这里插入图片描述
点击 “提交”,此时就会构造出 HTTP 请求并发送出去~~

此时打开的页面:
在这里插入图片描述

就把参数 (键值对) 构造到 查询字符串 (query string) 中了!!!

在这里插入图片描述

form最关键的作用,就是给服务器传键值对!


同理,构造一个POST请求:(在VSCode中编写form.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>form</title>
</head>
<body>
    <form action="http://www.sogou.com" method="post">
        <input type="text" name="aa">
        <input type="text" name="bb">
        <input type="submit" value="提交">
    </form>
</body>
</html>

输入11、22并用Fiddler进行抓包,得到:

在这里插入图片描述

在这里插入图片描述
就把参数 (键值对) 构造到 请求正文 (body) 中了!!!

三、通过 ajax 构造

从前端角度,除了浏览器地址栏能构造 GET 请求,form 表单能构造 GET 和 POST 之外,还可以通过 ajax 的方式来构造 HTTP 请求,并且功能更强大!

ajax 全称 Asynchronous Javascript And XML,是 2005 年提出的一种 JavaScript 给服务器发送 HTTP 请求的方式。
特点是可以不需要 刷新页面 / 页面跳转 就能进行数据传输。
页面跳转不是一个好事:开销大、时间慢、用户就得等,使用ajax不去触发跳转就可以达到 “局部刷新” 这样的效果 ~~

Asynchronous (异步):
是不是觉得很眼熟?之前学习多线程时有一个重要的锁:synchronized,同时也是 “同步” 的意思。
“同步”有两层含义,彼此之间没有联系:

  1. 指 “互斥”:多线程锁 synchronized;
  2. 谁发起的请求,谁负责接收结果:在网络通信 / IO操作的时候涉及到。

异步,是与第2个同步相对的,表示的是:发起请求的主体,不负责接受结果,而是由别人主动推送过来。
(举个快餐店的例子:同步相当于我点的单,我自己把饭端走;异步相当于我点的单,服务员把饭端上来了)

在 JavaScript 中可以通过 ajax 的方式构造 HTTP 请求:

ajax API 是属于浏览器原生自带的,但原生的API不太好用。因此,就可以使用第三方库封装好的API来代替原生的API。这里我们使用 jquery (js圈子里最知名的第三方库之一) ~~

可以直接通过网络地址把 jquery 引入到代码中:http://libs.baidu.com/jquery/2.0.0/jquery.min.js

代码示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
	<!-- 使用 ajax 需要引入 jquery 库!!! -->
    <script src="https://code.jquery.com/jquery-3.6.1.min.js"></script>
    <script>
        $.ajax({
            type: 'get',
            url: 'https://www.sogou.com',
            // data: 'http 请求的 body',    // 参数
            // contentType: 'x-www-form-urlencoded',   // post请求加上
            success: function(body) {
                // 服务器返回一个正确的响应 (200)
                // 就会由浏览器调用这个 success 对应的函数,来处理响应
                // 参数 body 就是响应的正文
                console.log("ok");
            },
            error: function() { 
                // 服务器返回一个错误的响应
                // 就会由浏览器调用这个 error 对应的函数
                console.log("error");
            }
        });
    </script>
</body>
</html>

需要传参的情况:
在这里插入图片描述

这里先由服务器返回 正确 / 错误,然后才由浏览器调用相对应的函数 (回调函数),就做到了 “异步”。

$ 是 jquery 中特殊的变量名,是 jquery 里的全局对象 (但是更推荐使用 jQuery.)。通过这个对象,就可以调用里面的一些方法,这些方法就是 jquery 的 API。虽然 ajax 方法的参数只有一个,但是里面是个对象 ~~

直接将代码在浏览器中运行,会报错:
在这里插入图片描述

跨域:一个页面在域名A之下,尝试通过ajax访问域名B里的资源。
这种情况,浏览器默认是禁止的。除非B网站返回的响应明确告诉浏览器说允许跨域访问。
市面上看到的大部分网站 / 服务器基本都是不允许跨域的 ~~

在这里插入图片描述

针对跨域,最好的办法就是 自己写一个服务器,页面放到自己的服务器上,访问咱们自己服务器的资源。(后面讲解servlet~)

四、通过 Postman 构造

官网下载即可,操作简单又方便 ~~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118569.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!