关于HTTP的一些概念
各种概念
HTTP
HTTP(HyperText Transfer Protocol) —— 超文本传输协议
- 它可以拆成三个部分:“超文本”、“传输”、“协议”
- 协议必须要有两个或多个参与者,也就是“协”
HTTP是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流 通信的规范,以及相关的各种控制和错误处理方式。
- HTTP是一个“传输协议”,所谓“传输(Transfer)”,就是把一堆东西从A点搬到B点,或者从B点搬到A点,即“A<===>B”。其中间也可以存在多个“中间人”。
HTTP是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。
- 所谓“文本(Text)”,就表示HTTP传输的不是TCP/UDP这些底层协议里被切分的杂乱无章的二进制包(datagram),而是完整的、有意义的数据,可以被浏览器、服务器这样的上层应用程序处理。
所谓“超文本”,就是“超越了普通文本的文本”,它是文字、图片、音频和视频等的混合体,最关 键的是含有“超链接”,能够从一个“超文本”跳跃到另一个“超文本”,形成复杂的非线性、网状的 结构关系。
总结:
HTTP是什么?
HTTP是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
浏览器(Web Browser)
浏览器本质是一个HTTP协议中的请求方,使用HTTP协议获取网络上的各种资源。
在HTTP协议中,浏览器的角色被称为“User Agent”即“用户代理”,意思是作为访问者的“代理”来发起HTTP请求,通常都简单地称之为“客户端”。
Web服务器(Web Server)
它是HTTP协议里响应请求的主体,通常也把控着绝大多数的网络资源。谈及“Web服务器”,会涉及两个层面的含义:硬件和软件。
- 硬件含义就是物理形式或“云”形式的机器,在大多数情况下它可能不是一台服务器,而是利用反向代理、负载均衡等技术组成的庞大集群。
- 软件含义就是提供Web服务器的应用程序,通常会运行在硬件含义的服务器上。
CDN
CDN,全称是“Content Delivery Network”,即内容分发网络。它应用可HTTP协议里的缓存和代理技术,代替源站响应客户端的请求。
HTML/WebService/WAF
HTML是HTTP协议传输的主要内容之一,它描述了超文本页面,用各种“标签”定义文字、图片等资源和排版布局,最终由浏览器“渲染”出可视化页面。
Web Service是一种由W3C定义的应用服务开发规范,使用client-server主从架构,通常使用WSDL定义服务接口,使用HTTP协议传输XML或SOAP消息,也就是说,它是一个基于Web(HTTP)的服务架构技术,既可以运行在内网,也可以在适当保护后运行在外网。
WAF,即“网络应用防火墙”。与硬件“防火墙”类似,它是应用层的“防火墙”,专门检测HTTP流量,是防护Web应用的安全技术。
TCP/IP
TCP/IP协议实际上是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP,其他的还有UDP、ICMP、ARP等等,共同构成了一个复杂但有层次的协议栈。
这个协议栈有四层,最上层是“应用层”,最下层是“链接层”,TCP和IP则在中间:TCP属于“传输层”,IP属于“网际层”。
- IP协议主要目的是解决寻址和路由问题,以及如何在两点间传送数据包。
- TCP协议,意思是“传输控制协议”,它位于IP协议之上,基于IP协议提供可靠的、字节流形式的通信,是HTTP协议得以实现的基础。
- “可靠”是指保证数据不丢失,“字节流”是指保证数据完整,所以TCP协议的两端可以如同操作文件一样访问传输的数据,就像是读写在一个密闭的管道里“流动”的字节。
DNS 域名系统
在DNS中,“域名”又称为“主机名”。域名用“.”分割成多个单词,级别从左到右逐级升高。最右边的被称为“顶级域名”。
域名转换为IP地址的过程即为“域名解析”。
DNS的核心系统是一个三层的树状、分布式服务,基本对应域名的结构:
- 根域名服务器(Root DNS Server):管理顶级域名服务器,返回"com"、"net"、"cn"等顶级域名服务器的IP地址;
- 顶级域名服务器(Top-level DNS Server):管理各自域名下的权威域名服务器,比如com顶级域名服务器可以返回apple.com域名服务器的IP地址;
- 权威域名服务器(Authoritative DNS Server):管理自己域名下主机的IP地址,比如apple.com权威域名服务器可以返回www.apple.com的IP地址。
Ex:
访问“www.apple.com”,就要进行下面的三次查询:
- 访问根域名服务器,它会告诉你“com”顶级域名服务器的地址;
- 访问“com”顶级域名服务器,它再告诉你“apple.com”域名服务器的地址;
- 最后访问“apple.com”域名服务器,就得到了“www.apple.com”的地址。
但如果全世界都往这个系统挤,即使系统不瘫痪,访问速度也会很慢。因此,常有两种手段减轻域名解析的压力,基本思路就是“缓存”。
- 公司或网络运行商简历自己的DNS服务器,作为用户DNS查询的代码,代替用户访问核心DNS系统。
- 操作系统也会对DNS解析结果做缓存。
- 操作系统里还有一个特殊的“主机映射”文件。
URI/URL
URI(Uniform Resource Identifier)统一资源标识符,能够唯一标识互联网上资源。
URI另一个更常用的表现形式是URL(Uniform Resource Locator),统一资源定位符,也就是俗称的“网址”,它实际上是URI的一个子集。
Ex:
http://nginx.org/en/download.html
URI主要由三个基本部分构成:
- 协议名:即访问该资源应当使用的协议,例子中为“http”;
- 主机名:即互联网上主机的标记,可以是域名或IP地址,例子中为“nginx.org”;
- 路径:即资源在主机上的位置,使用“/”分割多级目录,例子中为“/en/download.html”。

URI第一个组成部分叫scheme,即“方案名”或者“协议名”,表示自愿应该使用哪种协议来访问;
在scheme之后,必须是三个特定字符:“://”,它把scheme和后面的部分分离开;
在“://”之后,是被称为“authority”的部分,表示资源所在的主机名,通常表现为:"host:port",即主机名加端口号;其中,端口号可省略。
这之后标记资源所在位置的path,就可以访问服务器资源了。
状态码
RFC标准把状态码分成了五类,用数字的第一位表示分类。
- 1XX:提示信息,表示目前是协议处理的中间状态,还是需要后续的操作;
- 2XX:成功,报文已经收到并被正确处理;
- 200 OK:最常见的成功状态码,表示一切正常。
- 204 No Content:与200 OK 基本相同,但响应头后没有body数据。
- 206 Partial Content:HTTP分块下载或断点续传的基础,在客户端发送“范围请求”、要求获取资源的部分数据时出现;通常会伴随着头字段:“Content-Range”,表示响应报文里body数据的具体范围,供客户端确认,例如:“Content-Range:bytes 0-99/2000”,意思是此次获取的是总计2000个字节的前100个字节
- 3XX:重定向,资源位置发生变动,需要客户端重新发送请求;
- 301 Moved Permanently:俗称“永久重定向”,指此次请求的资源已经不存在了,需要改用新的URI再次访问。
- 302 Found:俗称“临时重定向”,意思是请求的资源还在,但需要暂时用另一个URI来访问。
- 304 Not Modified:用于If-Modified-Since等条件请求,表示资源未修改,用于缓存控制。(缓存重定向)
- 4XX:客户端错误,请求报文有误,服务器无法处理;
- 400 Bad Request:通用的错误码,表示请求报文有错误。
- 403 Forbidden:服务器禁止访问资源。
- 404 Not Found:资源在本服务器上未找到,所以无法提供给客户端。

- 5XX:服务器错误,服务器在处理请求时内部发生了错误。
- 500 Internal Sever Error:通用的错误码,服务器究竟发生了什么错误我们是不知道的。
- 501 Not Implemented:客户端请求的功能还不支持。
- 502 Bad Gateway:服务器作为网关或者代理时返回的错误码,表示服务器自身工作正常,访问后端服务器时发生了错误。
- 503 Service Unavailable:服务器当时很忙,暂时无法响应服务。它是一个“临时”的状态,响应报文里通常还会有一个“Retry-After”字段,指示客户端可以在多久以后尝试
HTTPS
HTTPS,全称是“HTTP over SSL/TLS”,也就是运行在SSL/TLS协议上的HTTP。
SSL/TLS,是一个负责加密通信的安全协议,建立在TCP/IP之上,是个可靠的传输协议,可以被用作HTTP的下层。
代理
代理(Proxy)是HTTP协议中请求方和应答方中间的一个环节,作为“中转站”,既可以转发客户端的请求,也可以转发服务器的应答。常见的代理有:
- 匿名代理:完全“隐蔽”了被代理的机器,外界看到的只是代理服务器;
- 透明代理:在传输过程中是“透明开放”的,外界既知道代理,也知道客户端;
- 正向代理:靠近客户端,代表客户端向服务器发送请求;
- 反向代理:靠近服务器端,代表服务器响应客户端的请求。
关于HTTP的一些概念的更多相关文章
- 如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念
一.前言 DDD(领域驱动设计)的一些介绍网上资料很多,这里就不继续描述了.自己使用领域驱动设计摸滚打爬也有2年多的时间,出于对知识的总结和分享,也是对自我理解的一个公开检验,介于博客园这个平 ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...
- 声音分贝的概念,dBSPL.dBm,dBu,dBV,dBFS
需要做个音频的PPM表,看着一堆的音频术语真是懵了,苦苦在网上扒了几天的文档,终于有了点收获,下面关于声音的分贝做个总结. 分贝 Decibel 分贝(dB)是一个对数单位(logarithmic u ...
- js面向对象学习 - 对象概念及创建对象
原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...
- 【Linux大系】Linux的概念与体系
感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei 我在这一系列文章中阐述Linux的基 本概念.Linux操作系统继承自UNIX.一个操作系统是一套控制和使用计算 ...
- KOTLIN开发语言文档(官方文档) -- 2.基本概念
网页链接:https://kotlinlang.org/docs/reference/basic-types.html 2. 基本概念 2.1. 基本类型 从可以在任何变量处理调用成员函数和属性 ...
- .NET面试题系列[5] - 垃圾回收:概念与策略
面试出现频率:经常出现,但通常不会问的十分深入.通常来说,看完我这篇文章就足够应付面试了.面试时主要考察垃圾回收的基本概念,标记-压缩算法,以及对于微软的垃圾回收模板的理解.知道什么时候需要继承IDi ...
- 《徐徐道来话Java》(1):泛型的基本概念
泛型是一种编程范式(Programming Paradigm),是为了效率和重用性产生的.由Alexander Stepanov(C++标准库主要设计师)和David Musser(伦斯勒理工学院CS ...
- 简述linux同步与异步、阻塞与非阻塞概念以及五种IO模型
1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...
随机推荐
- Codeforces Round #575 (Div. 3) D2. RGB Substring (hard version) 【递推】
一.题目 D2. RGB Substring (hard version) 二.分析 思路一开始就想的对的,但是,用memset给数组初始化为0超时了!超时了! 然后我按照题解改了个vector初始化 ...
- gtk---实现一个登录界面
输入框 如果在GTK+中需要输入一个字符串,可以使用输入框,这是一个单行的输入构件,可以用于输入和显示正文内容. 输入框的基本操作函数 1.gtk_entry_new(void); 这是新建一个输入框 ...
- 【小白学算法】5.链表(linked list)、链表的添加
链表其实也就是 线性表的链式存储结构,与之前讲到的顺序存储结构不同. 我们知道顺序存储结构中的元素地址都是连续的,那么这就有一个最大的缺点:当做插入跟删除操作的时候,大量的元素需要移动. 如图所示,元 ...
- [leetcode] 单调栈
本文总结单调栈算法. 原问题 学习一个算法,我们需要清楚的是:这个算法最原始的问题背景是什么样的? 下一个更小元素 给定一个数组 nums,返回每个元素的下一个更小的元素的下标 res,即 res[i ...
- Elasticsearch扩展X-pack实施流程-实施
Elasticsearch扩展X-PACK实施流程 elasticsearch5.2.1安装X-PACK,对ES集群进行监控,报警,安全验证,报告,图形化操作 注意 版本号需要固定,小版本都不能差,要 ...
- [Azure Devops] 获取单元测试的代码覆盖率
1. 获取代码覆盖率 上一篇文章里,我们在 Pipeline 中插入一个单元测试并把所有单元测试都通过作为 Pipeline 通过的硬性要求.除此以外,我们还可以获取单元测试的代码覆盖率,用作衡量代码 ...
- 学一手,知乎大V(轮子哥)当年靠它进微软亚洲研究院
前言 vczh本名陈梓瀚,不过大家更愿意叫他「轮子哥」,毕业于华南理工大学软件学院.vczh大学时代就在微软实习,毕业后即加入微软.开始时是在微软上海,后来进入北京的微软亚洲研究院.现已移居美国西雅图 ...
- 经常问到的 BFC 和 IFC 是什么?
什么是BFC?什么作用? Block Formatting Context 块盒子布局发生的区域,浮动元素和其他元素交互的区域 浮动定位和清除浮动的时候只会应用于同一个BFC内的元素.浮动不会影响其他 ...
- Recoil 中默认值的正确处理
继续使用 Recoil 默认值及数据级联的使用 的地域可用区级联的例子. 地域变更后可用区随之联动,两个下拉框皆默认选中第一个可选项. 从 URL 获取默认值 考虑这种情况,当 URL 中带了 que ...
- JAVAEE_Servlet_24_HttpSession实现原理
关于JavaWeb中的HttpSession (一) * Session表示会话,不止存在于JavaWeb之中,只要是Web开发都会存在这种机制 * Session包:javax.servlet.ht ...