HTTP权威指南------1.1HTTP概述

HTTP权威指南------HTTP概述

    • HTTP概述
      • C/S
        • 媒体类型
        • URI
        • URL
        • URN
      • 事务
        • 方法
        • 状态码
      • 报文
      • 连接
      • 版本历程
      • Web的结构组件
        • 代理
        • 缓存
        • 网关
        • 隧道
        • 用户代理

HTTP概述

HTTP是可靠数据传输协议,其传输过程确保数据的完整正确,无需进一步关注传输过程的控制。

C/S

客户端与服务器架构,服务器存储相应的web内容数据,客户端提出请求,服务器响应,通过报文对应完成资源请求的通信。
其中资源内容寄存于服务器中,其形式多样,可以是静态的文件,也可以是动态的程序服务。

媒体类型

MINE原先是用于邮件协议的,在HTTP的得以沿用,对应产生一个MINE类型来标注具体数据的内容。相应的形式在报文中以Content-type进行标注,其内容以 / 分割比如html格式为text/html,因为html在具体传输的时候还是以文本的形式,但是其具体的类型是html文件,所以标注为text/html,前者标注一个大范围的对象类型,后者具体标注子类型。

URI

URI(Uniform Resourse Identifier)统一资源标识符,其为每一个数据资源都进行一个标注,便于在访问的时候进行区分。其对应的形式有两种一个为URL(统一资源定位符),一个是URN(统一资源名)。

URL

对应的形式为:
(scheme)+(host)+(path)

  1. scheme: 标识了对应使用的协议类型,如http://或者https://等。
  2. host: 对应为服务器的地址,可以是对应的IP或者是域名,标注主机在网络中的位置。
  3. path: 找到对应主机后,通过path就可以找到相应资源的位置。
    如今,URL几乎就是URI的形式。

URN

URN作为特定内容的唯一名称使用,不关注资源所在的位置,同一个名称可以通过多种协议来访问资源。URN并未广泛使用。

事务

对于相应的资源请求,使用事务的形式对其进行处理,一个事务包括一个请求命令(客户端到服务器)与一个相应结果组成(服务器到客户端),而具体的过程是通过HTTP报文(一种格式化数据块)完成的。一个web界面的资源请求往往是由多个事务组成。

方法

对于请求的命令种类有多个,其命令称为HTTP方法。

状态码

状态码对应的在响应报文中,通过一个三位数字表示,表示请求处理的状态,通过这些状态来进一步进行相应操作。每个状态都对应一个原因短语,用于描述状态信息。
在这里插入图片描述

报文

报文主要包括请求报文响应报文。对应的编码是纯文本编码,不是二进制。请求报文是客户端发往服务器的,响应报文是服务器发往客户端的。
其组成为:

  • 起始行: 请求报文的起始行说明报文动作是啥,对应的包括请求的方法,路径,HTTP的版本;响应报文则对应说明请求的情况,包括HTTP的版本,状态码,与状态码对应的原因短语。
  • 首部字段: 由零到多个首部字段组成,每个字段占一行,首部字段是一个键值对,中间以 “:” 隔开,最后以一个空行结束。
  • 报文主体: 请求报文中主体为发给web服务器的数据,响应报文中则是返回给客户端的数据,主体的结构不是结构化的,根据主体的不同,可以包含任意的二进制数据,或者文本数据。
    在这里插入图片描述

连接

HTTP使用TCP协议进行传输层的通信传输。
在这里插入图片描述
大致过程:

  • 由URL得到IP或者域名。
  • 通过DNS将域名转换为IP。
  • URL中如果有端口号则使用URL中的端口号,若没有则默认80为端口。
  • 由套接字(IP加端口)建立TCP连接。
  • 传输报文(请求与响应)。
  • 获得到资源,关闭TCP连接,处理或者展示数据。
    在这里插入图片描述

版本历程

  • HTTP/0.9: 1991年的原型版本,仅支持GET方法,不支持MINE类型与各种HTTP首部,其目的仅为了获取HTML对象。
  • HTTP/1.0: 添加了各种首部与额外的相关方法,满足了对于多媒体数据对象的处理。
  • HTTP/1.0+: 非官方的标准统称为1.0+,添加了包括持久连接,虚拟主机支持,代理连接支持等。
  • HTTP/1.1: 完善HTTP的结构,明确语义,删除了许多的不必要特性,引入了性能优化,是当前的主流版本。
  • HTTP/2.0: 是HTTP后续的原型建议,侧重于性能优化和更强的服务器逻辑远程执行框架。

Web的结构组件

代理

其位置是在客户端与服务器之间的,其作用是处理转发的,客户端发送请求到代理处,代理进行处理(也可以不处理直接转发),之后进行转发,之后收到服务器的响应后转发给客户端。对于客户端其充当了服务器的角色,对于服务器其充当了客户端的角色。
在这里插入图片描述

缓存

Web缓存是一种特殊的HTTP代理服务器,其实现的功能不仅是处理转发,其本身还具有存储缓存的功能,可以将流经代理的相关常用文件进行缓存,当客户端再次使用的时候就不用再次去请求服务器,提升处理性能(再次请求服务器相对的代价更大)。
在这里插入图片描述

网关

是一种特殊的服务器,其位置也是在客户端与服务器之间,其可以将HTTP流量转换为其他协议。
在这里插入图片描述

隧道

通过HTTP协议不仅可以传输HTTP一个协议相关的数据,也可以将多个协议或者对多个端口的访问数据打包到HTTP中,通过HTTP协议进行传输。
其特点是盲发,在转发的过程中是不会查看数据的,常见的用法是在HTTP承载SSL(安全套接字层)流量,对于相应只允许Web流量通过的防火墙规则就被绕过了。
在这里插入图片描述

用户代理

代表用户发起HTTP请求的程序,常见的就是Web浏览器了,相应的搜索引擎也是一种用户代理,
在这里插入图片描述

热门文章

暂无图片
编程学习 ·

C++核心准则ES.40:避免复杂的表达式

ES.40: Avoid complicated expressionsES.40:避免复杂的表达式Reason(原因)Complicated expressions are error-prone.复杂的表达式容易引发错误。Example(示例)// bad: assignment hidden in subexpression while ((c = getc()) != -1)// bad: two non-local variables as…
暂无图片
编程学习 ·

错误码如何设计才合理?

一 前言在工作中,接触过不少外部接口,其中包括:支付宝,微信支付,微博开发平台,阿里云等等。每家公司错误码风格都不尽相同,有使用纯数字的,有使用纯英文的,也有使用字母和数字组合的。也接触过很多内部系统,错误码设计也不尽相同。错误码的输出路径面向日志输出服务…
暂无图片
编程学习 ·

Spring Boot 整合 Redis

Redis 基于内存进行存储,支持key-value的存储形式,底层是C 基于key-value形式的数据字典,没有数据表的概念,直接用键值对的形式完成数据管理 支持五种数据类型:字符串列表集合有序集合哈希安装Redis 1.下载Redis:https://redis.io/download 2.解压并在本地硬盘人任意位置…
暂无图片
编程学习 ·

Simulink中定义全局向量

Simulink中定义全局数组变量定义全局变量定义其为Data Dtore Memory创建Data Dtore Memory模块完成 最近在使用simulink时需要用到全局向量,但是在网上搜索到的都是一维的全局变量,也就是一个数,因此自己摸索了一段时间做出这篇总结。 定义全局变量 首先在matlab function中…
暂无图片
编程学习 ·

React配置less以及less的全局变量设置

工作中接触react的项目比较的少,对于less的全局变量设置在vue项目中设置过,react的全局变量设置没怎么接触了。 看到有小伙伴问这个,试着在网上找了下,也是花费了不少的功夫才找到不错的方式,在这里分享给大家。 由于之前vue项目里没法使用sass-resource-loader,一开始也…
暂无图片
编程学习 ·

CDH Hue连接Hbase报错

问题描述 安装好CDH集群后,在Hue中查看HBase信息时,Hue界面报错如下: Api 错误:TSocket read 0 bytesHue日志报错: exceptions_renderable ERROR Potential trace: [(/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hue/apps/hbase/src/hbase/api.py, 46,…
暂无图片
编程学习 ·

虚拟机VMware安装学习过程中遇到的几个问题

1.在安装VMware的时候刚开始因为版本不足的原因,电脑显示 Failed to initialize ploicy for cpu 后来我把它复制到百度上发现是我电脑版本过高的原因,于是又下载了VMware15.5.1版本 又查找了它的破解版。2.在安装的过程中还出现过屏幕就一个-,然后什么都不出现,于是查找资…
暂无图片
编程学习 ·

nexus3.x Liunx私库安装教程 (亲测!)

目录前言一、环境准备二、nexus环境配置三、了解nexus四、上传naxus五、使用nexus六、问题1、问题一后言 前言 书接上文?enn… 嘛~ ,上文:nexus 3.x下载 3.18.1(maven 私服) 上面是教如何下载nexus的 嘛,开始吧,有啥阔以聊的我后面再放吧(づ ̄ 3 ̄)づ一、环境准备 1、一台…
暂无图片
编程学习 ·

java之父詹姆斯高斯林的传奇人生

Java之父詹姆斯高斯林的传奇故事 詹姆斯高斯林 (James Gosling)是一名软件专家,1955年5月19日出生于加拿大,Java编程语言的共同创始人之一,一般公认他为“Java之父”。 1977年获得了加拿大卡尔加里大学计算机科学学士学位,1983年获得了美国卡内基梅隆大学计算机科学博士学…
暂无图片
编程学习 ·

B 1065 单身狗(散列的应用)

题目思路 这题明明写的是200ms要求,但可以暴力破解,这是我万万没想到的- -; 散列记录夫妻,hash【id】=cpid; 再用一个散列记录到场; 之后暴力破解遍历0~100001; 测试点3:注意00000的输出,有格式要求,不能输出成0; AC代码 #include<bits/stdc++.h> using names…
暂无图片
编程学习 ·

MRTK开发资料整理

1. 认识MRTK 2. 创建第一个MRTK项目—学习MRTK SDK的导入和打包发布 3.1 创建用户界面并配置MRTK—学习更改默认配置(clone default profiles) 3.2 MRTK内置编辑器手势操作 4. 使用Solvers创建动态内容—使创建的物体始终位于视野中心或随手的位置而改变Solvers are componen…
暂无图片
编程学习 ·

Python科学计算系列12—积分变换

1.拉普拉斯变换及逆变换拉普拉斯变换公式拉普拉斯逆变换公式例子:代码如下:from sympy import * from sympy.integrals import laplace_transformt, s, a = symbols(t s a) # 拉普拉斯变换 F1 = laplace_transform(sin(a * t), t, s) F2 = laplace_transform(exp(a * t), t, …
暂无图片
编程学习 ·

JavaScript之Date对象

Date对象用于处理日期和时间 用法: var 日期对象 = new Date(参数); <script>var today = new Date();var d0 = new Date("2016-2-14 12:30:24");var d1 = new Date("2016/2/14 12:30:24");var d2 = new Date(2016, 7, 18, 11); //月份取值为[0-11]…
暂无图片
编程学习 ·

浙江工业大学计算机技术专业考研经验分享帖

浙江工业大学复试经验分享自我介绍初试复习复试流程复试感想心态分享 自我介绍我,本科双非二本,软件工程专业,大学四年学业成绩在专业前十,拿过奖学金,参加过一些没啥含金量的比赛,不爱且不怎么会敲代码。就这样一个平凡的我决定考研了,考虑到地理,专业等因素,我将浙江…
暂无图片
编程学习 ·

MATLAB数据及其运算(二)

MATLAB数据及其运算(二) 矩阵 1.矩阵的建立 (1)直接输入法 在命令行窗口直接键盘输入矩阵。 过程:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的不同列的各元素之间用空格或逗号分离,不同行元素之间用分号隔开。(2)M文件建立矩阵 对于比较大且比较复…
暂无图片
编程学习 ·

vue循环渲染,点击添加类,获取id

一.思路总结 1.遍历出来对应的数组, 在click中赋值 遍历出来的item。 2.class进行决定是否显示,一点击就把对应的item赋到active中 3.此时active就和item.id一模一样的文本,然后返回一个true能显示当前的了 4.把最后一个瑕疵补上, 让第一个默认选中。就是把active放一个数值…
暂无图片
编程学习 ·

python中的eval函数

eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。想象一下变量赋值时,将等号右边的表达式写成字符串的格式,将这个字符串作为eval的参数,eval的返回值就是这个表达式的结果。 几个例子 a="[[1,2], [3,4], [5,6], [7,8], [9,0]]" pr…
暂无图片
编程学习 ·

城轨交通系统中智能化管理的作用分析

3D可视化集成系统是根据虚拟现实技术的情景在软件系统中,展现数据信息,把平时的软件业务流程在虚拟场景中完成。计划方案可运用于地铁站、轻轨站、单轨、有轨电车、磁浮等这种轨道交通系统的管理方法上。 轨道交通系统中,地铁已经中国成为大城市标准配置的交通工具,到目前为…
暂无图片
编程学习 ·

Redis简介与Resid的数据存储格式简单使用

Redis简介与Resid的数据存储格式简单使用 引入 Redis:我们使用MySql存在一些问题现象 为什么要使用NOSQL 具体表现为对如下三高问题的解决: High Performance - 数据库高并发访问 ​ 在同一个时间点,同时有海量的用户并发访问。往往要达到每秒上万次读写请求。关系数据库应付…