【网络进阶】HTTP服务器(一)

news2024/11/16 12:50:14

文章目录

    • 1. HTTP简介
    • 2. HTTP工作原理
    • 3. HTTP注意事项
    • 4. HTTP消息结构
    • 5. 客户端请求消息
    • 6. 服务器响应消息
    • 7. GET传递数据实例
    • 8. HTTP请求方法
    • 9. HTTP响应头信息

1. HTTP简介

HTTP(超文本传输协议,Hypertext Transfer Protocol)是一种用于传输超文本数据(如HTML、图片、视频等)的应用层协议。它允许互联网上的客户端和服务器之间通过请求和响应进行双向通信。HTTP 是互联网的基石,为 Web 浏览器和 Web 服务器之间的数据交换提供了标准规范。

HTTP 基于请求-响应模型。客户端(通常是 Web 浏览器)向服务器发送请求,请求中包含所需资源的 URL、请求方法(如 GET、POST 等)和可选的其他信息(如头部信息、请求正文等)。服务器接收到请求后,处理并返回一个响应,其中包含响应状态码(如 200 表示成功,404 表示未找到资源等),响应头部信息和响应正文(如HTML文档、图片等)。

HTTP 是无状态协议,这意味着每个请求都是独立的,服务器不会存储关于之前请求的信息。尽管如此,通常会使用 Cookie 等技术在客户端和服务器之间维护状态信息。

HTTP/1.1 是最常用的 HTTP 版本,但随着互联网的发展,HTTP/2 和 HTTP/3(基于 QUIC 协议)等更高效的版本逐渐普及。这些新版本在性能、安全性和可靠性方面进行了改进,以满足现代 Web 应用的需求。

2. HTTP工作原理

HTTP(超文本传输协议)是基于请求-响应模型的应用层协议,用于在客户端(如 Web 浏览器)和服务器之间传输超文本数据(如 HTML、图片、视频等),它工作于客户端-服务端架构上。浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端
即 WEB 服务器发送所有请求。

Web 服务器有:Apache 服务器,IIS 服务器(Internet Information Services)等。

Web 服务器根据接收到的请求后,向客户端发送响应信息。

HTTP 默认端口号为 80,但是你也可以改为 8080 或者其他端口。

下面是 HTTP 的工作原理的详细介绍:

  1. 建立连接:
    客户端(如浏览器)首先需要与服务器建立连接。在 HTTP/1.1 中,这通常通过建立一个 TCP 连接来实现。而在 HTTP/3 中,使用基于 UDP 的 QUIC 协议建立连接。连接建立后,客户端和服务器可以进行双向通信。

  2. 发送请求:
    客户端向服务器发送一个 HTTP 请求。请求包含以下几个部分:

    • 请求行:包括请求方法(如 GET、POST 等)、请求的 URL(统一资源定位符)和 HTTP 版本。
    • 请求头部:包含一些描述请求的元数据,例如客户端类型(User-Agent)、支持的内容类型(Accept)等。
    • 空行:用于分隔请求头部和请求正文。
    • 请求正文(可选):包含要发送给服务器的数据,例如 POST 请求中的表单数据。
  3. 服务器处理请求:
    接收到请求后,服务器会解析请求并根据请求内容进行处理。这可能包括查询数据库、执行服务器端脚本等操作。

  4. 发送响应:
    服务器处理完请求后,会向客户端发送一个 HTTP 响应。响应包含以下几个部分:

    • 状态行:包括 HTTP 版本、状态码(如 200 表示成功,404 表示未找到资源等)和状态描述。
    • 响应头部:包含一些描述响应的元数据,例如内容类型(Content-Type)、内容长度(Content-Length)等。
    • 空行:用于分隔响应头部和响应正文。
    • 响应正文:包含要返回给客户端的数据,例如 HTML 文档、图片、视频等。
  5. 关闭连接:
    在数据传输完成后,客户端和服务器根据请求头部中的“Connection”字段来决定是保持连接(keep-alive)以便后续请求复用,还是关闭连接。在 HTTP/1.0 中,默认为关闭连接,而在 HTTP/1.1 及以后的版本中,默认为保持连接。

在这里插入图片描述

3. HTTP注意事项

  1. 了解 HTTP 的无连接性:HTTP 是无连接协议,这意味着每次连接只处理一个请求。服务器处理完客户的请求并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。但请注意,在 HTTP/1.1 及以后的版本中,默认使用“keep-alive”机制,可让连接在处理多个请求时保持打开状态,以减少建立和关闭连接所需的时间和资源消耗。

  2. 理解 HTTP 的媒体独立性:HTTP 是媒体独立的,这意味着只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过 HTTP 发送。客户端以及服务器指定使用适合的 MIME-type 内容类型。确保使用正确的 MIME 类型以便正确传输和处理数据。

  3. 认识 HTTP 的无状态性:HTTP 是无状态协议,这意味着协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。为了在客户端和服务器之间维护状态信息,可以使用 Cookie 等技术。

  4. 选择合适的请求方法:使用正确的 HTTP 请求方法(如 GET、POST、PUT、DELETE 等)是非常重要的。例如,GET 方法用于获取资源,而 POST 用于创建或修改资源。使用正确的请求方法有助于遵循 RESTful 架构原则,提高应用的可维护性和可扩展性。

  5. 使用 HTTPS:为了保护数据的安全性和隐私,建议使用 HTTPS(HTTP 安全)而非 HTTP。HTTPS 在 HTTP 上添加了 SSL/TLS 加密层,确保数据在传输过程中的安全性和完整性。

  6. 有效利用缓存:使用缓存机制(如 ETag、Cache-Control 等)可以提高性能和减轻服务器负载。合理设置缓存策略可以确保客户端在需要时获取最新数据,同时避免不必要的请求。

  7. 遵循 HTTP 状态码规范:正确使用 HTTP 状态码可以帮助客户端更好地理解服务器响应。例如,使用 200 表示成功,404 表示资源未找到,500 表示服务器内部错误等。遵循状态码规范可以提高应用的可维护性和可读性。

  8. 优化请求和响应头部:减小请求和响应头部的大小可以降低延迟和带宽消耗。移除不必要的头部信息、使用压缩等方法可以优化头部传输。

  9. 使用更高效的 HTTP 版本:尽量使用较新的 HTTP 版本(如 HTTP/2 或 HTTP/3),这些版本在连接管理、数据传输等方面进行了优化,以提高性能和可靠性。

  10. 限制和管理并发请求:合理设置并发请求的数量和速率可以避免服务器过载。可以使用队列、限流等技术来实现并发请求的管理。

  11. 避免使用明文传输敏感数据:在发送包含敏感信息(如密码、身份证号等)的请求时,务必使用加密技术(如 HTTPS、加密算法等)来确保数据的安全性。

  12. 使用身份验证和授权:为了保护资源的安全性,使用合适的身份验证(如基本认证、OAuth2 等)和授权机制来控制对资源的访问。

  13. 了解跨域限制:浏览器的同源策略限制了不同源之间的资源访问。了解 CORS(跨域资源共享)策略及其限制可以帮助正确处理跨域请求。

4. HTTP消息结构

HTTP(超文本传输协议,Hypertext Transfer Protocol)是基于客户端/服务器端(Client/Server, C/S)架构模型的应用层协议,其主要作用是在互联网上进行信息交流。HTTP 是一种无状态的请求/响应协议,意味着服务器不会保存关于客户端的请求历史信息。

HTTP 客户端通常是一个应用程序,例如 Web 浏览器或其他类型的客户端软件。客户端通过建立连接来向服务器发送一个或多个 HTTP 请求,获取所需资源或执行特定操作。

HTTP 服务器则是另一种应用程序,通常是 Web 服务程序,如 Apache Web 服务器或 Microsoft Internet Information Services (IIS) 等。服务器负责接收客户端的请求,并根据请求内容生成并发送 HTTP 响应数据。

HTTP 使用统一资源标识符(Uniform Resource Identifiers, URI)来定位和访问资源。URI 提供了一种简单的方式来识别互联网上的资源,并通过网络传输数据和建立连接。

在建立连接之后,HTTP 数据消息会通过类似于 Internet 邮件所使用的格式(RFC5322)和多用途 Internet 邮件扩展(MIME,RFC2045)进行传输。这些格式和扩展为数据传输提供了结构化的信息描述和编码方式,使得HTTP能够处理各种类型的数据,如文本、图片、音频、视频等。

HTTP 消息结构包括请求和响应两种类型。它们都有相似的结构,主要由三个部分组成:起始行、头部和正文。下面将会分别进行介绍。

在实际传输过程中,HTTP 消息通常会被压缩或分块传输,以提高传输效率。但其基本结构保持不变。

5. 客户端请求消息

在这里插入图片描述

  • 请求行:包括请求方法(如 GET、POST 等)、请求的 URL(统一资源定位符)和 HTTP 版本。例如:GET /index.html HTTP/1.1
  • 请求头部:包含一些描述请求的元数据,例如客户端类型(User-Agent)、支持的内容类型(Accept)等。每个头部字段包含一个字段名和字段值,用冒号(:)分隔。头部字段之间用换行符分隔。
  • 空行:用于分隔请求头部和请求正文,由一个换行符表示。
  • 请求正文(可选):包含要发送给服务器的数据,例如 POST 请求中的表单数据。请求正文仅在某些请求方法(如 POST、PUT 等)中使用。

6. 服务器响应消息

在这里插入图片描述

  • 状态行:包括 HTTP 版本、状态码(如 200 表示成功,404 表示未找到资源等)和状态描述。例如:HTTP/1.1 200 OK
  • 响应头部:包含一些描述响应的元数据,例如内容类型(Content-Type)、内容长度(Content-Length)等。头部字段的结构与请求头部相同。
  • 空行:用于分隔响应头部和响应正文,由一个换行符表示。
  • 响应正文:包含要返回给客户端的数据,例如 HTML 文档、图片、视频等。根据请求和服务器处理结果,响应正文的内容和长度可能会有所不同。

7. GET传递数据实例

在这个示例中,我们将请求一个名为 “example.html” 的网页。
客户端请求内容:

GET /example.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

服务器响应内容:

HTTP/1.1 200 OK
Date: Tue, 02 May 2023 10:30:00 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Last-Modified: Mon, 01 May 2023 12:00:00 GMT
ETag: "3a012-58e1f422b5c10"
Accept-Ranges: bytes
Content-Length: 1024
Content-Type: text/html; charset=UTF-8
Content-Encoding: gzip
Vary: Accept-Encoding

<!DOCTYPE html>
<html>
<head>
    <title>Example Page</title>
</head>
<body>
    <h1>Welcome to the Example Page!</h1>
    <p>This is an example of a simple HTML page.</p>
</body>
</html>

输出结果:

当客户端(如 Web 浏览器)接收到服务器的响应后,它会将响应内容渲染为可视化页面。在这个例子中,输出结果将显示一个简单的 HTML 页面,包含一个标题 “Welcome to the Example Page!” 和一段文本 “This is an example of a simple HTML page.”。

8. HTTP请求方法

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

序号方法描述
1GET用于请求指定的资源,不会对数据产生任何影响。只获取资源的信息。
2POST用于提交数据到指定资源。可能会导致服务器状态的变化或数据的改变。
3PUT用于更新指定资源的全部内容。如果资源不存在,则创建资源。
4PATCH用于对资源进行部分更新。仅更新资源的部分内容。
5DELETE用于删除指定的资源。删除资源后,资源将不再可访问。
6HEAD类似于 GET 请求,但只请求资源的头部信息,不返回资源的主体内容。
7OPTIONS用于描述指定资源的通信选项。返回服务器支持的 HTTP 请求方法。
8CONNECT用于建立网络连接,通常用于 HTTPS 或代理服务器。
9TRACE请求服务器回显收到的请求信息,主要用于调试。

9. HTTP响应头信息

HTTP 请求头提供了关于请求,响应或者其他的发送实体的信息。

在本章节中我们将具体来介绍 HTTP 响应头信息。

序号应答头说明
1Accept-Ranges表明服务器是否支持请求的资源范围。
2Age从源服务器到代理缓存形成的估算时间(以秒为单位)。
3Allow提供对给定资源可用的请求方法的列表。
4Cache-Control指定请求和响应遵循的缓存机制。
5Connection控制网络连接的选项,如“keep-alive”保持连接或“close”关闭连接。
6Content-Encoding指定已应用于响应正文的编码。
7Content-Language描述资源所使用的自然语言。
8Content-Length表示响应正文的字节长度。
9Content-Location指示资源可在哪里找到的替代位置。
10Content-Disposition指示响应的附件的文件名和保存方式。
11Content-MD5提供响应体的MD5校验和,用于校验数据完整性。
12Content-Type描述响应正文的媒体类型。
13Date响应生成的日期和时间。
14ETag表示资源的特定版本的标识符。
15Expires描述响应中资源过期的日期和时间。
16Last-Modified指示资源的最后修改日期和时间。
17Link表示资源之间的关系。
18Location用于重定向用户代理到新的资源位置。
19P3P表示网站的隐私策略。
20Pragma提供实现特定的指令,如禁用缓存。
21Proxy-Authenticate指示客户端必须对代理进行身份验证。
22Refresh定期刷新页面的时间间隔。
23Retry-After指示客户端应等待多长时间(秒)再次尝试请求。
24Server描述响应服务器的名称和版本。
25Set-Cookie将一个或多个Cookie设置到客户端。
26Strict-Transport-Security告知浏览器仅通过安全连接(如HTTPS)访问站点。
27Transfer-Encoding指定已应用于消息正文的传输编码。
28Vary告知代理服务器如何选择合适的缓存响应。
29Via指示请求经过的代理服务器。
30Warning提供关于消息的可能问题或附加信息。
31WWW-Authenticate指示客户端必须进行身份验证。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/487230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Cloud的五大组件你知道多少

前言 Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发&#xff0c;如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等&#xff0c;都可以用Spring Boot的开发风格做到一键启动和部署。 Spring Clo…

瑞萨e2studio(25)----电容触摸配置(2)

瑞萨e2studio.24--电容触摸配置1 概述初始配置监控检测电容按键显示和测量标准差显示多个触摸按键曲线 概述 篇文档将在上篇文章基础上修改电容触摸配置。 初始配置 需要进入Debug模式才可以进行电容触摸配置。 监控检测电容按键 从电容触摸主界面&#xff08;QE&#xf…

解决Xshell安装时错误代码-1603的问题

安装流程 官网下载&#xff1a;家庭/学校免费 - NetSarang Website 填写姓名&#xff0c;邮箱&#xff0c;申请下载&#xff0c;就能在邮箱收到下载链接 点击链接即可自动开始下载&#xff1b; 下载完成后进行安装即可 问题描述 安装进行到最后一步时&#xff0c;出现下图…

CCED2000后,中文编程软件再次脱颖而出,系出金山

WPS抗衡微软&#xff0c;CCEDE却被淹没&#xff1f; DOS代&#xff0c;我们用WPS来进行文字编辑&#xff0c;CCED来做表格&#xff0c;两者在那个时代可以称得上是国产办公领域的“必装软件”。 如今&#xff0c;30年过去了&#xff0c;WPS一步一步成长为抗衡微软office的国产…

4d毫米波雷达聚类检测和追踪

待整理和写代码&#xff0c;准备先用dbcan聚类&#xff0c;用激光那一套做做看看效果 流程 4D雷达毫米波聚类跟踪流程如下图&#xff1a; 预处理主要包括标定、坐标转换和动静分离。 标定使用水平仪、角反&#xff0c;采集数据分析&#xff0c;得到水平和俯仰偏角。 坐标转…

nssctf web (3)

[HUBUCTF 2022 新生赛]checkin <?php show_source(__FILE__); #将当前文件的代码显示到页面 $username "this_is_secret"; #给username赋值 $password "this_is_not_known_to_you"; #给password赋值 include("flag.php");//here I ch…

MySQL数据管理

一、MySQL数据库管理 1、库和表 行&#xff08;记录&#xff09;&#xff1a;用来描述一个对象的信息 列&#xff08;字段&#xff09;&#xff1a;用来描述对象的一个属性 2、常用的数据类型 int &#xff1a;整型 float &#xff1a;单精度浮点 4字节32位 double &…

《网络安全审查办法》

1发展历程 2020年4月27日&#xff0c;12部门联合发布《网络安全审查办法》&#xff0c;2020年6月1日起实施。 2021年7月10日&#xff0c;国家互联网信息办公室发布关于《网络安全审查办法&#xff08;修订草案征求意见稿&#xff09;》公开征求意见的通知。11月16日国家互联网信…

【C++入门】你知道为什么C++有函数重载而C语言没有函数重载吗?

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

《最强Android书 架构大剖析》读书笔记

文章目录 第一章 Android 体系结构的变革之路1.2 Android系统源码目录与Linux的异同Android的框架原生二进制可执行文件Android 的原生库核心(core)库用以支持框架的库硬件抽象层Linux内核不带上层 UI界面的Android 第二章 Android 的分区和文件系统2.1 分区架构实验:从设备中获…

ffmpeg学习日记513-源码-configure_filtergraph()函数分析及功能

Date: 12/04/2023 Hours: Details:template_tags 文章目录 源码版本实现文件函数原型参数释义函数功能函数分析filtergraph_is_simple函数 总结参考 源码版本 ffmpeg-4.1.10 实现文件 fftools/ffmpeg_filter.c 函数原型 int configure_filtergraph(FilterGraph *fg)参数释…

重识三只松鼠:“二次创业”的新变革,“深蹲起跳”的新动能

“羚羊明白它必须跑得比狮子快&#xff0c;不然它会被狮子吃掉&#xff1b;每天早晨狮子醒来&#xff0c;狮子也明白它必须赛过跑得最慢的羚羊&#xff0c;不然它会活活饿死。不论你是狮子还是羚羊&#xff0c;都不重要……重要的是每天旭日东升&#xff0c;你就得开始奔跑&…

突破经典网格特征?AutoFocusFormer: Image Segmentation off the Grid 论文阅读笔记

突破经典网格特征&#xff1f;AutoFocusFormer: Image Segmentation off the Grid 论文阅读笔记 一、Abstract二、引言三、相关工作视觉 Transformer Backbones基于聚类的注意力自适应下采样点云网络 四、方法4.1 聚类和区域4.1.1 平衡聚类4.1.2 聚类的区域 写在前面 这一周赶上…

【五一创作】Visual Studio常用调试技巧的温习

当你在编写C程序时&#xff0c;难免会遇到代码出现错误的情况。这时候就需要用调试工具来定位问题并解决它。以下是一些在Visual Studio中使用调试器时常用的技巧&#xff0c;权当作温故总结罢~ 1. 断点 断点是调试中最为基本但也最常用的技巧之一。通过在需要定位的代码行上打…

一文搞懂 x64 IA-64 AMD64 Inte64 IA-32e 架构之间的关系

想要搞清楚 x64、IA64、AMD64 指令集之间的关系&#xff0c;就要先了解 Intel 和 AMD 这两家公司在生产处理器上的发展历史。 x86 处理器 1978年 Intel 生产了它的第一款 16bit 处理器8086&#xff0c;之后几款处理器名字也都以86结尾&#xff0c;包括80186&#xff0c;80286&a…

五一长假暴露了电动爹的真面目,而新能源汽车市场似乎也到了转折点

4月份国内市场汽车销量数据已经出炉&#xff0c;同比来说仍然保持了很高的增长&#xff0c;不过环比数据却显示出新能源汽车市场似乎已到了转折点&#xff0c;繁荣期似乎已经结束&#xff0c;淘汰赛开始了。 一、五一长假再次暴露了电动爹的真面目 新能源汽车长途旅行首先就是怕…

部署LVS-DR集群

引言 一、LVS-DR工作原理 LVS-DR&#xff08;Linux Virtual Server Director Server&#xff09;工作模式&#xff0c;是生产环境中最常用的一 种工作模式。 LVS-DR 模式&#xff0c;Director Server 作为群集的访问入口&#xff0c;不作为网关使用节点 Director Server 与 …

推荐算法实战项目:DeepFM 原理以及案例实战(附完整 Python 代码)

本文要介绍的是由哈尔滨工业大学联合华为发表论文《DeepFM: A Factorization-Machine based Neural Network for CTR Prediction》中提出的DeepFM模型。其实根据名字可以看出来&#xff0c;此模型包含Deep和FM两个部分。其中Deep部分就是普通的深度神经网络&#xff0c;FM是因子…

【图像处理】墨西哥小波和带通滤波

一、说明 在连续小波的家族当中&#xff0c;埃尔米特小波是个非常特别的存在&#xff08;应用在连续小波转换称作埃尔米特转换&#xff09;。Ricker子波计算电动力学的广谱源项。它通常只在美国才会被称作墨西哥帽小波&#xff0c;因为在作为核函数处理2维图像时&#xff0c;形…

推荐算法实战项目:NFM 原理以及案例实战(附完整 Python 代码)

本文要介绍的是由新加坡国立大学的研究人员在论文《Neural Factorization Machines for Sparse Predictive Analytics∗》中提出的NFM模型。 NFM模型全称是Neural Factorization Machines&#xff0c;通过名字也可以看出&#xff0c;这又是一个基于FM模型改进得到的网络。无论…