HTTP最基础的内容,面试还不会?

网络 网络管理
HTTP 是一种无状态协议,也就是说服务器并不会维护客户端的状态信息。所以就有了 Cookie 和 Session 的出现了。而 Cookie 和 Session 就是用来维持状态的。

我们都知道关于 HTTP 一直都是面试里面经常被问到的内容,也是在开发的时候遇到的一些关于 HTTP 的状态码的问题,从而来定位解决问题。今天了不起就来说一下这个关于 HTTP 的相关知识。

HTTP

什么是 HTTP 呢?

HTTP 称为 超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

HTTP 的迭代:

  • 0.9

0.9协议是适用于各种数据信息的简洁快速协议,但是远不能满足日益发展的各种应用的需要。0.9协议就是一个交换信息的无序协议,仅仅限于文字。由于无法进行内容的协商,在双发的握手和协议中,并有规定双发的内容是什么,也就是图片是无法显示和处理的。

  • 1.0

到了1.0协议阶段,也就是在1982年,Tim Berners-Lee提出了HTTP/1.0。在此后的不断丰富和发展中,HTTP/1.0成为最重要的面向事务的应用层协议。该协议对每一次请求/响应建立并拆除一次连接。其特点是简单、易于管理,所以它符合了大家的需要,得到了广泛的应用。

  • 1.1

在1.0协议中,双方规定了连接方式和连接类型,这已经极大扩展了HTTP的领域,但对于互联网最重要的速度和效率,并没有太多的考虑。毕竟,作为协议的制定者,当时也没有想到HTTP会有那么快的普及速度。

  • 2.0

HTTP2.0的前身是HTTP1.0和HTTP1.1。虽然之前仅仅只有两个版本,但这两个版本所包含的协议规范之庞大,足以让任何一个有经验的工程师为之头疼。网络协议新版本并不会马上取代旧版本。实际上,1.0和1.1在之后很长的一段时间内一直并存,这是由于网络基础设施更新缓慢所决定的。

HTTP 工作原理

HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:

  • 客户与服务器建立连接;
  • 客户向服务器提出请求;
  • 服务器接受请求,并根据请求返回相应的文件作为应答;
  • 客户与服务器关闭连接。

其实也可以理解为下面的五个步骤

  • 客户端向服务器发送请求消息,请求消息中包含请求方法、URL、协议版本以及请求头等信息。
  • 服务器接收到请求消息后,根据请求消息的URL和相应的处理逻辑,生成服务器响应消息,并将其发送给客户端。
  • 响应消息中包含协议版本、状态码、响应头和响应体等信息。
  • 客户端接收到响应消息之后,会根据自身的处理方式进行处理,例如如果是网页,客户端会解析响应体中的HTML代码并渲染出网页。
  • 如果需要继续与服务器通信,客户端可以发起新的请求,并重复上述步骤。

而且 在HTTP协议中,客户端和服务器之间不会保持持久连接,每次请求需要重新与服务器建立连接。

又因为 HTTP 是一种无状态协议,也就是说服务器并不会维护客户端的状态信息。所以就有了 Cookie 和 Session 的出现了。而 Cookie 和 Session 就是用来维持状态的。

说到状态,我们就又想到了状态码,那么 HTTP 的状态码都有哪些呢?

了不起直接就想到了 200,404 ,500 这些状态码,那么我们再来看一下 HTTP 的状态码有多少吧。

HTTP状态码

不得不说,还真挺多,不看不知道,一看吓一跳那种。

1xx(信息性状态码)

  • 100 Continue
  • 101 Switching Protocols
  • 102 Processing

2xx(成功状态码)

  • 200 OK
  • 201 Created
  • 202 Accepted

204 No Content

  • 207 Multi-Status

3xx(重定向状态码)

  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 304 Not Modified
  • 307 Temporary Redirect

4xx(客户端错误状态码)

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found
  • 405 Method Not Allowable
  • 408 Request Time-Out

5xx(服务器错误状态码)

  • 500 Internal Server Error
  • 501 NotImplemented
  • 502 Bad Gateway
  • 503 Service Unavailable

既然都了解了 HTTP  那么必然就引出了 HTTPS 为什么呢?因为你在开发的过程中有没有遇到过的那种,有些页面访问地址是 HTTP 也有些页面是 HTTPS 的,那么 HTTP 和 HTTPS 有什么区别和联系呢?

HTTPS

HTTPS :是以安全为目标的HTTP通道, 通俗说就是安全版本的HTTP

为啥叫做HTTPS , S的含义, SSL:加密,在HTTP下加入SSL层

那加入 SSL 层的意义在哪呢?

因为HTTP的请求信息是明文传输, 容易被窃取 HTTP不会验证对方的信息, 存在被冒充的风险 数据的完整性没有校验, 容易被中间人篡改,所以就会增加了 SSL 来保证安全。

SSL操作步骤:

  • 验证服务器端
  • 允许客户端和服务端选择加密算法和密码, 确保双方都支持
  • 验证客户端
  • 使用公钥加密技术来生成共享加密数据
  • 创建一个加密的SSL连接
  • 基于该SSL连接传递HTTP请求

**HTTP 和 HTTPS 的区别

  • https协议需要 ca申请证书,一般免费的证书较少,因而是需要一定费用的]
  • http是超文本传输协议,信息是明文传输,https则是具有安全性的SSL加密传输协议
  • http 和 https使用的是完全不同的连接方式,用的端口也是不一样的。前者是80端口 后者是443端口
  • http的连接很简单,是无状态的;https协议是由 SSL + HTTP协议构建的可进行加密传输,身份认证的网络协议,比http协议安全.
  • 在OSI模型中,HTTP工作在应用层,而HTTPS工作在传输层。

关于 HTTP 你了解了么?

责任编辑:武晓燕 来源: Java极客技术
相关推荐

2020-03-10 08:33:04

HTTP演变协议

2019-12-19 09:08:42

HTTP浏览器缓存

2022-08-01 08:17:46

mysqlwindows系统

2022-01-27 07:39:57

进程操作系统Linux

2021-03-16 15:12:57

CompletableFuture机制java

2022-09-09 14:56:18

Linuxcpu

2024-01-01 15:30:59

JavaScriptWeb 应用程序开发

2021-11-10 07:47:48

Traefik边缘网关

2024-03-07 08:53:01

前端异步Promise

2023-04-07 08:46:41

Stream流map()Java8

2023-11-08 08:27:30

泛型Java

2010-07-01 16:01:05

HTTP协议

2019-07-24 09:22:45

Elasticsear数据Oracle

2024-09-09 08:36:36

Java操作远程服务器

2019-03-24 19:45:44

JavaScriptHtml5移动端Web

2020-05-14 08:59:28

API网关性能

2017-08-07 10:02:03

DNS服务基础

2023-09-13 08:37:56

程序员面试catch

2022-02-22 08:25:51

typeScript泛型概念泛型使用

2023-09-28 08:01:32

点赞
收藏

51CTO技术栈公众号