JAVAEE初阶相关内容第二十弹--HTTP协议【续集】

写在前:在前一篇博客中我们初步掌握了HTTP(超文本传输协议)的相关知识【点击跳转】,认识了HYYP协议的工作过程,掌握抓包工具Fiddler的使用。在“方法”中重点需要理解“GET”方法与“POST”方法的格式与内容,并了解了请求“报头”中的相关内容。

本篇博客将继续学习记录关于HTTP的相关内容,重点掌握关于HTTP响应的“状态码”,构造HTTP请求的方法,以及关于HTTPS的内容[对称加密、非对称加密、证书]

目录

1. 关于HTTP请求内容的补充

1.1 理解登录过程

1.2 认识"请求正文"(body)

1.2.1 application/x-www-form-urlencoded

1.2.2 form-data

1.2.3 application/json

2. HTTP响应

2.1 包含四部分

2.2 HTTP状态码--面试

2.2.1 常见状态码

2.2.2 状态码小结

2.3 HTTP协议报文格式总结

3. 构造HTTP请求

3.1 通过form表单

3.1.1 发送GET请求

(1) form重要参数

(2) input重要参数

3.2 通过ajax

4. HTTPS--面试

4.1 HTTPS是什么

4.2 “加密”是什么

4.3 HTTPS的工作过程

4.4 引入对称加密

4.5 引入非对称加密

4.6 引入证书


1. 关于HTTP请求内容的补充

1.1 理解登录过程

登录操作可以分成登录请求、登录响应、访问其他页面三个大部分,下面通过图示的方式进行更直观的理解。

1.2 认识"请求正文"(body)

正文中的内容格式和header中的Content-Type密切相关。

1.2.1 application/x-www-form-urlencoded

1.2.2 form-data

1.2.3 application/json

2. HTTP响应

2.1 包含四部分

HTTP响应包含四个部分:首行、header、空行(header的结束标志)、body

2.2 HTTP状态码--面试

状态码(status code),状态码表示访问一个页面的结果[是访问成功还是失败,还是其他情况]

2.2.1 常见状态码

状态码

含义
200 OK访问成功
404 Not Found没有找到资源
403 Forbidden拒绝被访问,有的页面通常需要用户具有一定的权限才能访问,没有登录直接访问,则可能会出现403
405 Method Not Allowed不支持方法
500 Internal Server Error服务器出现内部错误,一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生
504 Gateway Timeout当服务器负载比较大的时候,服务器处理单条请求的时候消耗的时间就会很长,就可能会导致出现超时的情况。
302 Move temporarily临时重定向--手机“呼叫转移”
301 Moved Permanently永久重定向,当浏览器收到这种响应的时候。后续的请求都会被自动改成新的地址

2.2.2 状态码小结

1等、2成功、3重定向、4客户端错误、 5服务器错误

2.3 HTTP协议报文格式总结

RequestResponse
请求行 Method URL Version状态行 Version 状态码 状态码描述
请求报头响应报头
空行空行
请求正文请求正文

3. 构造HTTP请求

对于GET【地址栏直接输入、点击收藏夹、html中的 link script img a 、form标签】

3.1 通过form表单

3.1.1 发送GET请求

(1) form重要参数

action:构造的HTTP请求的URL是什么

method:构造的HTTP请求的方法是GEThaishiPOST(form只支持GET和POST)

(2) input重要参数

type:表示输入框的类型,text(文本)、password(密码)、submit(提交)。

name:表示构造出的HTTP请求的query string 的key,query string的value就是输入框的用户输入的内容。

value:input标签的值,对于type为submit类型来说,value就对应了按钮上显示的文本。

 <form action="https://www.baidu.com" method="get">
    <input type="text" name="userId">
    <input type="submit" value="提交">
</form>

3.2 通过ajax

ajax也是浏览器提供的一种通过js构造http请求的方式【Asynchronous Javascript And XML】

    <script>
        $.ajax({
            type:'get',
            url:'https://www.baidu.com?studentName=zhangsan',
            //此处 success 就声明了一个回调函数,就会在服务器响应返回到浏览器的时候触发该回调
            //正是此处的 回调 体现了“异步+”
            success:function(data){
                console.log("当服务器返回响应到达浏览器之后,浏览器触发该回调,通知到咱们的代码中");
            }
        });
        console.log("浏览器立即往下执行后续代码");
    </script>

需要注意的是,上述代码的执行,只能看到构造的请求,无法获取到正确的响应;因为发送请求给百度这个服务器,服务器没有处理发送的请求。

ajax与form相比:ajax功能更强,支持put、delete等方法,ajax发送的请求可以灵活的设置header、ajax发送的请求的body也是可以灵活设置的。

4. HTTPS--面试

4.1 HTTPS是什么

HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层

HTTP协议内容都是按照文本的方式明文传输的,这就导致在传输过程中会出现一些被篡改的情况--运营商劫持。

不止运营商可以劫持,其他的黑客也可以用类似的手段进行劫持,来窃取用户的隐私信息,或者篡改内容。明文传输在互联网上是一件比较危险的事情。HTTPS就是在HTTP的基础上进行加密,进一步的来保证用户的信息安全。

4.2 “加密”是什么

加密就是把明文(要传输的信息)进行一系列的变换,生成密文

解密就是把密文在进行一系列的变换,还原成明文

在加密解密的过程中往往需要一个或多个中间的数据,辅助进行这个过程,这样的数据称为密钥

加密解密到如今已经发展成一个独立的学科:密码学。【奠基人--图灵】

4.3 HTTPS的工作过程

既然要保证数据安全,就需要进行“加密”

网络传输中不再直接传输明文了,而是加密之后的“密文”

加密的方式有很多,但是整体可以分成两大类:对称加密非对称加密

4.4 引入对称加密

对称加密其实就是通过同一个"密钥",把明文加密成密文,并且也能把密文解密成明文,引入对称加密之后,由于黑客不知道密钥是啥,因此就无法解密,也就不知道请求的真实内容是啥了。但是,服务器是给很多个客户端提供服务的,客户端的每个人用的密钥必须是不同的【如果是相同的密钥就很容易扩散,黑客也就很容易拿到了】,因此服务器就需要维护每个客户端和每个密钥之间的关联联系,这也是个很麻烦的事情。

比较理想的做法,就是能在客户端和服务器建立连接的时候,双方协商确定好这次密钥是啥,但是密钥被明文传输,那么黑客也就能获得密钥了,此时后续的加密操作就形同虚设了。

因此密钥的传输也必须加密传输。此时就引入了非对称加密

4.5 引入非对称加密

非对称加密需要用到两个密钥,一个叫做“公钥”,一个叫做“私钥”。

公钥和私钥是配对的,最大的缺点是运行速度非常慢,比对称加密要慢的多。

通过公钥对明文加密,变成密文;通过私钥对密文解密,变成明文【也可以反着用】

客户端在本地生成对称密钥,通过公钥加密,发送给服务器;由于中间的网络设备没有私钥,即使截获了数据,也无法还原出内部的原文,也就无法获得对称密钥;服务器通过私钥解密,还原出客户端的对称密钥,并且使用这个对称密钥加密给客户端返回的响应数据,后续客户端和服务器的通信只用对称即可,由于该密钥只有客户端和服务器两个主机知道,其他主机/设备不知道密钥,即使截获数据也没有意义。

接下来需要解决的问题:但是此时还会出现一个问题--客户端如何获得公钥?客户端如何确定这个公钥不是黑客伪造的?

【中间人攻击】--此时就引入“证书”的概念

4.6 引入证书

证书是解决中间人攻击的关键,在于让客户能够辨别,当前这个响应“公钥”是服务器真正的公钥。引入“证书”,本质上是引入第三方的公证机构,服务器(网站)在设计之初,就需要去专门的认证机构,申请证书(提供一些资质的),审核通过,就会给你颁发证书,服务器生成的公钥也就包含在了证书中,客户端向服务器请求公钥的时候,此时就不是请求淡淡的一个公钥,而是把整个证书都请求过来。

客户端在拿到证书之后,就可以对证书进行校验[验证一下证书是不是假的,是否被篡改,如果发现证书是无效的,浏览器就会直接弹框警告]。

总结HTTPS工作过程中涉及到的三组密钥

第一组(非对称加密):用于校验证书是否被篡改,服务器持有私钥(私钥在注册证书的时候获得)。客户端持有公钥(操作系统包含了可信任的CA认证的机构有哪些,同时持有对应的公钥)。服务器使用这个私钥对证书的签名进行加密,客户端通过这个公钥解密获取到证书的签名,从而校验证书内容是否篡改过。

第二组(非对称加密):用于协商生成对称加密的密钥,服务器生成这组私钥-公钥对,然后通过证书把公钥传递给客户端,然后客户端用这个公钥给生成的对称加密的密钥加密,传输给服务器,服务器通过私钥解密,获取到对称加密密钥。

第三组(对称加密):客户端和服务器后续传输的数据都通过这个对称密钥加密解密。

主线任务--对称密钥。其他机制--辅助这个密钥工作。

第二组非对称加密的密钥是为了让客户端把这个对称密钥传给服务器。

第一组非对称加密是为了让客户端拿到第二组非对称加密的公钥。

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

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

相关文章

万众期盼的剪辑新功能来了 会声会影2024旗舰版焕新登场

会声会影2024全新升级来袭&#xff0c;Corel公司这次为用户带来了多项功能更新&#xff0c;软件风格整体更偏向于“轻松剪辑&#xff0c;快速出片”。会声会影的本次更新还是很令人惊喜的&#xff0c;在各种人工智能算法的加持下&#xff0c;用户只需要进行几步简单地设置&…

sublim安装Autoprefixer插件

有时候在写css样式的时候&#xff0c;分不清哪些属性需要前缀&#xff0c;哪些不需要写前缀&#xff0c;sublime text这款编辑器下安装autoprefixer这款插件可以省去很多问题&#xff0c;写起来也很方便。1 确保系统已经安装node.js 可直接去官网上下载并安装&#xff0c;我的系…

网络实训模拟考察题目和答案(华为eNSP综合实验考试)

拓扑中四个交换机五个路由器&#xff0c;共九个设备 答案是对应的九个脚本&#xff08;从设备命名到保存&#xff09; 全部复制粘贴后&#xff0c;从PC1、PC2都是能Ping通服务器的&#xff08;保及格&#xff09;&#xff0c;其他要求没检查 题目 VLAN信息 设备名称端口链路…

【设计模式之美】面向对象分析方法论与实现(一):需求分析方法论

文章目录 一. 需求举例二. 对案例进行需求分析1. 第一轮基础分析2. 第二轮分析优化3. 第三轮分析优化4. 第四轮分析优化5. 最终确定需求 三. 小结 本文主要描述&#xff1a; 面向对象的需求分析方法论 一. 需求举例 假设&#xff0c;你正在参与开发一个微服务。微服务通过 HTT…

软件测试|SQL JOIN的用法,你会了吗?

SQL JOIN 是在关系型数据库中常用的操作&#xff0c;用于将两个或多个表中的数据合并起来&#xff0c;以满足查询需求。本文将介绍 SQL JOIN 的基本概念、不同类型的 JOIN&#xff0c;以及使用示例。 SQL JOIN 的概念 在关系型数据库中&#xff0c;数据通常分布在多个表中&am…

【C语言】关闭socket需要包含的头文件

一、问题 linux系统&#xff0c;包含了头文件<sys/socket.h>&#xff0c; 警告 warning: implicit declaration of function ‘close’; did you mean ‘pclose’? [-Wimplicit-function-declaration] close(sockclient); ^~~~~ pclose 二、解决 在 Linux 系统下…

网络安全是什么?一文认识网络安全

一、网络安全 1.概念 网络安全从其本质上讲就是网络上的信息安全&#xff0c;指网络系统的硬件、软件及数据受到保护。不遭受破坏、更改、泄露&#xff0c;系统可靠正常地运行&#xff0c;网络服务不中断。 &#xff08;1&#xff09;基本特征 网络安全根据其本质的界定&#…

labview 与三菱FX 小型PLC通信(OPC)

NI OPC服务器与三菱FX3U PLC通讯方法 一、新建通道名称为&#xff1a;MIT 二、选择三菱FX系列 三、确认端口号相关的参数&#xff08;COM端&#xff1a;7.波特率&#xff1a;9600&#xff0c;数据位&#xff1a;7&#xff0c;校验&#xff1a;奇校验&#xff0c;停止位&#xf…

码农的周末日常---2024/1/6

上周总结 按照规划进行开发&#xff0c;处事不惊&#xff0c;稳稳前行 2024.1.6 天气晴 温度适宜 AM 睡觉前不建议做决定是真的&#xff0c;昨天想着睡到中午&#xff0c;今天九点多醒了&#xff0c;得了&#xff0c;不想睡了 日常三连吧&#xff0c;…

面试官:String为什么要设计为不可变类

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

@JsonFormat与@DateTimeFormat

JsonFormat注解很好的解决了后端传给前端的格式&#xff0c;我们通过使用 JsonFormat可以很好的解决&#xff1a;后台到前台时间格式保持一致的问题 其次&#xff0c;另一个问题是&#xff0c;我们在使用WEB服务的时&#xff0c;可 能会需要用到&#xff0c;传入时间给后台&am…

数据处理四 基于图像hash进行数据整理(删除重复图片、基于模版查找图片)

一、背景知识 1.1 什么是hash Hash&#xff0c;一般翻译做“散列”&#xff0c;也有直接音译为“哈希”的&#xff0c;基本原理就是把任意长度的输入&#xff0c;通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法&#xff0c;而原始数据映射后的二进制串就…

如何使用免费的ZeroSSL证书保护您的网站

使用 ZeroSSL 在您的站点上轻松实施 SSL。我们的指南涵盖了免费证书设置&#xff0c;确保安全和加密的用户连接。 如今&#xff0c;保护您的网站不仅是一种建议&#xff0c;而且是一种必需品。这就是SSL证书发挥作用的地方。它们对用户浏览器和网站之间传输的数据进行加密&…

Golang高质量编程与性能调优实战

1.1 简介 高质量&#xff1a;编写的代码能否达到正确可靠、简洁清晰的目标 各种边界条件是否考虑完备异常情况处理&#xff0c;稳定性保证易读易维护 编程原则 简单性 消除多余的重复性&#xff0c;以简单清晰的逻辑编写代码不理解的代码无法修复改进 可读性 代码是写给人看…

云原生学习系列之基础环境准备(单节点安装kubernetes)

一、环境要求 操作系统CentOS 7.x-86_x64 硬件配置&#xff1a;内存2GB或2G&#xff0c;CPU 2核或CPU 2核&#xff0c;需要在虚拟机中提前设置好&#xff0c;不然后续会报错 二、系统初始化 1、设置主机名 # 在master节点执行 hostnamectl set-hostname master01 2、配置主…

时间序列预测 — LSTM实现多变量多步负荷预测(Tensorflow):多输入多输出

目录 1 数据处理 1.1 导入库文件 1.2 导入数据集 ​1.3 缺失值分析 2 构造训练数据 3 LSTM模型训练 4 LSTM模型预测 4.1 分量预测 4.2 可视化 1 数据处理 1.1 导入库文件 import time import datetime import pandas as pd import numpy as np import matplotlib.p…

Kafka消息阻塞:拯救面试的八大终极解决方案!

大家好&#xff0c;我是小米&#xff0c;一个对技术充满热情的90后程序员。最近在准备社招面试的过程中&#xff0c;遇到了一个超级有挑战性的问题&#xff1a;“Kafka消息阻塞怎么解决&#xff1f;”今天&#xff0c;我就来和大家一起深入剖析这个问题&#xff0c;分享我在解决…

Python从入门到网络爬虫(MySQL链接)

前言 在实际数据分析和建模过程中&#xff0c;我们通常需要从数据库中读取数据&#xff0c;并将其转化为 Pandas dataframe 对象进行进一步处理。而 MySQL 数据库是最常用的关系型数据库之一&#xff0c;因此在 Python 中如何连接 MySQL 数据库并查询数据成为了一个重要的问题…

【MySQL四大引擎,数据库管理,数据表管理,数据库账号管理】

一. MySQL四大引擎 查看存储引擎 SHOW ENGINES support 字段说明 defaulti的为默认的引擎 为YES表示可以使用 为NO表示不能使用 四大引擎 InnoDB InnoDB表类型可以看作是对MyISAM的进一步更新产品&#xff0c;它提供了事务、行级锁机制和外键约束的功能&#xff0c;也是目前…

Python中的cls语法

在Python中&#xff0c;cls 是一个用于指代类本身的约定性名称&#xff0c;通常用作类方法&#xff08;class method&#xff09;中的第一个参数。cls 类似于 self&#xff0c;它是对类的引用&#xff0c;而不是对实例的引用。cls 通常在类方法中用于访问类级别的属性和方法。举…