2.HTTP、HTTPS

发布时间 2023-09-19 12:49:26作者: 壹索007
  1. HTTP

1HTTP 协议介绍

HTTP 协议,全称超文本传输协议(Hypertext Transfer Protocol)。顾名思义,HTTP 协议就是用来规范超文本的传输,超文本,也就是网络上的包括文本在内的各式各样的消息,具体来说,主要是来规范浏览器和服务器端的行为的。

并且,HTTP 是一个无状态(stateless)协议,也就是说服务器不维护任何有关客户端过去所发请求的消息。这其实是一种懒政,有状态协议会更加复杂,需要维护状态(历史信息),而且如果客户或服务器失效,会产生状态的不一致,解决这种不一致的代价更高。

 

2HTTP协议通信过程

HTTP 是应用层协议,它以 TCP(传输层)作为底层协议,默认端口为 80. 通信过程主要如下:

·服务器在 80 端口等待客户的请求。

·浏览器发起到服务器的 TCP 连接(创建套接字 Socket)。

·服务器接收来自浏览器的 TCP 连接。

·浏览器(HTTP 客户端)与 Web 服务器(HTTP 服务器)交换 HTTP 消息。

·关闭 TCP 连接。

 

3HTTP协议优点

扩展性强、速度快、跨平台支持性好。

 

4HTTPS协议

HTTPS协议(Hyper Text Transfer Protocol Secure),是 HTTP 的加强安全版本。HTTPS 是基于HTTP的,也是用 TCP 作为底层协议,并额外使用 SSL/TLS 协议用作加密和安全认证。默认端口号是 443.

HTTPS协议中,SSL通道常用基于密钥的加密算法,密钥长度通常是40比特或128比特。

HTTPS 协议优点保密性好、信任度高。

 

5从输入URL 到页面展示到底发生了什么?(非常重要)

类似的问题:打开一个网页,整个过程会使用哪些协议?

 

总体来说分为以下几个过程:

DNS 解析、TCP 连接发送 HTTP 请求服务器处理请求并返回 HTTP 报文浏览器解析渲染页面连接结束

 

 

上图有一个错误,请注意,是 OSPF 不是 OPSFOSPFOpen Shortest Path Firstospf)开放最短路径优先协议, 是由 Internet 工程任务组开发的路由选择协议

 

6HTTP 状态码有哪些?

HTTP 状态码用于描述 HTTP 请求的结果,比如2xx 就代表请求被成功处理。

 

 

 

 

7HTTP HTTPS 有什么区别?(重要)

·端口号:HTTP默认是80HTTPS默认是443

·URL前缀:HTTPURL前缀是http://HTTPSURL前缀是https://

·安全性和资源消耗 :HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS 高,但是 HTTPS HTTP 耗费更多服务器资源。

 

8HTTP 1.0 HTTP 1.1 有什么区别?

·连接方式 : HTTP 1.0 为短连接,HTTP 1.1 支持长连接。

·状态响应码 : HTTP/1.1中新加入了大量的状态码,光是错误响应状态码就新增了24种。比如说,100 (Continue)——在请求大资源前的预热请求,206 (Partial Content)——范围请求的标识码,409 (Conflict)——请求与当前资源的规定冲突,410 (Gone)——资源已被永久转移,而且没有任何已知的转发地址。

·缓存处理 : HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略例如 Entity tagIf-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。

带宽优化及网络连接的使用 :HTTP1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是 206Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

·Host头处理 : HTTP/1.1在请求头中加入了Host字段。

 

9 HTTP 是不保存状态的协议, 如何保存用户状态?

HTTP 是一种不保存状态,即无状态(stateless)协议。也就是说 HTTP 协议自身不对请求和响应之间的通信状态进行保存。那么我们保存用户状态呢?Session 机制的存在就是为了解决这个问题,Session 的主要作用就是通过服务端记录用户的状态。典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了(一般情况下,服务器会在一定时间内保存这个 Session,过了时间限制,就会销毁这个 Session)。

在服务端保存 Session的方法很多,最常用的就是内存和数据库(比如是使用内存数据库 redis 保存)。既然 Session 存放在服务器端,那么我们如何实现 Session 跟踪呢?大部分情况下,我们都是通过在 Cookie 中附加一个 Session ID 来方式来跟踪。

 

10Cookie 被禁用怎么办?

最常用的就是利用 URL 重写把 Session ID 直接附加在 URL 路径的后面。

11 URI URL 的区别是什么?

URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。

URL(Uniform Resource Locator) 是统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。

URI的作用像身份证号一样,URL的作用更像家庭住址一样。URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。