HTTP介绍

HTTP

HTTP(Hypertext Transfer Protocol) 超文本传输协议。HTTP 协议定义了浏览器怎么向万维网服务器请求万维网文档,以及服务器怎么把文档传送给浏览器。

1 - HTTP 的操作过程

HTTP 是应用层的协议,使用 TCP 连接进行可靠的传送。当我们上网浏览网页的时候,浏览器与 Web 服务器之间就会通过 HTTP 协议在互联网上进行数据的发送和接收。

万维网的大致工作方式如下:

每个 Web 站点都有一个服务器进程,它不断地监听 TCP 的端口 80,以便发现是否有浏览器向它发出连接建立请求;一旦监听到连接建立请求并建立了 TCP 连接后,浏览器就向 Web 服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应;最后,TCP 连接就被释放了。

在浏览器和服务器之间的请求和响应的交互,必须按照规定的格式和遵循一定的规则,这些格式和规则就是超文本传输协议 HTTP。

  • 基于 请求/响应 模式

    从浏览器请求一个页面文档时,将请求报文发送给 Web 服务器;服务器收到 HTTP 请求报文后,把所请求的文档作为响应报文返回给浏览器。

  • HTTP 协议本身是无连接的

    HTTP 使用了面向连接的 TCP 作为传输层协议,保证了数据的可靠传输。但是 HTTP 本身是无连接的,通信的双方在交换 HTTP 报文之前不需要先建立 HTTP 连接。

  • HTTP 协议是无状态的

    也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同,服务器并不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。

2 - 持续连接

在 HTTP 1.0 中,当连接建立后,浏览器发送一个请求,服务器回应一个消息,之后,连接就被关闭。当浏览器下次请求的时候,需要重新建立连接,很显然这种需要不断建立连接的通信方式造成的开销比较大。早期的web页面通常只包含html文本,因此即使建立连接的开销较大,也不会有太大的影响。

现在的 web 页面往往包含多种资源(图片、动画、声音等),每次获取一种资源,就建立一次连接,这样就增加了服务器的开销,造成了互联网上的信息堵塞。因此在 HTTP 1.1 版本中,提出了一个持续连接(Persistent Connections)的机制,并将其作为 HTTP1.1 中建立连接的缺省行为。通过这种连接,web 服务器在发送响应后仍然在一段时间内保持这条连接 ,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。而且,客户端还可以发送流水线请求,也就是说客户端可以连续发送多个请求,而不需要等待每一个响应的到来。

3 - HTTP 的报文结构

HTTP 有两类报文:

  1. 请求报文

    从客户向服务器发送请求报文

  2. 响应报文

    服务器对客户的应答

HTTP 请求报文和响应报文都是由3个部分组成:

  1. 开始行,用于区分是请求报文还是响应报文。开始行的三个字段之间都以空格隔开。

    • 在请求报文中的开始行叫请求行

    • 在响应报文中的开始行叫状态行

  2. 消息报头,用来说明浏览器和服务器传递的一些附加信息,每一个消息报头中都由 名称: 具体的值 组成。

    根据不同上下文,可将消息头分为:

    • General headers: 同时适用于请求和响应消息,但与最终消息主体中传输的数据无关的消息头。

      • 通用报头可以应用于请求报头和响应报头,但不可以是实体头部。

      • 最常见的通用报头包括:DateCache-ControlConnection

      通用报头描述
      Date包含了报文创建的日期和时间
      Cache-Control用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制)。缓存请求指令有:no-cache(协商缓存验证)、no-store(不使用任何缓存)、max-age、max-stale、min-fresh、only-if-cached;缓存响应指令有:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage。
      Connection决定当前的事务完成后,是否会关闭网络连接。如果该值是“keep-alive”,网络连接就是持久的,不会关闭,使得对同一个服务器的请求可以继续在该连接上完成
    • Request headers: 包含更多有关要获取的资源或客户端本身信息的消息头。

    • Response headers: 包含有关响应的补充信息,如其位置或服务器本身(名称和版本等)的消息头。

    • Entity headers: 包含有关实体主体的更多信息,比如主体长(Content-Length)度或其MIME类型。

      • 实体报头是描述了一个 HTTP 消息有效载荷(即关于消息主体的元数据)的 HTTP 报头

      • 常见的实体报头有:Content-LengthContent-LanguageContent-EncodingContent-TypeExpires 等。

      实体报头描述
      Content-Length消息的长度,用十进制数字表示的八位字节的数目
      Content-Language说明访问者希望采用的语言或语言组合,多个语言标签需要用逗号隔开
      Content-Encoding用于对特定媒体类型的数据进行压缩,它的值为使用的压缩模式
      Content-Type用于指示资源的MIME类型
      Expires实体报头域给出响应过期的日期和时间

  3. 消息主体

    • 在请求报文中一般都不用

    • 在响应报文中可以有、也可以没有

3.1 请求报文

3.1.1 请求行

请求报文的第一行 “请求行” 只有3个内容,即方法请求资源的 URL、以及 HTTP 的版本

请求报文中常用的几种方法:

方法(操作)意义
OPTION请求一些选项的信息
GET请求读取由 URL 所标志的信息
HEAD请求读取由 URL 所标志的信息的首部
POST给服务器添加信息(例如,注释)
PUT在指明的 URL 下存储一个文档
DELETE删除指明的 URL 所标志的资源
TRACE用来进行环回测试的请求报文
CONNECT用于代理服务器

请求行的格式如下:

注意:在 GET 后面有一个空格,接着是某个完整的 URL,其后面又有一个空格,最后是 HTTP/1.1。

3.1.2 请求头

请求头 是 HTTP 头的一种,它可在 HTTP 请求中使用,并且和请求主体无关。

常见的请求报头:

请求头描述
Accept用于指定客户端接受哪些类型的信息
Accept-Charset用于指定客户端接受的字符集,缺省是任何字符集都可以接受
Accept-Encoding类似于Accept,但是它是用于指定可接受的内容编码
Accept-Language用于指定可接受的一种自然语言
Authorization用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。
Host用于指定被请求资源的主机和端口号,它通常从 URL 中提取出来的
User-Agent客户端所使用的浏览器的名称和版本

3.2 响应报文

每一个请求报文发出后,都能收到一个响应报文。响应报文的第一行就是状态行。

3.2.1 状态行

状态行包括3项内容,即 HTTP 的版本状态码、以及解释状态码的简单短语

状态码都是三位数字的,分为5大类(以不同的数字开头):

  1. 1xx 表示通知信息,如请求收到了或正在进行处理

  2. 2xx 表示成功,如接受或知道了

  3. 3xx 表示重定向,如要完成请求还必须采取进一步的行动

  4. 4xx 表示客户的差错,如请求中有错误的语法或不能完成

  5. 5xx 表示服务器的差错,如服务器失败无法完成请求

常见状态码

状态码状态描述说明
200Ok客户端请求成功
400Bad Request由于客户端请求有语法错误,不能被服务器所理解
401Unauthorized请求未经授权,这个状态代码必须和www-Authenticate报头域一起使用
403Forbidden服务器收到请求,但是拒绝服务,并常在响应正文中给出拒绝原因
404Not Found请求的资源不存在,例如输入了错误的URL
500Internal Server Error服务器发生不可预期的错误,导致无法完成客户端的请求
503Service Unavailable服务器当前不能够处理客户端的请求,一段时间后可能恢复

3.2.2 响应头

用于http响应中并且和响应消息主体无关。

常见的响应头有:

响应头描述
Location指定需要将页面重新定向的地址。一般在响应码为3xx的响应中才会有意义。
Server包含了处理请求的源头服务器所用到的软件相关信息
Age包含对象在缓存代理中存贮的时长,以秒为单位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值