HTTP响应

HTTP响应分为四个部分:

  1. 首行:HTTP/1.1(首行)  200(状态码)  OK(状态码描述)
  2. header:
  3. 空行:表示header的结束标记
  4. body:正文

HTTP状态码:描述了这次响应的结果(成功??失败??原因是啥??

  • 200:OK:成功了
  • 404:NOT FOUND:访问资源不存在——》在服务器中没找到
  • 403:FORBIDDEN:访问被拒绝(没有权限)
  • 302:Move trmporarily:重定向(类似于呼叫转换)

    教务系统申请个域名,过了一段时间,要换个域名,若换了域名,那么,老学员咋整??可以配置个重定向,如果老学员访问旧域名,则自带跳转到新的域名

    302这样的响应报文中,会在header里带有个location属性,通过这个属性来描述要跳转到哪个新的地址??

    所谓的重定向是指:可以重定向到外部资源的(跳转到别的网站)

下面我们来看一个图,来了解一下重定向与请求转发之间的区别??

  • 505:服务器内部错误(服务器代码抛异常了)
  • gateway timeout(响应时间太久了,浏览器等不了了)

其实,这么多状态码,可以分为几个大类的:

  • 2**:成功
  • 3**:重定向
  • 4**:客户端错误
  • 5**:服务器错误

HTTP协议里,有不少地方是程序员可以自定义的!!

  1. URL中的路径
  2. URL中的query string
  3. header中的键值对
  4. header中的cookie的键值对
  5. body

学习HTTP很好的办法,就是写爬虫,写一个程序,作为HTTP客户端,构造各种HTTP请求,通过这些请求,来获取你想要的一些效果~~,当然,爬虫犯法,轻易不做!!

那么,我们如何来构造一个HTTP请求呢??(代码)

对于GET/POST请求,我们可以通过form标签来进行构造,这也是比较常见/重要的前后端交互的方式!

对于GET请求,可以通过在form标签中设置method属性为"get"来构造HTTP请求。例如:

<body>
    <form action="https://sogou.com" method="get">
        <input type="text" name="key" value="value">
        <input type="submit" value="提交">
      </form>      
</body>
在这个例子中,当用户点击提交按钮时,浏览器会发送一个GET请求到"https://sogou.com"。

根据结果,我们可以看到,这个请求,搜狗的服务器没有做啥特别的处理,仍然是普普通通的返回搜狗的主页了!!

当然,在后续咱们自己写的服务器代码,就可以根据需要,来获取URL中的query string ,从而完成不同的功能!!

form标签只能构造GET和POST,无法构造PUT,DELETE,OPTIONS等方法的请求!!

另外还有一种功能更强大的,构造http请求的方式,Ajax(读法:阿加克斯)

Ajax也是浏览器提供的一种,通过js构造http请求的方式!!

a——》异步的!asynchronize

  1. 同步的等待:我一直死死盯着女神宿舍门口,等待对象一露头,就立马扑上去!
  2. 异步的等待:我找个阴凉地方坐下,并拿出一本Java书,读得津津有味,等到对象出来以后,她再来喊我~~

综上:A等待B

  • 同步:A始终盯着B,A负责关注B啥时候就绪
  • 异步:A不盯着B,B就绪之后主动通知A

HTML中,通过Ajax的方式发起HTTP请求,就属于“异步”的方式!

这一行代码执行“发送请求”,操作之后,不必等待服务器响应回来,就可以立即先往下执行,当服务器的响应回来了之后,再由浏览器通知到咱们的代码中!

那么,在代码中,如何使用Ajax呢??

  1. js原生提供了Ajax的api,但是原生api特别难用!!
  2. jquery提供的Ajax,api针对原生api的封装,简单很多!!
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- <form action="https://sogou.com" method="get">
        <input type="text" name="key" value="value">
        <input type="submit" value="提交">
      </form>       -->
      <!-- 引入jquery -->
      <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
      <script>
            $.ajax({
   
    type: "GET",
    url: "https://www.sogou.com?studentName=zhangsan",
    success: function(data) {
        console.log("当服务器返回的响应达到浏览器之后,浏览器触发该回调,通知到咱们的代码中");
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log("请求失败,错误信息:", textStatus, errorThrown);
    }
    });
    console.log("浏览器立即往下,执行后续代码");

      </script>
</body>
</html>

注意:该代码直接执行,只能看到构造的请求,无法获取到正确的响应,因为,发送请求给搜狗的服务器,人家的服务器没有处理咱们的响应,等后面咱们自己能写服务器了之后,就可以给咱们自己的服务器发请求,自然就能够处理了!!

和form标签相比,Ajax功能更强!

  1. Ajax支持PUT ,DELETE等方法
  2. Ajax发送的请求可以灵活设置header
  3. Ajax发送的body也是可以灵活设置的

测试——》免不了需要构造HTTP,写代码构造吗??

其实还有更方便的构造HTTP请求的方式:使用第三方工具:postman

postman(课堂上使用的,也是未来在各大公司经常用的)

postman可以生成构造请求的代码,方便咱们在自己的程序中集成!!

 HTTPS——》HTTP+安全层(SSL):SSL是用来加密的协议(SSL/TLS)

在这里,就需要提一下:臭名恶照的运营商劫持事件!

网络上,如果文明传输数据是非常危险的!!需要加密才能保证安全!!

HTTPS其实主要是涉及到其中的SSL部分!

SSL并非仅仅是在HTTPS中使用,在其他地方也可也使用!

进行安全传输核心就是加密!

加密:其中一种最简单有效的办法,叫做:对称加密!!

a(明文)+key(密钥)——》b(密文)  :加密的过程

b(密文)+key(密钥)——》a(明文)  :解密的过程

对称加密的安全性的前提是:密钥不能被黑客知道!!

非对称加密:

服务器生成的一对密钥:公钥+私钥

明文+公钥——》密文  :使用公钥加密

密文+私钥——》明文  :使用私钥解密

当然反过来也可以:

明文+私钥——》密文  :使用私钥加密

密文+公钥——》明文  :使用公钥解密

公钥可以公开,私钥是私藏的!

在这儿就不得不说一下著名的:中间人攻击事件了!(感兴趣的可 自行百度搜索)中间人攻击_百度百科

解决中间人攻击的关键,在于让客户端能够辨别,当前这个响应(公钥)是服务器真实的公钥

这就需要引入一个“证书”(本质上是引入第三方的公证机构!)

  1. 引入对称加密,针对业务数据
  2. 让服务器生成一对非对称密钥,公钥1 和私钥1,把公钥1连同证书一起发送给客户端(自己持有私钥)
  3. 客户端拿到证书进行校验,拿着颁发证书的认证机构提供的公钥2,对于证书的签名进行解密,计算校验和是否匹配
  4. 客户端拿着服务器发来的公钥1针对对称密钥进行加密,发给服务器!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL-DML【数据操作语言】(图码结合)

目录 &#x1f6a9;DML的定义 &#x1f449;DML-添加数据 &#x1f393;给指定的字段添加数据 &#x1f576;️查询表数据的方式 ❗疑惑点一【Affecter rows:行数】 ❗疑惑点二【字符集问题】 &#x1f393;给全部字段添加数据 &#x1f393;批量添加数据 &#x1f…

得帆北区总经理——湛颂:得帆云iPaaS平台是满足企业集成需求的利器

后ERP时代的IT变革 在过去的许多年里&#xff0c;企业的IT发展往往都是根据各业务部门的需求而引入大量系统。十年前&#xff0c;面对制造业的客户群体&#xff0c;当他们已经引入了ERP、CRM、WMS、MES、TMS、HR、LIMS等业务系统的时候&#xff0c;我就在讲一个话题——后ERP时…

YOLOv5算法改进(20)— 如何去写YOLOv5相关的论文(包括论文阅读+规律总结+写作方法)

前言:Hello大家好,我是小哥谈。最近一直在阅读关于YOLOv5的相关论文,读着读着我发现一条可以发论文的规律,特此简单总结一下,希望能够对同学们有所启迪!🌈 前期回顾: YOLOv5算法改进(1)— 如何去改进YOLOv5算法

GitHub commit时出现 无法访问443 Operation timed out的解决办法

GitHub commit时出现 无法访问443 Operation timed out的解决办法 1.问题描述2. 环境3.解决方法4.如果上述方法不行&#xff0c;那就再试一试下面这个方法4.1 首先确认自己的网页可以打开github4.2 按照如下配置http和https代理4.2.1 找端口号 5. 参考链接 1.问题描述 当使用g…

thinkphp 解决跨域的三个方式

1. 在tp入口index.php 加上header //支持跨域 header("Access-Control-Allow-Origin:*"); header(Access-Control-Allow-Methods:*); header(Access-Control-Allow-Headers:x-requested-with, content-type,token); 2. 在route.php加上 allowCrossDomain()&#xff…

吐血整理,Jmeter服务端性能测试-线程阻塞问题案例分析(超细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、Jstack打印快照…

【HarmonyOS】元服务卡片展示动态数据,并定点更新卡片数据

【关键字】 元服务卡片、卡片展示动态数据、更新卡片数据 【写在前面】 本篇文章主要介绍开发元服务卡片时&#xff0c;如何实现卡片中动态显示数据功能&#xff0c;并实现定时数据刷新。本篇文章通过实现定时刷新卡片中日期数据为例&#xff0c;讲述展示动态数据与更新数据功…

Banana Pi BPI-W3 ArmSoM-W3之RK3588-MIPI-DSI屏幕调试笔记

一. 简介 本文是基于RK3588平台&#xff0c;MIPI屏调试总结。 二. 环境介绍 硬件环境&#xff1a; ArmSoM-W3 RK3588开发板、MIPI-DSI显示屏( ArmSoM官方配件 )软件版本&#xff1a; OS&#xff1a;ArmSoM-W3 Debian11 三. MIPI屏幕调试 3.1 调试总览&#xff0c;调试步骤分…

[尚硅谷React笔记]——第5章 React 路由

目录&#xff1a; 对SPA应用的理解对路由的理解前端路由原理路由的基本使用路由组件与一般组件NavLink的使用封装NavLink组件Switch的使用解决样式丢失问题路由的模糊匹配与严格匹配Redirect的使用嵌套路由向路由组件传递params参数向路由组件传递search参数.向路由组件传递st…

第四章 文件管理 四、文件的物理结构(文件分配方式)

目录 一、文件块&#xff0c;磁盘块 二、连续分配 1、定义&#xff1a; 2、计算方式&#xff1a; 3、注意&#xff1a; 4、优点&#xff1a; 5、缺点&#xff1a; 6、总结 三、链接分配----隐式链接 1、定义&#xff1a; 2、如何实现逻辑块号转物理块号 3、优点&…

J2EE的N层体系结构

J2EE平台采用了多层分布式应用程序模型&#xff0c;实现不同逻辑功能的应用程序被封装到不同的构件中&#xff0c;处于不同层次的构件可被分别部署到不同的机器中。 RMI/IIOP&#xff1a;RMI&#xff08;Remote Method Invocation&#xff0c;远程方法调用&#xff09;是Java的…

AUTOSAR AP 硬核知识点梳理(2)— 架构详解

一 AUTOSAR 平台逻辑体系结构 图示逻辑体系结构描述了平台是如何组成的,有哪些模块,模块之间的接口是如何工作的。 经典平台具有分层的软件体系结构。定义明确的抽象层,每个抽象层都有精确定义的角色和接口。 对于应用程序,我们需要考虑使用的软件组件,希望它们是可重用的…

Windows Server扩展卷变灰怎么办?

当Windows Server中的某一个分区&#xff0c;特别是系统&#xff08;C&#xff09;分区磁盘空间不足时&#xff0c;您可能需要使用内置磁盘管理工具的“扩展卷”功能扩展分区了。但不幸的是&#xff0c;当您尝试扩展C盘驱动器时&#xff0c;很有可能会出现Windows Server扩展卷…

SystemVerilog Assertions应用指南 Chapter1.38在序列匹配时调用子程序

SVA可以在序列每次成功匹配时调用子程序。同一序列中定义的局部变量可以作为参数传给这些子程序。对于序列的每次匹配,子程序调用的执行与它们在序列定义中的顺序相同。 module sub;logic a, b, clk;initial $vcdpluson();initial begin clk 1b0; a1b0; b1b0; repeat(2) (pos…

python实验16_网络爬虫

实验16&#xff1a;网络爬虫 1.实验目标及要求 &#xff08;1&#xff09;掌握简单爬虫方法。 2. 实验主要内容 爬取中国票房网 ① 爬取中国票房网&#xff08;www.cbooo.cn)2019年票房排行榜前20名的电影相关数据 代码部分: import time from selenium.webdriver impor…

3,4,6,9,?,18

3,4,6,9,?,18 逐步变大的递增数组 分析一&#xff1a; 3 6 -1 4 x 2 4 9 -1 6 x 2 6 &#xff1f; -1 9 x 2 &#xff1f; 13 9 18 -1 &#xff1f; x 2 &#xff1f; 13 分析二&#xff1a; 4 - 3 1 6 - 4 2 9 - 6 3 &#xff1f;- 9 4 …

华为OD技术面试-最短距离矩阵(动态规划、广度优先)

背景 记录2023-10-21 晚华为OD三面的手撕代码题&#xff0c;当时没做出来&#xff0c;给面试官说了我的想法&#xff0c;评价&#xff1a;解法复杂了&#xff0c;只是简单的动态规范 或 广度优先算法&#xff0c;事后找资料记录实现方式。 题目 腐烂的橘子 问题描述&#xff…

【计算机网络】UDP的报文结构和注意事项

UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是一种无连接的协议&#xff0c;它在传输层中提供了简单、不可靠的数据传输服务。与TCP&#xff08;Transmission Control Protocol,传输控制协议&#xff09;不同&#xff0c;UDP不需要建立连接&…

如何理解Go言中的Context?

目前看过除了《go语言程序设计》以外最好的教程&#xff1a;https://www.practical-go-lessons.com 原文&#xff1a;https://www.practical-go-lessons.com/chap-37-context 你将在本章中学到什么&#xff1f; 1.什么是上下文&#xff1f; 2.什么是链表&#xff1f; 3.如何…

基于卷积优化优化的BP神经网络(分类应用) - 附代码

基于卷积优化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于卷积优化优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.卷积优化优化BP神经网络3.1 BP神经网络参数设置3.2 卷积优化算法应用 4.测试结果…