首页 > 其他分享 >HTTP 结构概述

HTTP 结构概述

时间:2024-05-09 11:47:17浏览次数:15  
标签:Web HTTP 报文 概述 服务器 客户端 资源 结构

Web 客户端和服务器

Web 内容都是存储在 Web 服务器上的,Web 服务器所使用的是 HTTP 协议,因此经常被称为 HTTP 服务器,HTTP 服务器存储了因特网的数据。客户端向服务器发送 HTTP 请求,服务器会在 HTTP 响应中返回请求的数据。最常见的 HTTP 客户端就是浏览器


资源

最简单的 Web 资源就是 Web 服务器文件系统中的静态文件,包括:文本文件、HTML 文件、图片文件、视频文件等等。资源不一定非得是静态文件,还可以是根据需要生成内容的软件程序。这些动态内容资源可以根据你的身份、所请求的信息或每天的不同时段来产生内容


媒体类型

因特网上有数千种不同的数据类型,HTTP 会给每种要通过 Web 传输的对象都打上了名为 MIME 类的数据格式标签。当 Web 浏览器从服务器中取回一个对象时,会查看相关的 MIME 类型,看看它是否知道应该如何处理这个对象。大多数浏览器都可以处理数百种常见的对象类型:显示图片文件、解析并格式化 HTML 文件、通过计算机声卡播放音频文件、或者运行外部插件软件来处理特殊格式的数据

MIME 类型是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔:

  • HTML 格式的文本文档由 text/html 类型来标记
  • 普通的 ASCII 文本文档由 text/plain 类型来标记
  • .JPEG 格式的图片为 image/jpeg 类型
  • .GIF 格式的图片为 image/gif 类型

URI

每个 Web 服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是什么了。服务器资源名被称为统一资源标识符(URI),就像邮政地址一样,唯一标识并定位资源信息

常见的图片资源 URI 如:http://www.joes-hardware.com/specials/saw-blade.gif


URL

统一资源定位符(URL)是资源标识符最常见的形式,描述了一台特定服务器上某资源的特定位置

大部分 URL 都遵循一种标准格式,这种格式包含三个部分:

  • 第一部分被称为方案(scheme),说明访问资源所使用的协议类型,通常是 HTTP 协议(http://)
  • 第二部分给出服务器的因特网地址,比如:www.joes-hardware.com
  • 其余部分指定 Web 服务器上的某个资源,比如:/specials/saw-blade.gif

现在,几乎所有的 URI 都是URL


URN

URI 的第二种形式就是统一资源名(URN),URN 作为特定内容的唯一名称使用,与目前的资源所在地无关,因此可以将资源四处搬移


方法

HTTP 支持几种不同的请求命令,这些命令被称为 HTTP 方法,每条 HTTP 请求报文都包含一个方法,这个方法会告诉服务器要执行什么动作(获取一个 Web 页面、运行一个程序、删除一个文件等)

  • GET:用于请求服务器发送某个资源
  • PUT:用于向服务器上传资源
  • DELETE:用于请求服务器删除指定的资源
  • POST:用于向服务器提交数据,通常用于提交表单或上传文件
  • HEAD:类似于 GET 请求,但服务器不返回请求的资源主体,只返回响应头

状态码

每条 HTTP 响应报文返回时都会携带一个状态码,状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作


报文

HTTP 报文是由一行行的简单字符串组成,HTTP 报文都是纯文本,所以人们可以很方便地对其进行读写。从 Web 客户端发往 Web 服务端的 HTTP 报文称为请求报文,从服务端发往客户端的报文称为响应报文

HTTP 报文包括以下三个部分:

  • 起始行:报文的第一行就是起始行,在请求报文中说明要做些什么,在响应报文中说明出现了什么情况
  • 首部字段:起始行后面有零个或多个首部字段,每个首部字段是一个键值对,首部以一个空行结束
  • 主体:空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给 Web 服务器的数据,响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频、音轨、软件程序)。当然,主体也可以包含文本

连接

HTTP 是个应用层协议,HTTP 无需操心网络通信的具体细节,它把网络通信的细节都交给了通用可靠的因特网传输协议 TCP/IP

因特网自身就是基于 TCP/IP 的,TCP/IP 是全世界的计算机和网络设备常用的层次化分组交换网络协议集。TCP/IP 隐藏了各种网络和硬件的特点,使各种类型的计算机和网络都能够进行可靠的通信

只要建立了 TCP 连接,客户端和服务器之间的报文交换就不会丢失,不会被破坏,也不会在接收时出现错序了

用网络术语来说,HTTP 协议位于 TCP 的上层,HTTP 使用 TCP 来传输其报文数据。与之类似,TCP 则位于 IP 的上层

标签:Web,HTTP,报文,概述,服务器,客户端,资源,结构
From: https://www.cnblogs.com/Yee-Q/p/18181682

相关文章

  • libuv概述
    1、综述  libuv是一个高性能的,事件驱动的I/O库,支持跨平台(由平台决定使用libev或IOCP),诞生自node.js。libev是网络库libevent的改进版,但libev在Windows下的性能不太好(使用select模型),而libuv则封装了Windows上的IOCP,性能更高,所以后来node.js使用libuv替换了libev。除了node.js以外......
  • 如果你还不了解 Java Class 文件结构,来看看这篇吧
    文章首发于【Java天堂】,跟随我探索Java进阶之路!Class文件是什么JavaClass文件是Java编译器将源代码编译后的二进制表示,它是Java虚拟机(JVM)运行的基础。Class文件绝大部分内容是在1997年发布的第一版《Java虚拟机规范》中就已经定义好的,后续20多年的发展过程当中Java经历了大......
  • https://github.com/long36708/long36708/blob/main/resources/img/grid-snake.svg 请
    对于这个文件,你可以将它放在你的GitHub仓库的"resources"目录下,通常也可以选择"assets"、"images"或者其他类似的名称。如果你还没有这样的目录,你可以按照以下步骤操作:在你的GitHub仓库中创建一个新的目录,可以命名为"resources"、"assets"、"images"或者其他你喜欢......
  • 如何从多个文件夹内转移全部文件(忽略文件夹的结构)(进行复制)(再打包)
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z 04文件夹里面有只有1个名称为"1"的文件夹,“1”里面有“2”,“2”有“3”,“3”有“4”,从“1”开始,都有5个兔兔的图片,这是“1”里面的文件夹结构,现在要做的就是忽略文件夹结构,提取出全部的兔兔图片合并成一个压缩......
  • 23种设计模式笔记-结构型模式
    23种设计模式-结构型模式笔记模板模式前提-模式:概念:规则:实现细节:应用场景:示意图:代码实现:创建型模式适配器、桥接、组合、装饰、外观、享元、代理。适配器模式-接口兼容思想概念:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一......
  • httpstat:测量HTTP请求的性能和状态信息
    Github地址:https://github.com/reorx/httpstatHTTP(HypertextTransferProtocol)是互联网上应用最广泛的协议之一,用于在客户端和服务器之间传输数据。在开发和维护Web应用程序时,了解HTTP请求和响应的性能和状态信息非常重要。Pythonhttpstat是一个强大的命令行工具,用于深入了解H......
  • struct:Python二进制数据结构
    在C/C++语言中,struct被称为结构体。而在Python中,struct是一个专门的库,用于处理字节串与原生Python数据结构类型之间的转换。本篇,将详细介绍二进制数据结构struct的使用方式。函数与Struct类struct库包含了一组处理结构值得模块级函数,以及一个Struct类。格式指示符将由字符串格......
  • C++基础-如何引入第三方静态库、动态库或自定义库 摘自 https://blog.csdn.net/u01310
    C++无论是内置库还是第三方库,都需要自己手动进行查找、配置、引入等工作。本文即是帮助完成C++项目对于库、框架如何完成依赖引入达成可调用的目的,重点讲述开发工具VisualStudio中的操作静态库(.lib)静态库引入适用用于大部分无开源的第三方库,开发者不需要关心库的具体实现如何,......
  • 零、基于FPGA的贪吃蛇游戏设计概述
    零、基于FPGA的贪吃蛇游戏设计概述1. 代码结构系统模块如图所示:   snake_top.v:顶层模块,例化子模块,连接及与外部信号通信;game_ctrl_unit.v:游戏状态控制模块,控制状态转换和输出;snake.v:控制蛇身运动方向和蛇身增长;appple_generate.v:通过加法产生随机的食物坐标;VGA_ctr......
  • 数据结构
    数据结构链表struct结构体构造链表//定义ListNode结构、三种构造函数structListNode{intval;ListNode*next;ListNode():val(0),next(nullptr){}ListNode(intx):val(x),next(nullptr){}ListNode(intx,ListNode*next):val(x)......