本篇会着重介绍http和https的区别和常见的面试题

常见的http和https面试题:

  • Http与Https的基本概念和他们的区别
  • HTTPS工作原理
  • 常用的HTTP方法有哪些
  • GET方法与POST方法的区别,什么时候应该使用GET什么时候应该使用POST
  • HTTP请求报文与响应报文格式
  • 常见的HTTP的状态码
  • HTTP1.0,1.1,2.0之间的区别和特性
  • 常见HTTP首部字段
  • HTTP的缺点与HTTPS有哪些改进
  • HTTP优化
  • 一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
  • 为什么HTTPS安全

以上就是我进行总结的http和https的面试问题,接下来我会对每个问题予以解答分析,相信带着问题看答案会印象更深刻

Http与Https的基本概念和他们的区别

http的中文叫做超文本传输协议,它负责完成客户端到服务端的一系列操作,是专门用来传输注入HTML的超媒体文档等web内容的协议,它是基于传输层的TCP协议的应用层协议

https:https是基于安全套接字的http协议,也可以理解为是http+ssl/tls(数字证书)的组合

http和https的区别:

  • HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头
  • HTTP 是不安全的,而 HTTPS 是安全的
  • HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443
  • 在 OSI 网络模型中,HTTPS的加密是在传输层完成的,因为SSL是位于传输层的,TLS的前身是SSL,所以同理
  • HTTP无需认证证书,而https需要认证证书

小结:简单来说http是用来进行html等超媒体传输的,但是http不安全,为了安全,使用证书SSL和HTTP的方式进行数据传输,也就是HTTPS

HTTPS工作原理

  • 首先服务端给客户端传输证书,这个证书就是公钥,只是包含了很多的信息,比如说证书的办法机构,证书的过期时间
  • 客户端进行证书的解析,比如说验证办法机构,过期时间,如果发现没有任何问题,就生成一个随机值(私钥),然后用证书对这个私钥进行加密,并发送给服务端
  • 服务端使用私钥将这个信息进行解密,得到客户端的私钥,然后客户端和服务端就可以通过这个私钥进行通信了
  • 服务端将消息进行对称加密(简单来说就是讲消息和私钥进行混合,除非知道私钥否则服务进行解密),私钥正好只有客户端和服务端知道,所以信息就比较安全了
  • 服务端将进行对称加密后的消息进行传送
  • 客户端使用私钥进行信息的解密

小结:https就是使用了非对称加密(一对公私钥进行加密解密)进行公钥传输,然后客户端通过公钥加密将自己的私钥发给服务端,以后就可以使用这个私钥进行消息的收发了(图文方式的https的加密原理,可以点击链接:到我的另一篇博客进行学习)

常用的HTTP方法有哪些

  • GET 从服务器获得资源

  • POST 客户端向服务器提交资源

  • PUT 修改服务器相关资源  (已经很少用)

  • DELETE 删除服务器相关资源   (已经很少用)

小结:我基本用的是get和post,其余的两个基本没用过(被自己菜醒)

GET方法与POST方法的区别,什么时候应该使用GET什么时候应该使用POST

  • GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符
  • POST:一般用于修改服务器上的资源,对所发送的信息数量没有限制
  • GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值,也就是说Get是通过地址栏来传值,而Post是通过提交表单来传值。

小结:对于信息的获取一般使用get,在以下情况下最好使用post请求:

  1. 向服务器发送大量数据(因为post没有发送数据的数量限制)
  2. 无法使用缓存文件(会更新服务器上的文件)
  3. 发送包含未知字符的用户输入时(亲身经历过GET的坑,泪目)

HTTP请求报文与响应报文格式

这里我推荐一位大神写的很出色的博客,在这里就不详细写了,博客地址:https://blog.csdn.net/a19881029/article/details/14002273

小结:主要的区别就是请求报文有url和请求方法,响应报文没有这两个,但是有状态码和状态码描述,还要注意一些常见的请求头和响应头代表的意思,比如说Connection:Keep-Alive

常见的HTTP的状态码

我在上面推荐的博客已经进行了一些常用状态吗的说明,我的一片文章里面也有详细说明

博客地址: https://blog.csdn.net/zhttly/article/details/82829854

HTTP1.0,1.1,2.0之间的区别和特性

http1.0:

  • 是一种无状态、无连接的应用层协议,每个请求都会新创建一个tcp连接,完成后关闭服务端不跟踪也不记录过去的请求(无状态),但正因频繁创建连接,由于tcp的慢启动(为了不给网络造成拥堵,在首次进行tcp请求的时候,会限制服务端和客户端之间交互数据量的上限,大概为14kb,之后以指数级增长),服务端接受请求,处理完,发送完响应之后就会将tcp连接关闭,这造成了很大的资源浪费,而且http1.0在一个请求接收到响应之后才会接着发送下一个,这也造成了head of line blocking(队头阻塞),现在的浏览器为了解决这个问题,采用了一个页面可以建立多个tcp连接的方式来进行

http1.1:

  • 继承了http1.0的特点,同时改善了http的一些问题,首先是长连接,http1.1新增加了connecion字段,里面可以设置keey-Alive(保持连接)或者close(关闭长连接),避免了每次请求都会新建连接,提高了网络的利用率
  • http1.1还增加了Host字段,用来明确表示浏览器要服务器上的哪一个WEB站点,这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点,同时还支持了断点续传
  • http1.1的管道:可以发送很多请求到服务端,但是服务端必须要按顺序返回响应,由此可以看出http1.1的管道只是把客户端的请求序列变成了服务端的响应序列,还是有问题,很多浏览器并不是很支持
  • http1.1还增加了缓存,断点续传

http2.0 :

  • 采用了二进制分帧(frame),在应用层和传输层之间增加了一个二进制分帧层,也就是把http1.x的header和body使用帧(frame)进行了封装

    • 这里明确几个概念:流(stream) : 已经建立上连接的双向字节流(也就是一个请求和其对应的响应) 消息:与逻辑消息对应的完整的一系列数据帧 帧(frame):http2.0进行通信的最小单位,每个帧都会包含一个头部,这个头部会包含当前帧所处的流
  • 多路复用:所有的HTTP2.0通信都在一个TCP连接上完成,这个连接可以承载任意数量的双向数据流,每个数据流都以消息的方式进行发送,这个发送可以使乱序的,然后在通过每个帧头部的流标识符进行组装,同时每个数据流都可以设置优先级,可见http2.0真正实现了并行发送数据,这个是给予二进制分帧来实现的,接下来上一张图片,展示一下一个在一个流中分帧传输的实例

注:此图片来源于百度图片

  • 头部压缩:就是和服务端约定头部的数据的编码,来将头部进行压缩后发送,这样就可以增加请求头的容量

小结:这里讲的稍微有一点多,这里给一个总结

  1. http1.0:无连接,无状态,一次请求一个tcp连接
  2. http1.1:持久连接,请求管道化(有一些缺陷) ,增加了host字段,缓存,断点续传
  3. http2.0 : 二进制分帧(多路复用的实现基础), 多路复用,头部压缩

常见HTTP首部字段

这里我还是给大家推荐两篇博客,写的很详细就不在这里献丑了

地址1 : https://www.cnblogs.com/chenxizhaolu/p/7591549.html

地址2 : https://blog.csdn.net/chenyuanyong110/article/details/52781462

HTTP的缺点与HTTPS有哪些改进

http的传输是不安全的,https是http+ssl证书进行加密的,所以比http安全(这里的详细过程上面有写)

HTTP优化

  • 资源内敛 : 资源内联 : 既然每个资源的首次访问都会存在握手等rtt损耗,那么越少数量的资源请求就越好,例如咋一个html中src访问css,不如直接将其这个css集成到html中
  • 图片懒加载 ; 用到的时候在加载,这个已经很普遍了,就不细说了
  • 服务器渲染 : 让服务端先将页面渲染好,在发送给客户端,也可以减少rtt的次数

一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?

这里我的另一篇博客有详细的说明 地址连接 ; https://blog.csdn.net/zhttly/article/details/82832582  (喜欢的话赞一下啊)

为什么HTTPS安全

HTTPS是HTTP和SSL组合而成的,在传输层使用了SSL进行加密,保证了只有拥有私钥的才能看到信

原博:https://blog.csdn.net/zhttly/article/details/82895713

HTTP和HTTPS的区别和常见的面试题的更多相关文章

  1. python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题

    python爬虫---详解爬虫分类,HTTP和HTTPS的区别,证书加密,反爬机制和反反爬策略,requests模块的使用,常见的问题 一丶爬虫概述       通过编写程序'模拟浏览器'上网,然后通 ...

  2. 理解HTTP和HTTPS的区别

    原问转载于https://www.mysubmail.com/chs/blog/view/47 这两天闲来无事,在网上看了一下,发现 HTTP 和 HTTPS 的区别很受关注,多位大牛做了很详细的阐述 ...

  3. 大前端学习笔记整理【七】HTTP协议以及http与https的区别

    前言 还是老样子,新博客开始前总是想先啰嗦几句...HTTP协议其实在当初学习java时老师就有提过...但是...反正就那么过去了... 这段时间公司的项目正好要求做https的转换和迁移,然后自己 ...

  4. HTTP协议与HTTPS的区别

    permike 原文 HTTP协议与HTTPS的区别 HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. HTTP是在七层网络模型中的应用层的协议,由发送请求和接受响应构成, ...

  5. http与https的区别以及https的加密原理

    HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息.它使用安全套接字层 ...

  6. 浅谈HTTP和HTTPS的区别

    这篇随笔我们从六个步骤来学习: 1.了解HTTP和HTTPS的基本概念 2.HTTPS诞生的目的 3.HTTP与HTTPS的区别 4.HTTP和HTTPS的工作原理 5.HTTPS的优缺点 6.如何将 ...

  7. [菜鸟]HTTP 与 HTTPS 的区别

    HTTP 与 HTTPS 的区别 分类 编程技术 基本概念 HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式.协作式和超媒体信息系统的应用层协议. 简 ...

  8. HTTP和HTTPS的区别(转)

    原文链接:HTTP和HTTPS的区别 HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和 ...

  9. 连表查询都用Left Join吧 以Windows服务方式运行.NET Core程序 HTTP和HTTPS的区别 ASP.NET SignalR介绍 asp.net—WebApi跨域 asp.net—自定义轻量级ORM C#之23中设计模式

    连表查询都用Left Join吧   最近看同事的代码,SQL连表查询的时候很多时候用的是Inner Join,而我觉得对我们的业务而言,99.9%都应该使用Left Join(还有0.1%我不知道在 ...

随机推荐

  1. 【电子电路技术】PoE供电技术的优缺点

    转自http://www.mamicode.com/info-detail-1059108.html 1PoE供电稳定吗? 随着近几年网络监控的迅猛发展,技术门槛也是越来越高,厂商提供的技术支持也越来 ...

  2. Appium UiWatchers 监听解决各种非期待弹窗,弹层,弹弹弹等问题

    app自动化时,各种不期待的弹层弹窗,升级广告等时有飞出,由于弹窗具有不定时,不定页面等很多不确定性.有的弹窗很不友好,不×掉,很难进行下一步操作,造成 测试用例失败.而判断是否有弹窗,弹层很麻烦.研 ...

  3. LeetCode 946. 验证栈序列(Validate Stack Sequences) 26

    946. 验证栈序列 946. Validate Stack Sequences 题目描述 Given two sequences pushed and popped with distinct va ...

  4. LeetCode 150. 逆波兰表达式求值(Evaluate Reverse Polish Notation) 24

    150. 逆波兰表达式求值 150. Evaluate Reverse Polish Notation 题目描述 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, /.每个运算对象 ...

  5. hdfs、tfs、fastdfs、Tachyon

    hdfs 架构设计 HDFS按照Master和Slave的结构.分NameNode.SecondaryNameNode.DataNode这几个角色. NameNode:是Master节点,是管理者.. ...

  6. xorm - Update,乐观锁,更新时间updated,NoAutoTime()

    更新数据使用Update方法 Update方法的第一个参数为需要更新的内容,可以为一个结构体指针或者一个Map[string]interface{}类型. 当传入的为结构体指针时,只有非nil和非0的 ...

  7. PHP 可变参数

    <?php //php 可变参数 function concatenate( ...$strings): string { $string = ''; //此时的strings 是一个数组 fo ...

  8. Codeforces Round #570 Div. 3

    A:暴力从小到大枚举判断. #include<bits/stdc++.h> using namespace std; #define ll long long #define inf 10 ...

  9. 刚接触HTML5应该先学哪里才好?

    好吧,话不多说,直接来点干货吧! 刚接触html的小白都感觉摸不着头脑?应该怎么学习呢,其实HTML5可能对于还没有接触过的小白来说会比较的难,听起来也比较新颖.这是个什么骚东西!其实不然,这个就是构 ...

  10. css设置图片百分比显示,最简洁的代码

    css代码: .img-box { padding-bottom: 100%; } .img-box img { position: absolute; top:; bottom:; left:; r ...