当前位置: 首页 > article >正文

【HTTP 和 HTTPS详解】1

目录

HTTP 和 HTTPS

HTTP(超文本传输​​协议)

HTTPS(安全 HTTP)

浏览器通信:通过 TCP 连接

TCP 在 HTTP/HTTPS 中的作用

面向非连接的UDP协议

 HTTP 方法:GET、POST 及其他

GET 方法

POST 方法

其他 HTTP 方法

PUT

DELETE

PATCH

在 Node.js 中实现 HTTP 方法

URL 结构和组件


HTTP 和 HTTPS

HTTP(超文本传输​​协议)

HTTP 是网络的命脉,它支持获取和发布 HTML 页面、图像和其他重要资源。
它遵循清晰的结构:
起始行:描述请求类型、目标资源和 HTTP 版本。
标题:提供有关请求或响应的重要元数据。
可选主体:包含使用 POST 或 PUT 等方法发送的数据。
HTTP 请求示例:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Connection: keep-alive
POST /submit-data HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: application/json
Content-Type: application/json
Content-Length: [length]
Connection: keep-alive

{
    "name": "John Doe",
    "email": "john.doe@example.com",
    "message": "Hello, world!"
}

HTTPS(安全 HTTP)

HTTPS 在传统的 HTTP 基础上增加了一层 TLS(传输层安全性),通过加密传输数据来增强安全性。它遵循与 HTTP 相同的结构规则,但确保所有传输的数据保持机密性和防篡改性。
HTTPS 请求示例:

GET /securedata.html HTTP/1.1
Host: www.secureexample.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
Accept: application/json, text/javascript, */*; q=0.01
Cookie: sessionId=789xyz
Connection: keep-alive

浏览器通信:通过 TCP 连接

TCP 在 HTTP/HTTPS 中的作用

当浏览器需要获取网页或向服务器发送数据时,它会使用 TCP。TCP 确保所有数据包都按正确的顺序到达且不会丢失,这对于成功呈现网页至关重要。
沟通时间表

  • TCP 连接建立(三次握手)
  • SYN:客户端向服务器发送同步(SYN)数据包以发起连接。
  • SYN-ACK:服务器以同步确认(SYN-ACK)进行响应。
  • ACK : 客户端发送确认(ACK),连接建立。

数据传输

  • 握手后,客户端通过建立的TCP连接发送HTTP/HTTPS请求。
  • 服务器处理请求并发回 HTTP/HTTPS 响应,由 TCP 进行分段和管理。

连接终止

  • 会话完成后,任何一方都可以发起连接终止。
  • 这涉及另一次握手,使用 FIN(完成)和 ACK 数据包来正常关闭连接。

面向非连接的UDP协议

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

为什么不使用 UDP? UDP 以其在直播或游戏等场景中的速度而闻名,但它缺乏 TCP 固有的可靠性机制。“面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。这与现在风行的手机短信非常相似:你在发短信的时候,只需要输入对方手机号就OK了。

HTTP 方法:GET、POST 及其他

HTTP 方法是 Web 操作结构的重要组成部分,用于定义要对给定资源执行的操作。每种方法都有特定的用例,并且对数据安全性和幂等性有影响。让我们深入了解这些方法的细节,特别是 GET 和 POST,然后扩展到涵盖 PUT、DELETE 和 PATCH 等其他方法。

GET 方法

目的: GET 方法用于使用给定的 URI 从指定服务器检索信息。使用 GET 的请求应仅检索数据,并且不应对数据产生其他影响。

GET /index.html HTTP/1.1
Host: www.example.com

要点:

  • 幂等且安全: GET 请求既是幂等的又是安全的,这意味着多次发出相同的 GET 请求将始终产生相同的结果,并且它们不会修改资源。
  • URL 中的数据:所有必需的数据都在 URL 中发送,包括查询参数,这使得其长度受到限制并且安全性较低。
  • 缓存: GET 请求是可缓存的,这意味着它们可以存储在缓存中以加快对同一资源的重复请求。

POST 方法

用途: POST 方法用于向服务器提交数据,例如客户信息、文件上传或消息。通常在需要创建或更新资源时使用。

POST /submit-data HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
username=example&password=1234

要点:

  • 非幂等: POST 请求不是幂等的,这意味着多次提交相同的 POST 请求可能会导致不同的结果或副作用。
  • 无数据限制:与 GET 不同,POST 没有大小限制,并且可以在请求正文中包含数据,这使得敏感数据更加安全。
  • 缓存性较差: POST 响应通常默认不可缓存,除非响应标头明确允许。

其他 HTTP 方法

PUT

此方法用于更新或替换整个资源。它是幂等的,这意味着多个相同的 PUT 请求应该与单个请求具有相同的效果。

PUT /user/12345 HTTP/1.1 
Host: www.example.com 
Content-Type: application/json  
{
  "firstName": "John",
  "lastName": "Doe"
}
DELETE

DELETE 方法删除指定的资源。它也是幂等的,确保无论执行多少次删除资源的结果都是相同的。

DELETE /user/12345 HTTP/1.1 Host: www.example.com
PATCH

用于对资源进行部分更改。PATCH 既不安全也不幂等,但比 PUT 更高效,因为它只发送更改的更新,而不是整个资源的更新。

PATCH /user/12345 HTTP/1.1 
Host: www.example.com 
Content-Type: application/json  
{
  "lastName": "Smith"
}

在 Node.js 中实现 HTTP 方法

const express = require('express');
const app = express();

app.use(express.json());

app.get('/', (req, res) => {
    res.send('GET request received');
});

app.post('/', (req, res) => {
    res.send(`POST request with data: ${req.body.username}`);
});

app.put('/user/:id', (req, res) => {
    res.send(`PUT request to update user ${req.params.id}`);
});

app.delete('/user/:id', (req, res) => {
    res.send(`DELETE request for user ${req.params.id}`);
});

app.patch('/user/:id', (req, res) => {
    res.send(`PATCH request for user ${req.params.id}`);
});

app.listen(3000, () => console.log('Server is running on port 3000'));

URL 结构和组件

URL(统一资源定位器)是对 Web 资源的引用。让我们分解一下它的结构:

https://www.example.com:8080/path/to/resource?query=param#fragment

  • 方案:https- 指示协议(HTTP 或 HTTPS)。
  • 主机:www.example.com- 服务器的域名或 IP 地址。
  • 端口:-(8080可选)指定端口号。
  • 路径:/path/to/resource-指定特定的资源或端点。
  • 查询:-(query=param可选)提供附加参数。
  • 片段:-(#fragment可选)指向资源的特定部分。
     

http://www.kler.cn/a/322370.html

相关文章:

  • 【支持向量机(SVM)】:相关概念及API使用
  • Nuxt3 动态路由URL不更改的前提下参数更新,NuxtLink不刷新不跳转,生命周期无响应解决方案
  • Pytest 学习 @allure.severity 标记用例级别的使用
  • 字节青训-判断数组是否单调、判断回旋镖的存在、字符串解码问题、小F的矩阵值调整、数字字符串中圆圈的数量计算 、小Q的非素数和排列问题
  • Qt的一个基本用户登录界面编写|| 从0搭建QT的信号与槽的应用案例 ||Qt样式表的应用
  • Stable Diffusion最全提示词写法教程
  • 如何快速熟悉项目
  • Facebook公共主页bug问题解决措施清单
  • TDOA方法求二维坐标的MATLAB代码演示与讲解
  • 在ubuntu24.04上安装Ollama并设置跨域访问
  • 动态规划算法:10.路径问题_地下城游戏_C++
  • GPS定位和测量原理
  • 8,STM32CubeMX配置SPI工程(读取norflash的ID)
  • runwayML启动500万美元基金资助AI生成影视
  • rk3588s android12 自启动 C程序
  • 海上安全守护者:北斗盒子TD20,为生命护航
  • 【论文通读】Diagnosing and Remedying Knowledge Deficiencies in LLMs via LaMer
  • 【软件工程】需求分析概念
  • spark之不同序列化对比
  • Thymeleaf 的创建
  • SQLite数据库管理:深入解析创建数据库、表、索引及用户权限与事务管理
  • jenkins分布式构建
  • Spring:强制登陆与拦截器
  • 高通AI应用程序开发3:网络模型(一)
  • SUSCTF2024-Redroid-出题笔记与解题思路
  • 6. 对象秘密的一生