一篇讲清 HTTP / HTTPS / DNS

目录

[一. HTTP](#一. HTTP)

[1.1 请求报文](#1.1 请求报文)

[1.2 响应报文](#1.2 响应报文)

[1.3 最常见的 HTTP 请求方法](#1.3 最常见的 HTTP 请求方法)

[1.4 最常见的 HTTP 响应状态码](#1.4 最常见的 HTTP 响应状态码)

1xx:信息性状态码(临时响应,很少直接见到)

2xx:成功状态码(请求正常处理)

3xx:重定向状态码(需要客户端进一步操作)

4xx:客户端错误状态码(请求有问题,服务器无法处理)

5xx:服务器错误状态码(服务器处理出错)

[1.5 HTTP是无状态协议](#1.5 HTTP是无状态协议)

[二. HTTPS](#二. HTTPS)

[三. DNS](#三. DNS)


HTTP,HTTPS,DNS是互联网应用层最核心的三个协议,前两者都是基于传输层的TCP协议实现的。而DNS是基于TCP+UDP实现的。

有关TCP的介绍可以看我的这篇博客:一篇讲清TCP的三次握手&四次挥手-CSDN博客

作为一名开发者,这里可以主要关注常见的请求方法常见的状态响应码

一. HTTP

HTTP(超文本传输协议),其工作就是在浏览器客户端和服务器之间,按照事前约定好的规则,可靠的传输网页,图片等你一系列的能看到的内容。

他在客户端和服务端之间的通话模式是基于请求---响应模型实现的,客户端向服务器发送请求报文 ,服务器向客户端发送响应报文,想要请求的资源就被封装在报文中。所以说要想了解清楚HTTP的工作原理,就得先弄清楚请求报文和响应报文的格式。

1.1 请求报文

根据上面请求响应模型的图片我们可以看出请求报文分为三部分:请求行,请求头,请求体

**请求行:**报文第一行,核心信息

固定格式:请求方法 / 请求URL HTTP版本号

图中示例:GET /index.html HTTP/1.1

  • 请求方法:GET(告诉服务器要做什么,具体的请求方法在下文讲解)
  • 请求 URL:/index.html(要访问的资源路径)
  • HTTP 版本:HTTP/1.1(通信使用的协议版本)

这个请求行告诉服务器我要获取(GET)/index.html 这个资源

**请求头:**键值对格式,传递附加信息

紧跟请求行,每行一个键值对,用冒号分隔,告诉服务器客户端的能力、偏好等。图中常见的请求头。

这里没什么需要特别关注的,只需要记住这里是放Cookie的地方。(权限认证)

**请求体:**可选,传递业务数据

只有POST/PUT等提交数据的请求才有,GET请求没有请求体

示例:表单提交的用户名密码、JSON 格式的接口参数

1.2 响应报文

对应图中绿色框,由状态行、响应头、响应体三部分组成。

状态行(Status Line)**:**报文第一行,核心结果

固定格式:HTTP版本号 状态码 状态描述

图中示例:HTTP/1.1 200 OK

  • HTTP 版本:HTTP/1.1
  • 状态码:200(数字,代表请求结果,对于几种状态码的讲解在下文)
  • 状态描述:OK(文字,对状态码的解释)

响应头(Headers):键值对格式,服务器的附加信息

紧跟状态行,告诉客户端响应的属性、服务器信息等。这里存Cookie

还要记住Content-Type:响应体的类型和编码(HTML/JSON/ 图片等)

响应体(Body):实际返回的业务内容

  • 客户端最终要获取的数据,是报文的核心
  • 示例:HTML 页面内容、JSON 接口数据、图片 / 视频二进制流

1.3 最常见的 HTTP 请求方法

|------------|--------------|-----------------------------|-----------------|
| 请求方法 | 核心用途 | 特点 | 典型场景 |
| GET | 获取资源 | 无请求体;参数拼在 URL 后;可被缓存;有长度限制 | 打开网页、查询列表、获取图片 |
| POST | 提交资源 / 创建资源 | 有请求体;参数在 Body 中;不可被缓存;无长度限制 | 登录、注册、提交表单、上传文件 |
| PUT | 全量更新资源 | 有请求体;幂等(多次调用结果相同) | 修改用户全部信息、覆盖文件 |
| DELETE | 删除资源 | 一般无请求体;幂等 | 删除用户、删除文件 |
| HEAD | 仅获取资源的响应头 | 和 GET 完全一致,但服务器不返回响应体 | 检查文件是否存在、获取文件大小 |
| OPTIONS | 查询服务器支持的请求方法 | 服务器返回允许的方法列表 | 跨域预检请求(CORS) |

这里有一个非常经典的面试题:POST和GET的区别

  • 本质区别:语义不同(GET 是获取,POST 是提交)
  • 其他区别:参数位置、缓存、长度限制、安全性(都不绝对,POST 只是不显示在 URL)

1.4 最常见的 HTTP 响应状态码

状态码是 3 位数字,分为 5 大类,快速标识请求的结果,是状态行的核心。下面标红就是最常见的,需要记住。

1xx:信息性状态码(临时响应,很少直接见到)

  • 100 Continue:客户端可以继续发送请求体(用于大文件上传)

2xx:成功状态码(请求正常处理)

  • 200 OK:最常见,请求完全成功,返回对应资源
  • 201 Created:资源创建成功(POST/PUT 创建后返回)
  • 204 No Content:请求成功,但无响应体(DELETE 成功后常用)

3xx:重定向状态码(需要客户端进一步操作)

  • 301 Moved Permanently:永久重定向,资源已永久迁移到新 URL,浏览器会缓存
  • 302 Found:临时重定向,资源临时在新 URL,浏览器不缓存
  • 304 Not Modified缓存命中,资源未修改,客户端直接使用本地缓存(性能优化核心)

4xx:客户端错误状态码(请求有问题,服务器无法处理)

  • 400 Bad Request:请求参数错误、格式错误(比如 JSON 语法错)
  • 401 Unauthorized:未认证(未登录,需要先登录)
  • 403 Forbidden:禁止访问(已登录,但没有权限)
  • 404 Not Found:最常见,请求的资源不存在(URL 写错、资源已删除)
  • 405 Method Not Allowed:请求方法不允许(比如接口只支持 POST,你用了 GET)

5xx:服务器错误状态码(服务器处理出错)

  • 500 Internal Server Error:最常见,服务器内部错误(代码 bug、数据库崩溃)
  • 502 Bad Gateway:网关错误(反向代理服务器没收到后端的有效响应)
  • 503 Service Unavailable:服务不可用(服务器过载、停机维护)

1.5 HTTP是无状态协议

每个请求都是独立的,服务器不会记得你是谁。浏览器必须依靠Cookie或Token,让服务器在每一次请求中知道你是同一个用户

二. HTTPS

HTTPS 不是新的应用层协议,而是 HTTP + SSL/TLS 的组合:在 HTTP 和 TCP 之间加了一层安全套接层(SSL/TLS) ,解决了 HTTP 明文传输的三大致命安全问题:窃听、篡改、冒充

HTTP 所有数据都是明文传输,在网络传输的每一个节点(路由器、运营商、WiFi 热点)都能被拦截、读取、修改,没有任何安全性:

  1. 窃听风险:黑客可以直接获取你的账号密码、银行卡信息、聊天内容
  2. 篡改风险:黑客可以修改网页内容(比如植入广告、钓鱼链接)
  3. 冒充风险:黑客可以伪装成你要访问的网站(比如假银行网站)

HTTPS 的核心目标就是解决这三个问题,实现:

  • 保密性:数据加密传输,黑客无法窃听
  • 完整性:数据传输过程中无法被篡改
  • 身份认证:确认你访问的是真实的目标网站,不是黑客伪造的

至于具体实现这里不做具体讲解。不过开发者知道这些也就够了。

三. DNS

他就是把人类能读懂和能记住的域名(www.baidu.com),翻译成机器能读懂的IP地址

翻译过程:

  1. 先到本地缓存中找:如果之前访问过这个网站,那就会直接找到这个域名对应的IP地址。这是最快的
  2. 访问本地DNS服务器:这个主要由你的运营商提供(联通,移动等)
  3. 如果本地DNS找不到,会继续问根服务器(全球有13个),他不会告诉你最终答案,他会告诉你你的域名属于那个顶级域(.com ,.cn等)。
  4. 本地DNS会根据根服务器的指引先问顶级域名服务器,然后问权威DNS服务器(存储着真正的域名---IP地址映射关系),查到结果后本地DNS会把查到的结果返还给电脑,然后缓存一段时间。

这么设计为了分权和抗压。

相关推荐
happyh h h h p p p p1 小时前
VLAN综合实验
网络·智能路由器
淼淼爱喝水1 小时前
Ansible 中 handler 与 notify 的作用与使用详解
linux·网络·apache·playbook
ggaofeng1 小时前
在应用层用 TAP 设备从零实现完整的 TCP/IP 协议栈,并让两台物理机通过这套“自定义协议栈”通信
网络·网络协议·tcp/ip
@insist1231 小时前
信息安全工程师-网络安全风险评估(下篇):风险计算、工具应用
网络·安全·软考·信息安全工程师·软件水平考试
路baby1 小时前
CSRF漏洞详细讲解 并基于pikachu靶场实战演示
网络·网络协议·安全·web安全·网络安全·网络攻击模型·csrf
祁_z1 小时前
Pydantic 数据校验 & 限流中间件(限制每个 IP 的请求频率,防止接口被刷爆)
网络协议·tcp/ip·中间件
Naiva1 小时前
【杂记】通用发动机、水泵及发电机组安全注意事项与故障检查指南
网络·安全
上海合宙LuatOS1 小时前
Air8000多网通信-NTP
服务器·arm开发·物联网·网络协议·luatos
cc4422bb1 小时前
网络作业。
网络