HTTP 协议

来源:互联网 发布:欧美搞笑电影 知乎 编辑:程序博客网 时间:2024/06/03 16:32

转自:http://www.jianshu.com/p/4a54ad63e4c2

HTTP 协议详解

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

HTTP 百度百科

HTTP协议工作流程

Http协议与其他协议一样,也需要以特定的方式进行数据包的封装,并按照一定的流程实现通信交互,而基于HTTP协议的请求/响应模式的信息交互过程可分为四个步骤。

  • (1) 客户端与服务器需要建立连接,如:TCP连接
  • (2) 连接建立后,客户端向服务器发送一个请求,请求报文由三部分组成:请求行、消息报头、响应内容。
  • (3) 服务器接到请求后,解析该请求并返回响应信息,响应报文由三部分组成:状态行、消息头、响应内容。
  • (4) 客户端接收服务器所返回的信息并进行解析、处理和显示。

通常,浏览器访问一个页面,需要发出多次请求获取不同的响应内容,在HTTP/1.0版本中默认是传输一次数据就关闭连接,而在HTTP/1.1版本中默认为是持久连接,即一次TCP连接可以完成多次HTTP请求。是否支持持久连接,是由消息报头中的connection字段决定的,如果请求或响应中的connection设置为close,则客户端和服务器的连接为非持久连接。

请求报文和响应的报文结构简介

HTTP协议的请求和响应数据包一般被称为请求报文和响应报文,根据协议标准,请求报文和响应报文是由报文首部、空行和报文主题组成的,而请求报文的首部又由请求行、请求首部字段、通用首部字段、实体首部字段组成,响应报文的首部由状态行、响应首部字段、通用首部字段、实体首部字段组成。结构图请看往下看:


请求报文和响应报文的结构图.png

根据以上结构,可以将HTTP协议报文包含的内容分为五类:

  • 一、请求行,由请求方法、请求URL、HTTP版本组成;
  • 二、是状态行,由HTTP版本、状态码、原因短语组成;
  • 三、首部字段,包含了请求首部、响应首部、通用首部、实体首部四种类型,一般有名字和值组成;
  • 四、是其他报文首部字段,包含了一些RFC()未定义的首部内容;
  • 五、是报文主体,由任意数据组成。

分析下 Laravel 官网的Http协议

这里我们访问 laravel官网 的请求报文和响应报文,来具体分析


请求报文

响应报文

请求行

(1) 请求行 (火狐可以查看到)

请求行中的请求方法用来描述服务器应该执行的操作,而请求URL指定了操作的资源,HTTP版本用来标识客户端使用的HTTP版本。图中 访问的Laravel网站请求报文的请求方法为“GET”,请求URL为“https://laravel.com/”,HTTP版本位 “HTTP/1.1”。在HTTP规范中定义了一组方法,用于指定服务器的响应动作,如GET方法是指从服务器获取一个文本,具体请求报文头方法及其功能描述见下表:

HTTP请求报文方法及其功能

方法名称功能描述是否包含主体数据GET从服务器获取文本否POST向服务器发送客户端数据是PUT上传客户端的文件到服务器是DELETE从服务器删除一个文件否HEAD只获取服务器可以执行的方法否OPTIONS获取服务器可以执行的方法否TRACE对经过代理服务器的报文进行追踪否

(2) 状态行

状态行包含响应报文服务器使用的HTTTP版本、数字状态码和原因短语,对于图响应报文的状态行,其中HTTP版本为“HTTP/1.1”,数字状态码位 “200”,原因短语“OK”。HTTP的状态共分为五大类,用于描述返回的响应结果。实际HTTP规范中定义的状态码有十几种,比较具有代表性的状态码及含义如下:

HTTP响应报文状态码及其含义

状态码范围状态码类别含义100~199信息类状态码收到请求初始部分,请继续发送200~299成功状态码 300~399重定向状态码 400~499客户端错误状态码 500~599服务器错误状态码 

典型状态码

典型状态码原因短语含义100continue收到请求初始部分,请继续发送200OK请求已经被正常处理204No Content请求被成功处理,但没有主体数据206Partial Content对资源部分请求成功301Moved Permanently请求的URL资源已被更新,响应首部包含新的URL302Found请求的URL资源临时更新304Not Modified请求不符合条件,需要更改条件400Bad Request客户端发送一个错误请求401Unauthorized请求需要包含通过HTTP认证的信息403Forbiden访问被拒绝404Not Found没有找到请求的URL500Internal Server Error服务器出现错误,无法提供请求的资源503Service Unavailable服务器正忙,无法提供正常请求的服务

(3) 首部字段

首部字段是构成HTTP报文的基本要素之一,这部分包含的信息也是最为丰富,主要用于规定客户端和服务端在处理请求和响应时的操做。通常,根据首部字段的用途可以分为四类:

  • 通用首部字段
  • 请求首部字段
  • 响应首部字段
  • 实体首部字段

首部字段通常由字段名和字段值构成,中间通过“:”分隔。下面简要介绍下四类字段的作用和部分首部字段含义。

通用首部字段

通用首部字段一般用来提供HTTP报文的最基本信息,这些信息无论是请求报文还是响应报文都可以使用,主要用于描述HTTP协议本身。比如描述HTTP是否支持久连接的Connetion 字段、HTTP发送日期的Date字段、用于缓存控制的Cache-Control 字段等。下面列出了通用首部字段及含义:

通用首部字段名功能说明Connection用于指定客服端/服务器间连接选项,例如指定连续连接或者通过“close”选项通知服务器在响应完成后关闭连接Date报文创建日期Transfer-Enocoding指定报文主体数据的编码方式Update发送端协议准备升级为新版本Via报文经过中间节点(网关、代理等)的信息Cache-Control指定缓存行为Warning错误通知

请求首部字段

请求首部字段一般用于HTTP请求报文中,主要描述客户端的版本、处理能力等信息,用于帮助服务器更好的地提供请求响应字段,如告诉服务器只接收某种响应内容的Accept字段、发送Cookies的Cookie字段等。下面列出的是常用的请求首部字段及含义:

HTTP 报文请求首部字段及含义

请求首部字段名功能说明Accept客户端可处理的媒体类型Accept-Charset客户端优先接收的字符集Accept-Encoding客户端优先接收的编码格式,如 zipAccept-Langular客户端希望的语言种类Authorization授权信息,通常用于对服务器发送的WWW-AuthenticateCookie用于客户端向服务器发送一个令牌Cookie2用来说明客户端支持的Cookie版本From客户端的E-mail 地址,由一些特殊的Web客户程序使用,浏览器不会用到它Host请求资源所在服务器的主机和端口If-Modified-Since只有当所有请求的内容在指定的日期之后又经过修改才会返回它,否则返回 304 “Not Modified”应答Referer包含一个URL页面出发访问请求页面User-Agent客户端信息,如客户端应用程序名称、版本等UA-OS客户端主机上的操作系统名称、版本等信息UA-Pixels客服端显示器像素信息

响应首部字段

响应首部字段是描述HTTP 响应本身的字段,一般用于HTTP响应报文中,主要用于描述响应主机的信息、功能等,通过响应首部字段有助于客户端处理响应,并在将来发出更适合服务器的请求,如定时刷新的Refresh头、设置Cookie的Set-Cookie头等。下面列出常用的响应首部字段及含义:

响应首部字段名功能含义Age响应资源创建的时间Set-Cookie在客户端设置一个Cookie,服务器用来对客户端进行标识Server服务器应用程序软件的名称、版本等信息Retry-After当资源不可用时,在此期间再次发送请求Refresh表示浏览器应该在多长时间之后刷新文档,以秒计

实体首部字段

实体首部字段用于描述HTTP报文体数据字段。由于报文主体可以存在于请求报文和响应报文中,所以这种类型首部字段可以应用在这两种类型的报文中。实体首部字段用于描述主体内容的元信息,包括实体信息类型、长度、压缩方法、最后一次修改时间、数据有效性等,以便告诉接收者如何进行处理,如Content-Language 用于描述报文主体的语言等。下面列出常用的实体首部字段及含义:

实体首部字段名功能含义Allow资源主体可以支持的HTTP请求方法Content-Location通知接收端主体的URL,用于接收端定位到该资源Content-Encoding主体适用的编码方式Content-Language解释主体时适用的语言Content-Length主体的大小,通常以字节数表示Content-MD5主体的MD5校验和Content-Type主体的对象类型

HTTP协议作为应用层协议离不开TCP/IP协议的支持!

0 0