一,背景
记得我刚开始开发项目的时候,后端同学给了我预览网址 xxx.top,然后我在 Edge 浏览器里(谷歌这样输入也是好使的,为什么一会讲)输入 http://www.xxx.top ,结果访问不了,折腾了很长时间才发现是 https://www.xxx.top ,直接给我整的尴尬的要死。
那么 HTTP 和 HTTPS 有什么区别呢?可能很多小白都不太清楚。这里讲一些我遇到过的问题以及两者的基础知识。
二,HTTP
HTTP(Hyper Text Transfer Protocol)意思是超文本传输协议,他是规范从远程服务器传输数据到本地浏览器的一种应用层协议。
超文本:通过超链接将来自不同空间文本和数据连接在一个界面,并可以实现项目跳转的文本。最常见的超文本格式就是 HTML(Hyper Text Markup Language,全称超文本标记语言)
协议:协议在计算机界指的是网络协议,一种计算机相互通信对话所必须遵守的约定,比如使用什么语法,怎样建立链接、怎样相互识别等。常见的互联网协议有 TCP/IP 协议、UDP 协议、HTTP 协议等不同通信层面上的协议(HTTP 属于应用层,即最接近用户的层面),感兴趣的可以自己了解,或者等我之后讲。
通俗地说我们常见的前端请求就属于 HTTP 请求/HTTPS 请求,整个过程:客户端(浏览器)发送请求,服务器收到请求做出响应。
我们遇到的第一个 HTTP 请求其实就是通过输入网址得到 HTML 网页:
- 浏览器向服务端发出请求该地址网页的请求
- 服务器会处理请求数据,组装并返回网页给浏览器
- 这时我们就可以看到网页上的内容了
而 HTTP 就是对这个传输过程进行一定的规范。
HTTP 报文
说人话就是客户端和服务端传递的数据。
HTTP 报文由请求报文和响应报文组成,请求报文由请求行、请求头、请求体组成。
这里以百度为例(右键检查->网络->筛选文档->点击 baidu.com):
这里的具体项我就不详细讲了,具体可以参考我的参考资料。
三,HTTPS
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)意思是安全套接字层上的超文本传输协议,它比 HTTP 多的是有了安全保护,比如我们如果传输账号密码的话,使用 http 相当于裸奔。
HTTPS=HTTP+SSL(一种加密安全协议)
关于 HTTPS 的详细传输过程,另开文章讲。
四,两者的区别
- http 是明文传输,通俗得说数据可以直接看到,而 https 是加密传输,更加安全
- http 和 https 使用的端口不同,前者是 80,后者是 443。nginx(一种服务器)就是默认开启在 80 端口上
- https 需要申请 SSL 证书,这个是付费的,而 http 是免费的
- https 协议有多次握手过程,传输数据速度是比 http 慢的
五,一些问题
1,为什么开头我会说谷歌浏览器没事?
因为谷歌会自动将 http 转换为 https。
如果我们想要使用 http 的话,可以这么办:
- 在谷歌地址栏输入 chrome://net-internals/#hsts
- 在 Delete domain security policies 那一项输入你想要使用的 http 网址名。
2,http 还有哪些问题?
以前我们的网站大多都是 http 型网站,我们会在一些网站看到很多莫名其妙的广告,比如百度的广告,其实这些广告都是运营商中途添加上的。
但是其实现在很多网站都已经变成 https 网站了,所以说很多网站的广告其实潜在地变少了。