01网络面经:你每天都用的HTTP协议,到底是什么鬼?

简介: 01网络面经:你每天都用的HTTP协议,到底是什么鬼?

作为开发人员,每天都在使用HTTP协议,但是否详细了解过一下该协议的构成及特性吗?本文就带大家全面的梳理一下。先来看一下本篇文章涉及到的知识点脑图。

image.png脑图原文件可在公众号【程序新视界】内回复“http”获得。下面,看具体关于HTTP协议的介绍。


HTTP协议简介

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是万维网的数据通信的基础。


HTTP协议基本格式:


协议://服务器IP:[端口]/路径/[?查询]

1

1999年6月公布的RFC 2616定义了HTTP协议中现今广泛使用的HTTP 1.1。HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。


HTTP协议概述

HTTP是一个客户端与服务器端请求应答的标准(TCP)。可通过浏览器或者其它的工具,发起一个HTTP请求到服务器上指定端口(默认:80)。


HTTP协议广泛应用于TCP/IP协议之上,但并非必须使用TCP/IP协议。HTTP假定下层协议可靠传输,因此能够保证这一要求的协议都可被使用。


HTTP协议数据是明文传输,不安全,可基于HTTPS进行加密处理,通常使用SSL/TLS协议进行加密。


基本使用流程:客户端发起HTTP请求,创建到指定服务器(端口)的TCP连接。服务器监听对应端口(默认80端口),接收并处理请求,返回状态码(比如:“HTTP/1.1 200 OK”)、内容、错误消息或其他信息。


HTTP协议特性

HTTP是无状态的

HTTP协议是无状态(stateless)协议。每次请求都是相互独立的,不会对请求或响应做持久化处理。好处:可以更快地处理大量事务、确保协议的可伸缩性。


针对业务需要,可引入了Cookie(HTTP 1.1)和Session技术,用于管理状态。


多次HTTP请求

针对一个网页,并不是一次请求完成。客户端首先响应的是HTML页面,然后再加载其他资源(CSS、JS、图片等)。HTTP 2.0 支持管道机制,可以同时请求和响应多个请求,大大提高了效率。


无连接

HTTP 1.0每次连接只处理一个请求。服务器处理完客户的请求,收到客户的应答后,即断开连接。目的是节省传输时间、提高并发性能。


HTTP 1.1 会等待一段时间,如无后续请求则断开,否则继续使用。目的是提高效率,减少短时间内建立连接的次数。


基于TCP协议

HTTP协议的目标是规定客户端和服务端数据传输的格式和数据交互行为,并不负责数据传输的细节。大多数底层是基于TCP实现。现在使用的版本当中是默认持久连接的,也就是多次HTTP请求使用一个TCP连接。


HTTP工作流程

客户端向服务器发送请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器响应请求结果,响应内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。


HTTP 请求/响应的基本步骤:


步骤一:客户端(比如浏览器)连接到Web服务器(默认80端口),并建立TCP连接。


步骤二:基于TCP,发起HTTP请求;


步骤三:服务接受请求并返回相应报文;


步骤四:释放连接TCP连接;


步骤五:客户端(浏览器)解析HTML内容并呈现;


如果在浏览器输入URL地址,地址为域名,则还需先向DNS服务器请求解析域名对应的IP,然后在基于IP和端口建立TCP连接。


HTTP请求报文

HTTP请求包含四个部分,分别是请求行(请求方法)、请求头(消息报头)、空行和请求正文。


image.pngHTTP请求报文示例:

# 请求行
POST /index.html HTTP/1.1
# 请求头
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:67.0) 
Accept: text/html,application/xhtml+xml,application/xml;
Accept-Language: zh-CN,zh;
Accept-Encoding: gzip, deflate
Referer: http://127.0.0.1/index.html
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
Connection: close
Cookie: security=impossible; PHPSESSID=8vv0n11btuol45hqcm5recmfp7
Upgrade-Insecure-Requests: 1
# 请求正文
username=admin&password=admin

需要注意的每一行末尾都有回车和换行,在内容实体和请求头之间有一个空行。

HTTP响应报文

HTTP响应由四部分组成,分别是响应行、响应头(消息报头)、空行和响应正文(消息主题)。

image.png响应报文示例:

# 响应行
HTTP/1.1 200 OK
# 响应头
Date: Tue, 10 Aug 2021 09:09:09 GMT
//...省略...
Content-Length: 5185
Connection: close
Content-Type: text/html;charset=gb2312
# 响应正文
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

其中,Content-Length表示响应正文中内容的长度。


HTTP请求方法

请求方法是客户端用来告知服务器其动作意图的方法,HTTP/1.1协议中共定义了8种方法来操作指定的资源。需要注意的是方法名区分大小写,都是大写字母。


GET:获取资源

请求获取指定URI对应的资源,只读,不应该产生“副作用”。


HEAD:获得报文首部

HEAD方法类似GET方法,但HEAD方法不要求返回数据。用于确认URI的有效性及资源更新时间等,可以理解为“元数据”。


POST:传输实体主体

POST方法用来传输实体的主体。


PUT:传输文件

PUT 方法用来传输文件,向指定资源位置上传其最新内容。


DELETE:删除资源

请求服务器删除所标识的资源,与PUT方法相反。


TRACE:追踪路径

回显服务器收到的请求,主要用于测试或诊断。


OPTIONS:询问支持的方法

获取指定资源所支持的所有HTTP请求方法。用’*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。


CONNECT:要求用隧道协议连接代理

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。


不支持对应方法时,返回状态码405(Method Not Allowed);未实现方法时,返回状态码501(Not Implemented)。


HTTP服务器至少应该实现GET和HEAD方法,其他方法可选。且所支持方法实现应匹配方法的语义定义。


HTTP状态码

状态码是用来告知客户端服务器端处理请求的结果。HTTP响应的第一行都是状态行(包括版本号、状态码、短语),具体内容见返回报文。


其中状态码包含以下类型:


1xx消息——接收的请求正在处理

2xx成功——请求正常处理完毕

3xx重定向——需要进行附加操作以完成请求

4xx请求错误——请求含有词法错误或者无法被执行

5xx服务器错误——服务器处理请求出错

常见状态码:


200:客户端请求成功,是最常见的状态。

302:重定向。

404:请求资源不存在,是最常见的状态。

400:客户端请求有语法错误,不能被服务器所理解。

401:请求未经授权。

403:服务器收到请求,但是拒绝提供服务。

500:服务器内部错误,是最常见的状态。

503:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

URL构成

超文本传输协议(HTTP)的统一资源定位符地址构成:


传送协议。

层级URL标记符号(为[//],固定不变)

访问资源需要的凭证信息(可省略)

服务器。(通常为域名,或IP地址)

端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)

路径。(以“/”字符区别路径中的每一个目录名称)

查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)

片段。以“#”字符为起点

http://www.choupangxia.com:80/blog/index.html?id=10&page=1 为例。


其中:


http,是协议;

www.choupangxia.com,是服务器;

80,是服务器上的默认网络端口号,默认不显示;

/blog/index.html,是路径(URI:直接定位到对应的资源);

?id=10&page=1,是查询。

小结

关于HTTP协议相关的知识就汇总这么多,重点关注HTTP协议使用场景、请求返回报文格式、使用流程以及特性。



目录
相关文章
|
缓存 网络协议 算法
04 网络面经:HTTP 2.0的这些新特性,是时候了解一下了
04 网络面经:HTTP 2.0的这些新特性,是时候了解一下了
161 0
04 网络面经:HTTP 2.0的这些新特性,是时候了解一下了
|
5月前
|
监控 安全 搜索推荐
设置 HTTPS 协议以确保数据传输的安全性
设置 HTTPS 协议以确保数据传输的安全性
|
2月前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
184 3
|
3月前
|
安全 搜索推荐 网络安全
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
101 11
|
3月前
|
缓存 安全 网络协议
HTTPS协议的历史发展
HTTPS协议的历史发展
103 8
|
3月前
|
安全 应用服务中间件 Linux
判断一个网站是否使用HTTPS协议
判断一个网站是否使用HTTPS协议
383 4
|
4月前
|
安全 网络协议 算法
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
358 4
HTTPS网络通信协议揭秘:WEB网站安全的关键技术
|
8月前
|
安全 网络协议 网络安全
IP代理的三大协议:HTTP、HTTPS与SOCKS5的区别
**HTTP代理**适用于基本网页浏览,简单但不安全;**HTTPS代理**提供加密,适合保护隐私;**SOCKS5代理**灵活强大,支持TCP/UDP及认证,适用于绕过限制。选择代理协议应考虑安全、效率及匿名需求。
|
4月前
|
存储 网络安全 对象存储
缺乏中间证书导致通过HTTPS协议访问OSS异常
【10月更文挑战第4天】缺乏中间证书导致通过HTTPS协议访问OSS异常
248 4
|
5月前
HAProxy的高级配置选项-配置haproxy支持https协议及服务器动态上下线
文章介绍了如何配置HAProxy以支持HTTPS协议和实现服务器的动态上下线。
243 8