【HTTP 协议2】如何构造 HTTP 请求

文章目录

  • 前言
  • 一、地址栏输入
  • 二、HTML 特殊标签
  • 三、form 表单
  • 四、ajax
  • 总结


前言

各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你:
📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等
📗 Java数据结构: 顺序表, 链表, 堆, 二叉树, 二叉搜索树, 哈希表等
📘 JavaEE初阶: 多线程, 网络编程, TCP/IP协议, HTTP协议, Tomcat, Servlet, Linux, JVM等(正在持续更新)

上篇文章介绍了HTTP协议的报文格式, 分析了请求报文和响应报中需要掌握的属性或字段, 本篇主要介绍如何构造一个HTTP请求


提示:是正在努力进步的小菜鸟一只,如有大佬发现文章欠佳之处欢迎批评指点~ 废话不多说,直接上干货!

一、地址栏输入

在地址栏输入一个 URL, 访问页面就会发送 GET 请求

比如在地址栏输入百度的域名 :
在这里插入图片描述

抓到的包显示, 发送了一个 GET 请求, 响应就是百度的 HTML 页面

在这里插入图片描述


二、HTML 特殊标签

HTML 中的 link, img, script, a 标签都会触发 GET 请求(前提是访问网络资源而不是本地资源)

在浏览器打开 HTML 文件后, 加载完所有的标签, 会根据以上这些标签给服务器发送 GET 请求以获取网络资源


三、form 表单

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

form 表单只能发送 GET 或 POST 方法的请求, 其他的方法不可以

  • 编写一个简单的 form 表单来构造 GET 请求 :
	<!-- action里是要访问的url, method指定请求的方法 --><form action="https://www.baidu.com/abc" method="get"><input type="text" name = "a"><input type="text" name = "b"><input type="submit" value="提交"></form>
  • 运行这段代码 :

在这里插入图片描述

  • 分别填写 111999, 点击提交, 会发现 404 了, 因为我们的 URL 是随便写的, 根本不存在, 但不影响我们发送请求

在这里插入图片描述

  • 通过抓包工具可以看到我们发送成功了 GET 请求

在这里插入图片描述

  • 观察 form 代码和这个 GET 请求之间的关系 :
    在这里插入图片描述

  • 刚刚的 form 代码中把 method=“get” 改成 method=“post”, 来构造一个 POST 请求
	<!-- action里是要访问的url, method指定请求的方法 --><form action="https://www.baidu.com/abc" method="post"><input type="text" name = "a"><input type="text" name = "b"><input type="submit" value="提交"></form>
  • 展示效果不变, 还是依次输入 111999 点击提交 :
    在这里插入图片描述

  • 依然404, 因为 URL 是瞎写的, 但不影响抓包, 可以看到构造成功了一个 POST 请求

在这里插入图片描述

  • 观察 form 代码和 POST 请求的关系 :
    在这里插入图片描述

综上:
1, form 表单构造请求, 根据代码中 name 的值会形成健, 用户输入的会形成值, 这二者结合成键值对
2, 如果是 GET 请求, form 构造的数据以 query string 的形式被携带在 URL 中, 如果是 POST 请求, 数据在请求报文的 Body 中

版本号默认为HTTP/1.1


四、ajax

目前 ajax 是最主流的前后端交互方式之一

ajax 全称 Asynchronous Javascript And XML, 是 2005 年提出的一种 JavaScript 给服务器发送HTTP 请求的方式

Asynchronous, 意思是异步, 反义词是同步
在多线程场景下, 同步是指多个线程可以同时访问同一个资源, 加了(互斥)锁之后就必须阻塞等待
在当前 IO 场景下, 同步是指请求的发起者, 自行获取响应, 异步是指, 请求的发起者不关心相应的结果, 由响应者把响应结果推送请求者

ajax 就是前后端异步交互的方式, 由于JavaScript 提供的原生 API 比较难用, 我们使用 jQuery 提供的 ajax API 来构造请求 :

在这里插入图片描述

可惜的是, 这个代码会报错

因为 ajax 的保护机制, 不允许跨域访问, 此处运行 ajax 的服务器和要访问的服务器域名不一致, 关于跨域问题暂时不多做讨论, 将来自己做网站, 自己的页面访问自己的服务器, 自然就没有跨域问题了

另外, 不只是 JS 可以, Java, C++, Pyhon等能够操作网络的语言, 都可以构造 HTTP 请求


总结

以上就是本篇的全部内容, 主要介绍了如何 构造HTTP 协议的请求

如果本篇对你有帮助,请点赞收藏支持一下,小手一抖就是对作者莫大的鼓励啦😋😋😋~


上山总比下山辛苦
下篇文章见

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/7576.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MFC多文档绘制不同图形

VC6新建一个多文档项目&#xff1b;根据窗口标题的最后数字&#xff0c;绘制不同图形&#xff1b; void CPrdView::OnDraw(CDC* pDC) {CPrdDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereCString str1 pDoc->GetTitle();CPoin…

JumpServer开源堡垒机页面配置

JumpServer开源堡垒机页面配置 一、登录二、功能模块2.1、控制台2.1.1、用户管理2.1.1.1、用户列表2.1.1.2、用户组 2.1.2、资产管理2.1.2.1、资产列表2.1.2.1.1、创建服务器链接2.1.2.1.2、创建数据库MySQL链接 2.1.2.2、网域列表2.1.2.3、平台列表2.1.2.4、标签列表 2.1.3、账…

Type-c取电方案

如今随着这几年的USB-C PD适配器的普及&#xff0c;消费者手上的PD协议适配器越来越普遍&#xff0c;如何让微软surface 充电器线支持使用PD适配器快充&#xff1f;加入一颗受电端PD协议取电芯片——LDR6328能够完美的兼容市面上的PD适配器&#xff0c;支持不同的电压输出。 1…

打包apk时出现Execution failed for task ‘:app:lintVitalRelease

程序可以正常运行&#xff0c;但是打包apk的时候报Execution failed for task ‘:app:lintVitalRelease导致打包失败&#xff0c;原因是执行lintVitalRelease失败了&#xff0c;存在错误。解决办法&#xff1a;在app模块的build.gradle的Android里面添加如下代码&#xff1a; l…

剑指offer刷题笔记--Num31-40

1--栈的压入、弹出序列&#xff08;31&#xff09; 直观思路&#xff1a;用两个指针 i 和 j 指向压入和弹出的 vector&#xff0c;终止条件是&#xff1a;所有元素都压入了辅助栈&#xff08;i > len&#xff09;&#xff0c;且辅助栈当前的栈顶元素与弹出的元素 popped[j] …

跨境干货|Etsy安全入驻开店攻略

2023了&#xff0c;跨境电商现在上车还来得及吗&#xff1f;当然&#xff01;Etsy是一个低成本低竞争高回报的平台&#xff0c;相较于其他电商平台&#xff0c;他的佣金非常低&#xff0c;利润率更高&#xff0c;非常合适跨境小白入局。 但由于目前Etsy关闭了中国大陆卖家的注…

[SpringBoot]Spring Security框架

目录 关于Spring Security框架 Spring Security框架的依赖项 Spring Security框架的典型特征 关于Spring Security的配置 关于默认的登录页 关于请求的授权访问&#xff08;访问控制&#xff09; 使用自定义的账号登录 使用数据库中的账号登录 关于密码编码器 使用BCry…

vue3 异步组件

vue3中使用异步组件 vue3中使用异步组件可以解决两个问题&#xff1a; 1.提升性能&#xff08;类似于懒加载&#xff09; 2.分包 下载插件 npm i vueuse/core -S 1.提升性能&#xff08;懒加载&#xff09; 父组件 <template><div><h1>异步组件</h1&g…

Scala集合与Java集合的互转函数asScala与asJava

只有引入隐式转换类 JavaConverters&#xff0c;才能使用Scala集合与Java集合之间的转换函数。 为方便理解&#xff0c;看下面的例子&#xff1a; import scala.collection.JavaConverters._ val javaList java.util.Arrays.asList("hi", "bye") val sca…

RabbitMQ - 死信队列,延时队列

Time-To-Live and Expiration — RabbitMQ 一、死信队列 Dead Letter Exchanges — RabbitMQ 死信队列&#xff1a; DLX 全称&#xff08;Dead-Letter-Exchange&#xff09;,称之为死信交换器&#xff0c;当消息变成一个死信之后&#xff0c;如果这个消息所在的队列存在x-d…

Hive(15):Table(表)DDL操作

1 Describe table Hive中的DESCRIBE table语句用于显示Hive中表的元数据信息 describe formatted [db_name.]table_name; describe extended [db_name.]table_name; 如果指定了EXTENDED关键字,则它将以Thrift序列化形式显示表的所有元数据。如果指定了FORMATTED关键字,则它…

赛效:怎么在线给Word文档加图片水印

1&#xff1a;在电脑网页上打开云组件&#xff0c;点击“Word转换”菜单里的“Word加水印&#xff08;图片&#xff09;”。 2&#xff1a;点击选择文件添加Word文档。 3&#xff1a;点击“选择水印图片”上传做水印的图片。 4&#xff1a;水印图片添加成功后可以选择水印角度&…