本文参考《HTTP权威指南》整理而成

概述

Web内容是存储在web服务器上的,web服务器所使用的是HTTP协议,因此经常会被称为HTTP服务器,所以说,HTTP服务器是使用HTTP协议访问的服务器,TCP服务器使用tcp协议访问的服务器;

媒体类型

因特网上有数千种不同的数据类型,HTTP使用MIME来描述并标记多媒体内容,最初MIME(Multipurpose Internet Mail Extension,多用途因特网邮件扩展)是为了解决不同电子邮件系统之间搬移报文时存在的问题。HTTP服务器会为所有HTTP对象数据附加一个MIME类型,当web浏览器从服务器中取回一个对象是会查看相关的MIME类型,来判断它应该如何处理这个对象。

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

HTML格式的文本:text/html

普通ASCII文本文档:text/plain

JPEG格式图片:image/jpeg

等等

URI

URI(Uniform Resource Identifer)统一资源标识符,类似于现实中的地址一样,用于标记网络中的资源信息。URI有两种形式,分别称为URL和URN。

URL

URL(Uniform Resource Locator)统一资源定位符,是URI中最常见的形式,它描述了一台特定的服务器上某种资源的特定位置。

http://www.baidu.com/spicals/saw-blade.gif  格式为: 协议://主机名/资源路径

现在,几乎所有的url都是uri。

URN

uri的第二种形式是统一资源名(URN)

事务

HTTP中的事务是由一条从客户端发往服务器的请求命令和一个从服务器发回客户端的响应结果组成。这种通信是通过名为HTTP 报文的格式化数据块组成。

方法

HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(HTTP method)。每条 HTTP请求报文都包含一个方法,这个方法会告诉服务器需要至此那个什么动作。

状态码

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

常见的状态码:

200    ok,正确返回

302    Redirect(重定向),请到其他地方去获取资源。

404    Not Found(没找到),无法找到这个资源。

报文

HTTP报文包括以下三个部分:起始行,首部字段(请求头,header),主体(请求体)

连接

TCP/IP

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

TCP协议提供了:

  • 无差错的数据传输

  • 按顺序传输(发送顺序=到达顺序)

  • 未分段的数据流(可以再任意时刻以任意尺寸将数据发送出去)

说明:TCP/IP 不是TCP协议 + IP协议,它是一个协议族,包含多个协议,如tcp协议,ip协议,udp协议等。其中tcp协议是传输层协议。

HTTP协议与TCP协议的关系

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

如下:

  • HTTP                                应用层                 上

  • TCP                                  传输层

  • IP                                      网络层

  • 网络特有的链路接口        数据链路层

  • 物理网络硬件                   物理层                 下

连接、IP地址及端口号

在HTTP客户端想服务器发送报文之前,需要用网际协议(Internet Protocol,IP)地址和端口号在客户端与服务器端建立一条TCP/IP连接。

在TCP中,你需要知道服务器的IP地址,以及与服务器上运行的特定软件相关的TCP端口号。那么怎么获得HTTP服务器的IP地址和端口号呢?当然是通过URL。(说明:浏览器是通过URL中的主机名/IP地址和端口号,与服务器建立TCP连接。)

对于:http://www.netscape.com/index.html 这个URL来说,它没有使用数字形式的IP地址,它使用的是文本形式的域名,或者称为主机名。主机名就是IP地址比较人性化的别称。可以通过一种称为域名服务的(Domain Name Service,DNS)的机制,方便的将主机名转换为IP地址。同样的,我们观察到它还没有端口号。当,HTTP的URL中没有端口号时,我们可以假设默认端口号是80。

基本的浏览器连接处理流程:

步骤如下:

  • 浏览器从URL中解析出服务器的主机名

  • 浏览器将服务器的主机名转换成服务器的IP地址

  • 浏览器将端口号(如果有)从URL中解析出来

  • 浏览器建立一条与Web服务器的TCP连接

  • 浏览器向服务器发送一条HTTP请求报文

  • 服务器想浏览器回送一条HTTP响应报文

  • 关闭连接,浏览器显示文档

一个使用Telnet的实例

由于HTTP使用了TCP/IP传输协议,而且它是基于文本的,没有使用那些难以理解的二进制格式,因此很容易直接与web服务器进行对话。

Telnet程序可以将键盘连接到某个目标TCP端口,并将此TCP端口的输出会送到显示屏上。Telnet常用于远程终端会话。而且它几乎可以连接几乎所有的TCP服务器,包括HTTP服务器。

可以通过Telnet程序直接与Web服务器进行对话。通过Telnet,可以打开一条到某台机器上某个端口的TCP连接。然后直接向那个端口输入一些字符。Web服务器会将Telnet程序作为一个Web客户端来处理,所有回送给TCP连接的数据都会显示在屏幕上。

我们还可以通过telnet想服务器发送请求(参考另外的笔记:telnet mac下telnet的使用 与ping的区别)。

要明确的是,telnet可以很好地模拟HTTP客户端,但是不能作为服务器使用。类似的工具还有nc(netcat),它比telnet更方便。

协议版本

HTTP/0.9只支持GET方法,不支持多媒体内容的MIME类型,各种HTTP首部(请求头,header)或者版本号。

HTTP/1.0一个得到广泛使用的HTTP版本

HTTP/1.0+ 非正式的HTTP扩展版

HTTP/1.1 当前使用的版本,它校正了HTTP设计中的结构性缺陷,明确语义,引入重要的性能优化措施,并删除了一些不好的特性。

HTTP-NG(HTTP/2.0)

Web的结构组件

Web浏览器和Web服务器都是Web应用程序,除此之外,还有一些其他的,比较重要的应用程序:

代理:位于客户端和服务器之间的HTTP中间实体

缓存:HTTP的仓库,使常用页面的副本可以保存在离客户端更近的地方。

网关:连接其他应用程序的特殊Web服务器。

隧道:对HTTP通信报文进行盲转发的特殊代理。

Agent代理:发起自动HTTP请求的半智能Web客户端。

代理

HTTP代理服务器,是Web安全、应用集成及性能优化的重要组成模块。代理位于客户端与服务器之间,接收所有客户端的HTTP请求,并将这些请求转发给服务器(可能会对请求进行修改之后转发)。对用户来说,这些应用程序就是一个代理,代表用户访问服务器。

处于安全考虑,通常会将代理作为转发所有web流量的可信任的中间节点使用。代理还可以对请求和响应进行过滤。比如,在企业中对下载的应用程序进行病毒检测,或者对小学生屏蔽一些成人内容。

缓存

web缓存或代理缓存是一种特殊的HTTP代理服务器,可以将经过代理传送的常用文档复制保存起来,下次请求同一文档的客户端就可以直接从缓存中获取了。

网关

网关(gateway)是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将HTTP流量转换成其他的协议。网关接收请求时就好像自己是资源的源端服务器一样。客户端可能并不知自己正在与一个网关进行通信。

比如,一个HTTP/FTP网关会接收HTTP客户端发来的HTTP请求(实际请求是发送给FTP服务器的),然后通过FTP协议到FTP服务器获取文档,并封装成HTTP报文,发送给客户端。

隧道

隧道(tunnel)是建立起来之后,就会在两条连接之间,对原始数据进行盲转发的HTTP应用程序。HTTP隧道通常用来在一条或多条HTTP连接上转发非HTTP数据,转发时不会窥探数据(盲字的含义就来源于此)。

HTTP隧道的一种常见用途是通过HTTP连接承载加密的安全套接字(SSL,Secure Sockets Layer)流量,这样SSL流量就可以穿过只允许Web流量通过的防火墙了。HTTP/SSL隧道收到一条HTTP请求,要求建立一条到目的地址和端口的输出连接,然后在HTTP信道上通过隧道传输加密的SSL流量,这样就可以将其盲转发到目的服务器上去了。

Agent代理

用户Agent代理(或者简称为Agent代理)是代表用户发起HTTP请求的客户端程序。所有发布Web请求的应用程序都是HTTP Agent代理,到目前为止,我们只提到过一种HTTP Agent代理:Web浏览器,但是用户Agent代理还有很多其他类型,比如爬虫。

HTTP协议概述 基本概念说明相关推荐

  1. Jabber 协议 概述

    Jabber 协议概述 Peter Saint-Andre stpeter@jabber.org 1.4版Jabber服务协议的概述 1. 介绍 Jabber是一个由开源社区发起并领导开发的即时消息和 ...

  2. 物联网标准和协议概述(postscapes)

    物联网标准和协议概述 本篇文章是物联网设备和应用程序中涉及协议的概述.帮助澄清IoT层技术栈和不同的协议对比. 物联网涵盖了众多行业和用例,从单一受限设备扩展到嵌入式技术和实时连接的云的大规模跨平台部 ...

  3. 网络流媒体协议之——RTP协议概述

    网络流媒体协议系列: 网络流媒体协议之--MPEG-DASH协议简述 网络流媒体协议之--HLS概述 网络流媒体协议之--UDP协议概述 今天来整理一下RTP. RTP(Real-time Trans ...

  4. FPGA高速接口设计之SpaceWire——总线协议概述

    目录 一.SpaceWire总线协议概述 1.物理层 2.信号层 2.1 低电压差分信号(LVDS)技术 2.2 数据-滤波(DS)编码技术 3. 字符层 3.1 控制字符 3.2 数据字符 3.3 ...

  5. IPv6任播技术及其任播地址解析协议概述

    IPv6任播技术及其任播地址解析协议概述 作者:王建 李方伟 摘要:任播技术是一种新的网络应用.任播通信是支持导向服务地址的,但是目前IPv6中它的很多定义是模糊的,并且在控制路由方面没有达成一致的协 ...

  6. jabber协议概述

    Jabber 协议 概述 Peter Saint-Andre stpeter@jabber.org 1.4版Jabber服务协议的概述 1. 介绍 Jabber是一个由开源社区发起并领导开发的即时消息 ...

  7. Jabber 协议 概述(转载)

    jabber协议概述 Peter Saint-Andre stpeter@jabber.org 1.4版Jabber服务协议的概述 1. 介绍 Jabber是一个由开源社区发起并领导开发的即时消息和在 ...

  8. IOS 高级语法与设计模式5(5.3 协议的基本概念及用法)

    2019独角兽企业重金招聘Python工程师标准>>> 一.协议的基本概念 协议的声明看起来比较类似一个类的接口,不同的是协议没有父类也不能定义变量.协议是一种特殊的程序设计结构,用 ...

  9. 《趣学CCNA——路由与交换》一2.3 网络层协议概述

    本节书摘来自异步社区<趣学CCNA--路由与交换>一书中的第2章,第2.3节,作者 田果 , 彭定学,更多章节内容可以访问云栖社区"异步社区"公众号查看 2.3 网络层 ...

  10. UART协议概述与实现

    UART协议概述(一) 协议描述 关键代码逻辑 写在最后 协议描述 常见的三大低速通信协议之一,UART,通用异步收发协议. 非常简单的协议,协议细节不需要多说,只说需要注意的点. 空闲位为高位,起始 ...

最新文章

  1. C++基础-string截取、替换、查找子串函数
  2. LambdaMART简介——基于Ranklib源码(二 Regression Tree训练)
  3. python制作图片数据集_Pytorch自己加载单通道图片用作数据集训练的实例
  4. HTML5概要与新增标签
  5. Android逆向笔记-使用Android Killer修改包名Android系统安装相同应用
  6. 【debug】python3安装win32com模块
  7. linux diff详解
  8. 计算机应用基础网上作业题第二章,计算机应用基础网上作业题.doc
  9. C++基础教程之函数
  10. IOS: Xcode报 Undecleared selector Warning错误的解决方法
  11. js word 预览_关于Word打印的2个秘密,90%的人都不知道
  12. 如何提取动图中的某一帧?教你一招在线分解gif
  13. 得到知乎注册进行体验,谈谈感受
  14. CAD轴测图怎么画,才能不踩坑?
  15. 零基础建站教程,教你最快速度做好企业网站
  16. 同比日期的获取(公历与农历)
  17. 最强计算机游戏,这可能是市面上体积最小性能最强的游戏主机了
  18. 构造二叉树-前序遍历
  19. 转发与重定向的区别详解
  20. 常用射频器件性能指标

热门文章

  1. 网站建设及上线的详细步骤(原创)
  2. Java How to Program练习题_第六章_深入理解方法(Methods: A Deeper Look)
  3. Block insecure private network requests
  4. hypermedia_Hypermedia REST API简介
  5. websphere7 mysql_websphere7
  6. USB PD快充协议
  7. PointNet解读
  8. 易基因|3文解读:微量样本甲基化测序在肿瘤中的应用
  9. 群晖用php装aria2,群晖Synology安装Aria2实现迅雷离线下载,安装IPKG
  10. chrome regedit 崩溃_谷歌浏览器网页崩溃的解决方法