http协议学习笔记

简介

超文本传输协议(Hypertext Transfer Protocol,HTTP)主要用于万维网上存取数据的协议,HTTP没有单独的控制连接,只使用了一个TCP连接。HTTP报文不是供人阅读的,它们是由HTTP服务器和HTTP客户端(浏览器)读取并解释。

报文

请求和响应报文的格式是相似的。请求报文由一个请求行、一个头部构成,有时还可能包含主体。响应报文由状态行、头部构成,有时还可能包含主体。如下图:

这里写图片描述

请求行和状态行

请求报文中第一行称为请求行,响应报文中第一行称为状态行,二者字段格式如下图:

这里写图片描述

请求类型

这个字段在请求报文中使用。其实请求类型就是常说的请求方法,在HTTP1.1版本中定义了几种请求方法,如下表所示:

方法动作
GET向服务器请求文档
HEAD请求关于文档的信息,而不是文档本身
POST从客户端向服务器发送信息
PUT从服务器向客户端发送文档
TRACE回显输入的请求
CONNECT预留
OPTION询问有关可用的选项

URL

统一资源定位符(uniform resource locator,URL)是说明因特网上信息类型的一种标准。URL格式包括4个部分:协议、主机、端口和路径。格式如下图:

这里写图片描述

版本

HTTP目前最常用的版本是1.1。

状态码

这个字段在响应报文中使用。状态码字段由三个数字组成。
在100系列的代码只代表一个报告;
在200系列的代码表示这是一个成功的请求;
在300系列的代码表示把客户端重定向到另一个URL;
在400系列的代码表示在客户端发生错误;
在500系列的代码表示错误发生在服务器端。

常用的代码如下表所示:

代码短语描述
提供信息
100Continue请求的初始部分已经收到,客户端可以继续它的请求
101Switching服务器同意客户端的请求,切换到更新头部所定义的协议
成功
200OK请求成功
201Created创建了一个新的URL
202Accepted请求已经接受,但它不能立即响应
204No content主体中没有内容
重定向
301Moved permanently服务器已不再使用所请求的URL
302Moved temporarily请求的URL已经暂时移开
304Not Modified文档还没有被修改
客户端错误
400Bad request在请求中有语法错误
401Unauthorized请求中缺乏合适的授权
403Forbidden服务被拒绝
404Not found没有找到文档
405Method not allowedURL不支持该方法
406Not accept able不接受这种格式的请求
服务器错误
500Internaluserver error服务器有错误,例如系统崩溃
501Not implemented请求的动作不能完成
503Service unavailable服务暂时不可用,但将来可以被再次请求

头部

头部用于客户端与服务器之间交换附加的信息。头部由一行或者多行组成,每一行由一个头名字、一个冒号、一个空格和头值组成。如下图所示:

这里写图片描述

头部的各行属性属于下列四大类之一:通用头部(general header)、请求头部(request header)、响应头部(response header)和实体头部(entity header)。请求报文只能包含通用、请求和实体头部。响应报文只能包含通用、响应和实体头部。

通用头部

通用头部给出关于报文的通用信息,并可以在请求和响应报文中都存在。下表列出了一些通用头部及其说明。

头部说明
Cache-control定义了关于高速缓存的信息
Connection说明连接是否应关闭
Date给出现在的日期
MIME-version说明MIME的使用版本
Upgrade确定首选的通信协议

请求头部

请求头部只能在请求报文中存在。它确定客户端配置和客户端首选的文档格式。下表列出一些请求头部及其说明。

头部说明
Accept给出客户端能够接受的媒体格式
Accept-charset给出客户端可以处理的字符集
Accept-encoding给出客户端可以处理的编码方案
Accept-language给出客户端可以接受的语言
Authorization给出客户端有哪些许可
From给出用户的电子邮件地址
Host给出主机及服务器的端口号
If-modified-since只在比指定的日期更新时才发送文档
If-match只有与给定的标记匹配时才发送文档
If-non-match只有与给定的标记不匹配时才发送文档
If-range只发送丢失的那部分文档
If-unmodified-since如在指定的日期之后未改变,则发送文档
Referer指明被链接文档的URL
User-agent标识客户端程序

响应头部

响应头部只能出现在响应报文中。它确定了服务器的配置和关于请求的特定信息。下表列出了一些响应头部及其说明。

头部说明
Accept-range说明服务器是否接受客户端请求的范围
Age给出文档的使用年限
Public给出支持的方法列表
Retry-after确定一个日期,在这个日期之后服务器是否可用
Server给出服务器名及版本号

实体头部

实体头部提供了关于文档主体的有关信息。尽管多数情况下它只出现在响应报文中,但在有些请求报文中,如POST和PUT方法,也会包含一个主体且使用这种类型的头部,下表列出了一些实体头部及其说明。

头部说明
Allow列出URL可以使用的有效方法
Content-encoding确定编码方案
Content-language指定语言
Content-length给出文档的长度
Content-range指定文档的范围
Content-type指定媒体类型
Etag给出实体的标记
Expires给出内容改变的日期和时间
Last-modified给出上次改变的日期和时间
Location指明新建或移动后文档的位置

主体

主体可以出现在请求和响应报文中。通常它包含要发送或接受到的文档。

持续与非持续连接

HTTP在版本1.1之前定义了非持续连接,而在版本1.1中默认的是持续连接。

非持续连接

在非持续连接(nonpersistent connection)中,每一次请求/响应都要建立TCP连接。所以非持续策略在服务器端增加了很大的开销。

持续连接

HTTP1.1定义了默认的持续连接(persistent connection)。在持续连接中,服务器在发送响应以后会保持连接处于开启状态,以等待更多的连接请求。如果客户请求关闭或者超时时,服务器会关闭连接。发送方通常在每次响应时会发送数据的长度。但是,在一些特殊情况下,发送方不能确定数据的长度。如果文档是动态创建的或者属于活动文件,就会发生这种情况。这种情况下,服务器会通知客户端,文件长度未知,发送数据结束后关闭连接,这样客户端就能确定到达的数据是否已经结束。

代理服务器

HTTP支持代理服务器(proxy server)。代理服务器是一台计算机,能够保存最近请求的响应的副本。HTTP客户端向代理服务器发送请求。代理服务器检查本机的高速缓存。如果高速缓存中不存在响应报文,代理服务器就向相应的服务器发送请求。返回的响应会发送到代理服务器中,并且进行存储,以用于其他客户端将来的请求。
代理服务器降低了原服务器的负载,减少了通信量并降低了延迟。但是,使用代理服务器,客户端必须配置为访问代理服务器而不是目标服务器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值