HTTP协议概述 基本概念说明

本文参考《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代理还有很多其他类型,比如爬虫。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值