cloud在gateway支持https和http请求

在项目中遇到既要支持http协议请求和https协议请求的场景,结合场景有两种解决方案:

第一种:编程实现,第二种:反向代理。

首先我们要清楚http和https的区别,百度过来一点

HTTP(HTTP,HyperText Transfer Protocol)超文本传输协议

HTTP:是互联网上应用最为广泛的一种网络协议。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。它可以使浏览器更加高效。HTTP 协议是以明文方式发送信息的,如果黑客截取了 Web 浏览器和服务器之间的传输报文,就可以直接获得其中的信息。

① 客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过 TCP 来完成的,一般 TCP 连接的端口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URI)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容。

② 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。

HTTPS(Hypertext Transfer Protocol Secure)超文本传输安全协议

是以安全为目标的 HTTP 通道,是 HTTP 的安全版。HTTPS 的安全基础是 SSL。SSL 协议位于 TCP/IP 协议与各种应用层协议之间,为数据通讯提供安全支持。SSL 协议可分为两层:SSL 记录协议(SSL Record Protocol),它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL 握手协议(SSL Handshake Protocol),它建立在 SSL 记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

简单来讲就是多了一个SSL协议。

1、生成安全证书网上有教程,我是生成的jks

cloud在gateway支持https和http请求_第1张图片

keytool -genkeypair -alias myssl -keyalg RSA -keypass mypass -keystore myssl.jks -storepass mypass -keystore C:\Users\siqm\myssl.jks

 然后将生成的证书,myssl.jks放入到gateway的resource目录下

cloud在gateway支持https和http请求_第2张图片

然后myl配置启用ssl

server:
  port: 8080
  ssl:
    #开启https
    enabled: true
    #指定存放证书的密钥库文件的位置
    key-store: classpath:star.jks
    #密钥库文件的格式
    key-store-type: JKS
    #别名,需要与创建密钥库时的别名一致
    key-alias: myssl
    key-password: mypass
    key-store-password: mypass

注意其中的别名一致。

这样你请求可以验证https了,

下面还要支持http.

package cn.hx.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory;
import org.springframework.boot.web.server.WebServer;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.server.reactive.HttpHandler;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * Des: 支持http配置
 * Author: SiQiangMing 2023/4/21 11:28 
 */
@Configuration
public class HttpConfig {
    @Value("${server.custom.httpPort:8088}")
    private Integer httpPort;

    @Autowired
    private HttpHandler httpHandler;

    private WebServer webServer;

    @PostConstruct
    public void start(){
        NettyReactiveWebServerFactory factory = new NettyReactiveWebServerFactory(httpPort);
        webServer = factory.getWebServer(httpHandler);
        webServer.start();
    }

    @PreDestroy
    public void stop(){
        webServer.stop();
    }
}

然后验证

http

https

你可能感兴趣的:(http,https,gateway)