关于HTTP协议的基本概念

1. HTTP基本概念

1.1 HTTP是什么

HTTP = Hyper Text Transfer Protocol, 超文本传输协议

与TCP、IP等 二进制协议 不同,HTTP是一种 文本协议。文本协议的优点是 可读性好、扩展性好,缺点是 占用空间大。

什么是超文本:
HTTP传输的内容是超文本,相对于“文本”而言,超文本意指不再是普通的文本,它是“文字、图片、视频”的混合体,最关键是有超链接,能从一个超文本跳转到另一个超文本。
HTML是最常见的超文本,HTML内部用很多标签定义了图片、视频等的链接,在经过浏览器的解释,呈现给我们一个有文字、有画面的网页。

HTML:
HTML = Hyper Text Markup Language,超文本标记语言,
它包括一系列标签,通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。

注:
HTTP不仅可以用作服务器到本地浏览器之间的传输,也可以是服务器与服务器之间的传输。

1.2 HTTP常见的状态码有哪些

HTTP状态码分类(五大类):

HTTP状态码分类

HTTP状态码列表:

1xx

2xx

3xx

4xx_14xx_25xx

1.3 HTTP方法有哪些:

GET			#请求服务器上的资源
HEAD		#与GET相似,只返回HTTP头部
PUT			#向服务器提交数据
POST
TRACE
OPTIONS
DELETE		#请求服务器删除URL所指定的资源

1.4 HTTP请求头和响应头的格式:

(1)、 HTTP请求消息的格式如下:

请求行(request line)请求头部(header)空行请求数据 四个部分组成,下图给出了请求报文的一般格式:

HTTP请求消息格式

HTTP请求消息实例:

GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi

(2)、 HTTP响应消息也由四个部分组成,分别是:
状态行消息报头空行响应正文

HTTP响应消息格式

HTTP响应消息实例:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

输出结果:

Hello World! My payload includes a trailing CRLF.

2. HTTP特性

2.1 HTTP有哪些优点

(1)简单:

HTTP基本的报文格式就是 header+body,头部信息是 key-value,简单易用;

(2)灵活,易扩展:

头部各个字段没有写死,可以由开发人员自定义和补充;

(3)应用广泛、跨平台:

从台式机到手机,从浏览器到APP,HTTP在互联网领域内显示出跨平台的优越性。

2.2 HTTP有哪些缺点

(1)无状态双刃剑:

先来理解什么是HTTP的无状态:

简单概括:
HTTP无状态协议,是指协议对于交互式场景没有记忆功能,每一次的HTTP(请求、响应)都是一个独立的过程,不会保存任何连接信息。

例如在网站上 “登录->添加购物车->下单->结算->支付”这一系列操作都需要知道用户的身份,但服务器不知道这一系列请求是关联的,每次都要问一遍身份信息。
当涉及到交互时,每一步对于HTTP来说都是独立的,第一步验证登录这是一个合法用户,验证通过后给你返回200/OK,但是只要服务器返回了响应,那么一个HTTP请求和响应就结束了。在第二步将商品加入购物车,服务器并不知道你是谁,还需要将账号密码再次加入到请求参数中,每一次操作都要把之前已经传输过的账号密码再传输一遍。
这样就会导致每次连接传输的数据量增大,也降低了响应速度。

于是,为了支持客户端与服务器之间的交互,我们就需要通过不同的技术为交互存储状态,例如Cookie和Session。

Cookie:

简单概括:
由服务器创建,带给客户端保存,客户端之后每次发送请求时将cookie带上,服务器对其进行验证。

cookie实际上是一小段文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个cookie。

客户端把cookie保存起来,当浏览器再次请求该网站时,浏览器会把请求的网址同该cookie一同提交给服务器。

服务器检查cookie,以此来辨认用户状态。

服务器还可以根据需要修改cookie的内容。

无论什么类型的cookie,都是由服务器来一手创建,最终解释权归服务器,只有服务器才能理解这些cookie所代表的真正含义,客户只负责携带,不需要理解cookie的真正意义。

Session:

sessoin同样是用来记录用户状态,不同的是cookie保存在客户端的浏览器中,而session保存在服务器上,客户端只需要保存session-id。

(2)明文传输双刃剑:

明文传输为调试带来了便利,直接浏览器F12或者wireshark抓包就能查看数据内容。但信息裸奔导致数据很容易被窃取,比如账号密码。

(3)不安全:

① 使用明文传输,不加密,账号信息容易窃取;
② 不验证通信方身份,可能遭遇伪装;
③ 无法证明报文的完整性,数据可能已遭篡改。

HTTP的安全问题,都可以用HTTPS的方式解决。

2.3 HTTP 1.1 的性能如何:

HTTP协议基于TCP/IP,使用“请求-应答”的通信模式,性能的关键就在这两点:

(1)长连接:

HTTP 1.0使用的是短连接,即每一次HTTP请求响应都要经过一次TCP三次握手连接建立的过程,无谓的增加了开销,HTTP 1.1改用了长连接的方式:只要任意一端没有明确的提出断开连接,则保持TCP连接状态。

(2)管道网路传输与队头阻塞:

因为HTTP 1.1 采用了TCP长连接的方式,所以客户端可以同时发送多个请求,不必按照请求-响应这种一对一的方式。存在一个瓶颈是服务器需要“顺序”的对客户端的请求进行应答,即不能乱序回复response。这就导致一个问题,如果某个请求延迟到达服务器,则后面的请求即使已到达服务器,也要等到队头的请求到达后才能继续回复。


3. HTTPS与HTTP

3.1 HTTP与HTTPS有哪些区别

(1)HTTPS是在TCP与HTTP之间加入了SSL/TLS安全协议,TCP三次握手后还要再进行 SSL/TLS 握手;
(2)HTTP是明文传输,HTTPS是加密报文传输;
(3)HTTP的默认端口号是80,HTTPS的默认端口号是443
(4)HTTPS需要向CA申请数字证书,来保证服务器的身份是可信的。

3.2 HTTPS解决了HTTP的哪些问题

三个安全问题,全都解决。

3.3 HTTPS是如何解决HTTP不安全问题的

(1)混合加密;
(2)摘要算法;
(3)数字证书。

3.4 HTTPS是如何建立连接的,期间交互了什么

SSL/TLS四次握手。


参考内容:

硬核!30 张图解 HTTP 常见的面试题
HTTP状态码
HTTP消息结构
http协议报头详解HTTP协议结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值