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 的上层
HTTP 结构概述的更多相关文章
- NET5实践:项目创建-结构概述-程序运行-发布部署
ASP.NET5实践01:项目创建-结构概述-程序运行-发布部署 1.项目创建 ASP.NET5项目模板有三种: 新建项目: 选择模板: 2.结构概述 References对应配置是project ...
- openssl之EVP系列之7---信息摘要算法结构概述
openssl之EVP系列之7---信息摘要算法结构概述 ---依据openssl doc/crypto/EVP_DigestInit.pod翻译和自己的理解写成 (作者:Dragon ...
- 4th 循环结构概述和for语句的格式及其使用
04.01_Java语言基础(循环结构概述和for语句的格式及其使用) A:循环结构的分类 for,while,do...while B:循环结构for语句的格式: for(初始化表达式;条件表达式; ...
- 04 循环结构概述和for语句的格式及其使用
04.01_Java语言基础(循环结构概述和for语句的格式及其使用) A:循环结构的分类 for,while,do…while B:循环结构for语句的格式: for(初始化表达式;条件表达式;循环 ...
- 039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述
039 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 01 循环结构概述 本文知识点:循环结构概述 循环结构主要内容 while 循环 do-whiile ...
- 【算法】01-数据结构概述(注意区分jvm堆与堆/jvm栈与栈)
[算法]01-数据结构概述(注意区分jvm堆与堆/jvm栈与栈) 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有 ...
- MP4文件格式具体解释——结构概述
MP4文件格式具体解释(ISO-14496-12/14) Author:Pirate Leo Email:codeevoship@gmail.com 一.基本概念 1. 文件,由很多Box和FullB ...
- Tcl与Design Compiler (二)——DC综合与Tcl语法结构概述
1.逻辑综合的概述 synthesis = translation + logic optimization + gate mapping . DC工作流程主要分为这三步 Translation : ...
- Docker - Docker Engine 结构结构概述
概述 Docker Engine 结构的简单描述 ref docker 实战 第一本 docker 书 1. docker 版本 1. 版本 Docker Engine - Community 概述 ...
- DC综合与Tcl语法结构概述
转载:https://www.cnblogs.com/IClearner/p/6617207.html 1.逻辑综合的概述 synthesis = translation + logic optimi ...
随机推荐
- 花式栈溢出 CTFshowpwn88
花式栈溢出 在这之前确实对这方面了解很少,一般这种花式栈溢出不仅仅要求你能发现漏洞,最主要的是你要有随机应变的能力 这个题是一个64位的题目看一下保护 canary 和 nx保护都开了,我们用ida打 ...
- #莫队,bitset#洛谷 3674 小清新人渣的本愿
题目 分析 只要做到\(O(n\sqrt{n})\)的时间复杂度就可以了 考虑莫队,首先乘号就是枚举\(x\)的约数\(d\), 判断\(d\)和\(\frac{x}{d}\)是否同时出现, 再考虑差 ...
- 简洁,快速的bv号转av号 c++实现
加了一部分预处理,变得更高效了 继承自朋友这里 #include <iostream> #include <string> using namespace std; const ...
- SQL 数据操作技巧:SELECT INTO、INSERT INTO SELECT 和 CASE 语句详解
SQL SELECT INTO 语句 SELECT INTO 语句将数据从一个表复制到一个新表中. SELECT INTO 语法 将所有列复制到新表中: SELECT * INTO newtable ...
- Go 语言之 Maps 详解:创建、遍历、操作和注意事项
Maps 用于以键值对的形式存储数据值.Maps中的每个元素都是一个键值对.Maps是一个无序且可更改的集合,不允许重复.Maps的长度是其元素的数量.您可以使用 len() 函数来查找长度.Maps ...
- skywalking源码流程
我们已经知道skywalking的入口就是premain方法: public static void premain(String agentArgs, Instrumentation instrum ...
- C++ 默认参数与引用传递:语法、用法及示例
C++ 默认参数 默认参数概述 在 C++ 中,函数参数可以拥有默认值.这意味着,在调用函数时,如果省略了某个参数,那么将使用为该参数指定的默认值. 设置默认参数 默认参数值使用等号 = 符号进行设置 ...
- Redis 的并发竞争问题是什么?如何解决这个问题?了解 redis 事务的 CAS 方案吗?
面试官心理分析 这个也是线上非常常见的一个问题,就是多客户端同时并发写一个 key,可能本来应该先到的数据后到了,导致数据版本错了:或者是多客户端同时获取一个 key,修改值之后再写回去,只要顺序错了 ...
- 腾讯音乐:说说Redis脑裂问题?
Redis 脑裂问题是指,在 Redis 哨兵模式或集群模式中,由于网络原因,导致主节点(Master)与哨兵(Sentinel)和从节点(Slave)的通讯中断,此时哨兵就会误以为主节点已宕机,就会 ...
- Typescript 的数据类型有哪些?
一.是什么 typescript 和 javascript几乎一样,拥有相同的数据类型,另外在javascript基础上提供了更加实用的类型供开发使用 在开发阶段,可以为明确的变量定义为某种类型,这样 ...