浅谈一下前端http与https有什么区别

 更新时间:2023年04月06日 08:38:54   作者:CrazyDragon_King  
这篇文章主要介绍了浅谈一下前端http与https有什么区别,现今大部分的网站都已经使用了 https 协议,那么https对比http协议有哪些不同呢,需要的朋友可以参考下

从 http 到 https

现今大部分的网站都已经使用了 https 协议,这样我们在网络上进行冲浪时,基本也就无需担心自己的隐私被窃取了。不过,稍微了解一点计算机网络知识的人都明白,http 默认是 80 端口,https 默认是 443 端口。但是现在在网页输入网址访问的人, 大部分都不会加 http://,因此默认访问的是 http 协议,那么为什么大家还能继续访问 https 协议呢?因为这些网站都做了一个跳转,访问 80 端口会被自动重定向到 443 端口(即 http -> https)。

让我们来看一个,日常生活中使用最广泛的网站的例子吧!

在这里插入图片描述

注意到了吗?我并没有输入协议,所以浏览器默认是会访问 http 网站的,但是最终的结果是访问了 https 网站。我前面说了这是做了跳转,但是这种说法是很模糊的,你并不知道实际上是使用了什么技术?作为一个有点技术追求的人,让我们来一探究竟吧!
或者你可以先猜测一下:这里使用的技术是 请求转发 Request Forward 还是 重定向 Redirect 呢?

浏览器调试

直接上浏览器调试,这样最清楚了。可以看到这里会有两个 www.baidu.com,直接看第一个前面问题的答案就已经出来了,是重定向 Redirect

在这里插入图片描述

在这里插入图片描述

注意,下面这样访问是错误的。 如果你调试的话,你也只能看到一个 www.baidu.com 的网站。因为之前访问过了,浏览器会记住你访问过的网址的,这里的区别在于匹配到网址后,出现了百度的 logo 图标。所以,如果你想要真实的看到这种跳转,你需要清空自己的浏览器浏览器历史记录(关于百度的浏览器历史记录)。

在这里插入图片描述

实现自己的 http 到 https 的重定向

既然已经了解了前面的内容,那么我们就可以把这个方式给简单的应用上了。这里大致的思路是:监听两个端口,一个是端口提供 http 服务(只有一个根路径),一个提供 https 服务(正常的应用服务路径),然后如果有人访问了 http 的根路径,那么将其转发到 https 服务的根路径上即可。

网上有很多访问生成自签名的 CA 证书,这里就不多做介绍了,那么接下来直接看代码吧!

package main

import (
	"log"
	"net/http"
)

var (
	CertFile = "C:/Users/alfred/Desktop/ssl/server.cer"
	KeyFile  = "C:/Users/alfred/Desktop/ssl/server.key"
)

func main() {
	go ListenHttp()
	go ListenHttps()
	select {}
}

func ListenHttp() {
	// 监听 http 端口,并把请求重定向到 https 端口
	httpServer := http.NewServeMux()
	httpServer.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		log.Printf("http --> https")
		http.Redirect(w, r, "https://localhost:10000", http.StatusPermanentRedirect)
	})

	err := http.ListenAndServe(":9999", httpServer)
	if err != nil {
		log.Fatal(err)
	}
}

func ListenHttps() {
	// 监听 https 端口,提供实际的服务
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Welcome to SSL World!"))
	})

	http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Hello Https World!"))
	})

	// 本机自签名证书,仅演示使用
	err := http.ListenAndServeTLS(":10000", CertFile, KeyFile, nil)
	if err != nil {
		log.Fatal(err)
	}
}

在这里插入图片描述

因为是自签名证书,不是正统 CA 机构签发的,所以这里是有警告的。不过这与我们所有说明的过程无关,忽视就好了。这是一个很小的细节问题,其实理解它挺简单的,只需要一点点计算机网络的知识就足够了。

到此这篇关于浅谈一下前端http与https有什么区别的文章就介绍到这了,更多相关http与https区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言使用sort包对任意类型元素的集合进行排序的方法

    Go语言使用sort包对任意类型元素的集合进行排序的方法

    这篇文章主要介绍了Go语言使用sort包对任意类型元素的集合进行排序的方法,实例分析了sort排序所涉及的方法与相关的使用技巧,需要的朋友可以参考下
    2015-02-02
  • Golang filepath包常用函数详解

    Golang filepath包常用函数详解

    本文介绍与文件路径相关包,该工具包位于path/filepath中,该包试图与目标操作系统定义的文件路径兼容。本文介绍一些常用函数,如获取文件绝对路径,获取文件名或目录名、遍历文件、分割文件路径、文件名模式匹配等函数,并给具体示例进行说明
    2023-02-02
  • 浅谈Go语言的error类型

    浅谈Go语言的error类型

    这篇文章主要介绍了浅谈Go语言的error类型,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • golang高性能的http请求 fasthttp详解

    golang高性能的http请求 fasthttp详解

    fasthttp 是 Go 的快速 HTTP 实现,当前在 1M 并发的生产环境使用非常成功,可以从单个服务器进行 100K qps 的持续连接,总而言之,fasthttp 比 net/http 快 10 倍,下面通过本文给大家介绍golang fasthttp http请求的相关知识,一起看看吧
    2021-09-09
  • Golang常用的几种密码加密方式分享

    Golang常用的几种密码加密方式分享

    这篇文章给大家介绍了Golang常用的几种密码加密方式,加密有两种方式,一种是直接加密,一种是盐值加密,直接加密指的是将原始密码直接进行加密,盐值加密则是在进行密码加密之前,文中有详细的代码示例,需要的朋友可以参考下
    2023-08-08
  • 对Golang中的runtime.Caller使用说明

    对Golang中的runtime.Caller使用说明

    这篇文章主要介绍了对Golang中的runtime.Caller使用说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 优雅管理Go Project生命周期

    优雅管理Go Project生命周期

    这篇文章主要为大家介绍了如何优雅的管理Go Project生命周期,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Golang中的强大Web框架Fiber详解

    Golang中的强大Web框架Fiber详解

    在不断发展的Web开发领域中,选择正确的框架可以极大地影响项目的效率和成功,介绍一下Fiber,这是一款令人印象深刻的Golang(Go语言)Web框架,在本文中,我们将深入了解Fiber的世界,探讨其独特的特性,并理解为什么它在Go生态系统中引起了如此大的关注
    2023-10-10
  • golang中的defer函数理解

    golang中的defer函数理解

    defer是Go语言中的延迟执行语句,用来添加函数结束时执行的代码,常用于释放某些已分配的资源、关闭数据库连接、断开socket连接、解锁一个加锁的资源,这篇文章主要介绍了golang中的defer函数理解,需要的朋友可以参考下
    2022-10-10
  • golang 随机数的两种方式

    golang 随机数的两种方式

    本文主要介绍了golang 随机数的两种方式,一种是伪随机,另一种是真随机,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论