首页 > 其他分享 >HTTP 和 HTTPS(请求响应报文格式 + 请求方法 + 响应状态码 + HTTPS 加密流程 + Cookie 和 Session)

HTTP 和 HTTPS(请求响应报文格式 + 请求方法 + 响应状态码 + HTTPS 加密流程 + Cookie 和 Session)

时间:2023-11-01 09:02:30浏览次数:40  
标签:HTTP 请求 响应 HTTPS 服务器 加密 客户端

文章目录

    1. HTTP 是什么
    2. HTTP 请求报文和响应报文的格式
        1)请求报文格式
        2)响应报文格式
        3)报文中空行的作用
    3. HTTP 的长连接和短连接
    4. URL
        1)在浏览器中输入 www.baidu.com 后执行的全部过程
    5. HTTP 常用的请求方法
    6. GET 和 POST 的区别
    7. HTTP 常见的响应状态码
    8. HTTPS 是什么
        1)SSL 协议
    9. HTTPS 怎么进行 “加密”
        1)对称加密
        2)非对称加密
        3)CA 证书
        4)HTTPS 加密的完整流程
    10. HTTPS 的优缺点
    11. HTTPS 和 HTTP 的区别
    12. Cookie 和 Session
        1)什么是 Cookie
        2)什么是 Session
        3)Cookie 和 Session 的区别
        4)Cookie 和 Session 如何配合工作

1. HTTP 是什么

HTTP 全称 “ 超文本传输协议 ”,是一种基于传输层 TCP 协议实现的应用非常广泛的 应用层协议

我们平时打开一个网站,就是通过 HTTP 协议来传输数据的

当我们在浏览器中访问一个 “ 网址 ”(URL),浏览器就会给这个 URL 的服务器发送一个 HTTP 请求,服务器返回一个 HTTP 响应,这个响应被浏览器解析之后,就展现出我们看到的网页内容

所谓 “ 超文本 ”,就是传输的内容不仅仅是文本,还可以是一些图片、视频、音频等二进制的数据

HTTP 默认端口号:80
2. HTTP 请求报文和响应报文的格式
1)请求报文格式

    请求首行:请求方法 + URL + HTTP协议版本
    请求头:请求报文的属性,冒号分隔的键值对,每组属性各占一行
    空行
    请求体:如果请求体存在,请求头中会有一个 Content-Length 属性来表示请求体的长度
    请添加图片描述

 


2)响应报文格式

    响应首行:HTTP 协议版本 + 响应状态码 + 状态码解释短句
    响应头:响应报文的属性,冒号分隔的键值对,每组属性各占一行
    空行
    响应体:如果响应体存在,响应头中就会有一个 Content-Length 属性来表示响应体长度,如果服务器返回一个 html 页面,那么 html 页面内容就出现在响应体中
    请添加图片描述

 


3)报文中空行的作用

因为 HTTP 协议没有规定报文头部的键值对有多少个,空行就相当于 “ 报头的结束标志 ” 或者 “ 报头和主体之间的分隔符 ”
3. HTTP 的长连接和短连接

在 HTTP/1.0 中,默认使用短连接,短连接就是,客户端访问的某个 HTML 网页中包含其他 Web 资源,如 JS 文件、图像文件、CSS 文件等,客户端每遇到一个 Web 资源,就会建立一个 HTTP 连接,访问结束就关闭连接

HTTP/1.1 开始,默认使用长连接,在使用长连接的情况下,客户端和服务器用于传输数据的 TCP 连接在一定时间内不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这条已经建立的连接。长连接的保持时间可以在不同服务器中进行指定,实现长连接要求客户端和服务器都支持长连接

HTTP 的长连接和短连接,实质上是 TCP 的长连接和短连接
4. URL

平时我们俗称的 “ 网址 ” 就是 URL(统一资源定位符)

互联网上的每一个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器怎么处理它

基本格式:

 


请添加图片描述
1)在浏览器中输入 www.baidu.com 后执行的全部过程

    域名解析:将 www.baidu.com 解析成 IP 地址

    浏览器搜索自己的 DNS 缓存(维护一张域名和 IP 的映射表);若没有,则搜索操作系统的 hosts 文件

    若都没有,则去本地 DNS 服务器进行查询,本地 DNS 服务器会查询自己的 DNS 缓存,如果没有,本地 DNS 服务器会向根域名服务器发起请求,来查询域名所对应的 IP 地址,得到结果之后本地 DNS 服务器将结果返回给浏览器,同时缓存本次解析的 IP

    发起 TCP 三次握手,建立 TCP 连接。浏览器会以一个随机端口号(1024-65535)向服务器 web 程序的 80 端口发起 TCP 连接

    建立 TCP 连接后,发起 HTTP 请求

    服务器处理请求,对浏览器的请求进行响应,浏览器得到网页的 html 文件和一些资源文件

    浏览器解析 html 文件和资源文件,对页面进行渲染并呈现出来

5. HTTP 常用的请求方法

 


6. GET 和 POST 的区别

    GET 是从服务器上获取数据,POST 是向服务器传送数据
    GET 把参数包含在 URL 中,POST 的参数包含在请求体中,因此 POST 相较 GET 更安全些
    GET 请求有长度限制,POST 没有
    GET 请求是幂等性的,POST 不是。幂等性指对同一个 URL 的多次请求应该返回同样的结果

7. HTTP 常见的响应状态码

    200:服务器已成功处理了请求。
    301:请求的网页已被永久重定向网页,服务器响应此状态码时,会自动将请求者转到新位置
    302:请求的网页被临时重定向到其他网页
    400:客户端请求有语法错误,不能被服务器所理解
    403:服务器收到请求,但拒绝提供服务,有的页面需要一定权限才能访问,就可能会出现 403
    404:服务器未找到请求的页面
    405:使用了服务器不允许的请求方法
    500:服务器内部遇到错误,无法完成请求
    504:服务器负载过大,在处理请求时消耗的时间就会很长,就可能导致出现超时的情况

8. HTTPS 是什么

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

HTTPS 协议运行在 SSL 协议之上,SSL 协议运行在 TCP 协议之上

HTTP 协议内容都是按照文本的方式明文传输的,这就可能会导致传输过程中出现被篡改的情况

在互联网上,明文传输是比较危险的事情

HTTPS 就是在 HTTP 的基础上进行了加密,进一步保证用户的信息安全

HTTPS 默认端口号:443
1)SSL 协议

SSL 协议是一种用于保证互联网通信中数据安全的标准技术,SSL 协议使用公钥、私钥、和对称密钥来加密和解密数据,还会使用证书来验证服务器和客户端的身份
9. HTTPS 怎么进行 “加密”

加密就是把明文(要传输的信息)进行一系列变换,生成密文,在互联网上传输时,以密文的形式传输,在到达接收方时,接收方再进行一系列变换,将密文转换成明文

在加密解密的过程中,都会有一个被称为 “密钥” 的中间数据来辅助进行解密或解密

加密的方式有很多,但整体上分为两大类:对称加密 和 非对称加密
1)对称加密

对称加密其实就是信息的发送方和接收方使用同一个密钥对密文进行加密和解密。

但是在一开始发送方和接收方是不知道这个密钥的,所以发送信息之前还需要先传输密钥,但是如果密钥在传输过程中被截获,那么后续的密文传输就与明文传输就没什么区别了

因此就需要引入 非对称加密 先对对称密钥进行加密传输
2)非对称加密

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

    通过公钥对明文加密,变成密文
    通过私钥对密文解密,变成明文

也可以反着用

    通过私钥对明文加密,变成密文
    通过公钥对密文解密,变成明文

引入非对称加密之后

    客户端在 本地生成对称密钥,通过 公钥加密,发送给服务器
    由于中间的其他网络设备没有私钥,即使截获了数据,也无法还原出内部的对称密钥
    服务器通过 私钥解密,还原出客户端发送的对称密钥,并且使用这个对称密钥加密对客户端进行响应
    后续服务器和客户端的通信只需要用到对称密钥即可

对称加密的效率比非对称加密的效率高很多,所以只是在开始传输对称密钥时使用非对称加密,后续的传输使用对称加密

但是还存在一些问题

    客户端怎么获取公钥
    怎么确定这个公钥不是伪造的

这就需要引入 CA 证书
3)CA 证书

CA 证书是在非对称加密传输对称密钥时使用的,客户端和服务器交换对称密钥时,使用非对称加密对对称密钥进行加密,非对称加密中的公钥就是由 CA 证书提供的,CA 证书在使用之前客户端会对其进行合法性校验,确保 CA 证书不是伪造的

CA 证书中包含的信息:

    公钥
    证书持有者的域名等信息
    证书认证机构的信息
    数字签名以及使用的算法
    证书有效期

为了让服务器的公钥被客户端信任,服务器的证书都是由 CA(证书认证机构)签名的,CA 在网络中相当于公安局,具有极高的可信度,所以由它来给证书签名,证书必然是被信任的

CA 对证书签名的过程:

    首先 CA 会把证书持有者的公钥、证书认证机构、证书有效期、持有者的域名等信息进行整合,对这些信息使用特定的 Hash 算法计算 Hash 值
    然后 CA 会使用自己的私钥对 Hash 值进行加密,作为证书的签名

客户端对证书验证的过程:

    客户端在得到证书之后会使用相同的 Hash 算法获取证书的 Hash 值
    通常客户端中都会集成 CA 的公钥,客户端可以使用 CA 的公钥对签名进行解密,得到一个 Hash 值
    对比两次结果的 Hash 值,如果值相同,则为可以信赖的证书

4)HTTPS 加密的完整流程

HTTPS 的加密过程大致可以分为三个阶段:

    第一阶段(非对称加密):对证书进行合法性验证,客户端内置 CA 的公钥,服务器在申请证书时同时获取 CA 的私钥和自己的公钥私钥
    第二阶段(非对称加密):对对称密钥进行密文传输,客户端使用证书中服务器的公钥对随机生成的对称密钥进行加密传输,服务器使用自己的私钥进行解密,得到对称密钥
    第三阶段(对称加密):客户端与服务端在互通对称密钥之后,使用对称加密传输数据

 


请添加图片描述
10. HTTPS 的优缺点

优点:

    安全性:

    HTTPS 在数据传输过程中保证绝对的密文传输,可以防止数据在传输过程中被窃取或改变,保证数据的完整性

缺点:

    在相同的网络环境下,HTTPS 比 HTTP 的响应时间更长
    HTTPS 的安全是有范围的,在服务器被劫持等情况下几乎起不到作用
    HTTPS 需要更多的服务器资源,会导致成本升高

11. HTTPS 和 HTTP 的区别
  

 
12. Cookie 和 Session
1)什么是 Cookie

Cookie 是服务器发送给客户端并保存到本地的一小块数据,它会在客户端下一次向同一个服务器发起请求时被携带并发送到服务器上。用于告知服务器两次请求来自同一个客户端,从而在本次请求中响应之前的访问状态

Cookie 的应用:

    记录会话的状态:如用户的登录状态
    记录个性化设置:如用户自定义的设置、主题等

2)什么是 Session

Session 代表着服务器和客户端一次会话的过程,Session 中保存着用户会话所需的属性和配置信息,当用户在应用程序的各个网页之间跳转时,存储在 Session 对象中的属性和配置信息不会丢失,而是在整个会话中一直存在下去。
3)Cookie 和 Session 的区别

    Cookie 保存在客户端,Session 保存在服务端
    Cookie 可以设置长时间保存,Session 一般在客户端关闭之后就会失效
    Cookie 相对不安全,容易被窃取和伪造,Session 相对安全,因为 Session 数据保存在服务端,客户端无法直接访问
    Cookie 有大小限制,一般单个 Cookie 不能超过 4 KB,Session 没有限制

4)Cookie 和 Session 如何配合工作

    客户端在首次访问服务器时,服务器会根据用户状态信息生成对应的 Session 对象,将唯一的 SessionID 发送给客户端
    客户端在收到 SessionID 之后,会创建 Cookie 对象,将 SessionID 放入 Cookie 对象,并且在 Cookie 中记录 此 SessionID 属于哪个域名
    在之后访问同一个域名时,客户端在发起请求时会将 Cookie 一并发送给服务器
    服务器会根据得到的 Cookie 得到 SessionID,再通过 SessionID 查找对应的 Session,如果没找到就说明用户未登录或 Session 已经过期,需要重新登录或者创建 Session
    如果找到了就说明用户已经登录,服务器就会根据 Session 中对应的用户信息对网页进行处理,再将处理后的页面响应给客户端

 

 


请添加图片描述
文章知识点与官方知识档案匹配,可进一步学习相关知识
————————————————
版权声明:本文为CSDN博主「hssq」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_56975154/article/details/130227068

标签:HTTP,请求,响应,HTTPS,服务器,加密,客户端
From: https://www.cnblogs.com/bighammerdata/p/17802236.html

相关文章

  • Spring Boot - ffmpeg 获得 m3u8 列表和 ts 文件,前端请求视频流进行播放
    安装ffmpegFFmpeg下载地址:GitHubreleases。请下载:ffmpeg-master-latest-win64-gpl-shared.zip压缩包。解压到你系统盘任意位置(前提是你以后找得到这玩意儿在哪)。接下来就是配置其环境变量,所有的环境变量都是配置它的启动文件的路径到你系统的Path,基本上都是(也有例外的?)。如......
  • 使用Postman快速复现浏览器的请求(包括生成调用代码)
    前言大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。好久没有写开发类的工具使用文了,这次我来讲下平时我是如何使用Postman工具的。一、工具准备软件下载链接:https://www.postman.c......
  • 响应式编程
    响应式编程(ReactiveProgramming)什么是ReactorReactor是一个用于JVM的完全非阻塞的响应式编程框架,具备高效的需求管理(即对“背压(backpressure)”的控制)能力。它与Java8函数式API直接集成,比如CompletableFuture,Stream,以及Duration。它提供了异步序列APIFlux(用于[N]个......
  • 关于前后端跨域以及请求问题
    1.后端解决跨域问题同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotatio......
  • flutter 网络请求失败
    请求百度如下错误SocketException:Connectionfailed(OSError:Operationnotpermitted,errno=1),address=www.baidu.com,port=443处理方式使用了dio,模拟器和web都没问题,只有desktop不能调接口需要在macos/Runner/DebugProfile.entitlements文件中添加com.appl......
  • python 飞书 获取飞书租户访问令牌 自定义机器人 向webhook_url发送POST请求
    importjsonimportrequestswebhook_url=post_data=#见应用凭证#获取飞书租户访问令牌,用于调用飞书开放平台的其他API接口#url:飞书开放平台的获取租户访问令牌的API接口地址url=r"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/"r=......
  • HDFS写流程分析:Namenode接收client请求
    1.背景在https://blog.51cto.com/u_15327484/8023493文章中,介绍了HDFS创建文件时,客户端执行的操作。对于NameNode而言,在创建文件的过程中,它会接受客户端以下rpc请求:createaddBlockcomplete本文将详细介绍这三个RPC在NameNode端的处理流程,同时扩展介绍Namenode相关架构。2.......
  • XMLHttpRequest拦截请求和响应
    环境:angular实现:拦截请求向请求信息增加字段           拦截响应过滤返回值响应拦截:根据angular使用的XMLHttpRequest将对原本的请求转移到另一个将监听返回事件挂载到另一个世纪发送请求的xml上使用getset将客户端获取的responseText和response按照自己的意......
  • axios请求实战
    Home主页请求数据一、概览1.request请求2.找到合适API并传相应参数3.需要请求的组件调用4.请求方接受数据并传至展示组件二、一起看下代码吧,这里采用vue的多文件形式1.request.js文件用于创建请求实体2.home.js文件用于封装request请求实现特定页面的请求发送3.......
  • springMVC controller控制器方法HttpServletRequest等参数的是谁传递进来的
    SpringMVC中两个重要的接口:请求方法参数的处理、响应返回值的处理,分别是HandlerMethodArgumentResolver和HandlerMethodReturnValueHandlerHandlerMethodArgumentResolver的实现类 ServletRequestMethodArgumentResolver 参数类型是实现或继承或是WebRequest、ServletRequest......