HTTP协议

HTTP协议

  HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP协议工作于客户端-服务端架构之上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

h1.jpg

HTTP协议的版本

  • http/0.9:已过时。只接受 GET 一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持 POST 方法,所以客户端无法向服务器传递太多信息。

  • http/1.0:这是第一个在通讯中指定版本号的HTTP 协议版本,至今仍被广泛采用,特别是在代理服务器中。

  • http/1.1:当前版本。持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度。

  • http/2.0:IETF会让所有互联网通路默认选择的方式来引入加密,互联网专家们将新一代加密协议称为“HTTP 2.0”。

HTTP之URL

  HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。URL,全称是UniformResourceLocator, 中文叫统一资源定位符,用于描述服务器某特定资源的位置。

以下面这个URL为例,介绍下普通URL的各部分组成:

  http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name  

  • 1、.协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符。

  • 2、域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用。

  • 3、端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口。

  • 4、虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”。

  • 5、文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名。

  • 6、锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分。

  • 7、参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

HTTP请求消息Request

  客户端发送一个HTTP请求到服务器的请求消息包括请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

h2.png

1、请求行
  由3部分组成,分别为:请求方法(method)、URL以及协议版本(version),之间由空格分隔。
  method:请求方法,标明客户端希望服务器对资源执行的动作。
  • GET:从服务器获取一个资源

  • HEAD:只从服务器获取文档的响应首部

  • POST:向服务器发送要处理的数据

  • PUT:将请求的主体部分存储在服务器上

  • DELETE:请求删除服务器上指定的文档

  • TRACE:追踪请求到达服务器中间经过的代理服务器

  • OPTIONS:请求服务器返回对指定资源支持使用的请求方法

  协议版本(version)的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1
2、请求头部
  请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。
3、请求数据
  请求数据也叫主体,可以添加任意的其他数据

HTTP响应消息Response

  一般情况下,服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

h3.jpg

1、状态行
  由3部分组成,分别为:协议版本,状态码(status),状态码描述,之间由空格分隔。
  status:状态代码为3位数字,200~299的状态码表示成功,300~399的状态码指资源重定向,400~499的状态码指客户端请求出错,500~599的状态码指服务端出错(HTTP/1.1向协议中引入了信息性状态码,范围为100~199)
  常用的状态码:
  • 200:成功,请求的所有数据通过响应报文的entity-body部分发送:ok

  • 301:请求的URL指向的资源已经被删除,但在响应报文中通过首部Location指明了资源下载所处的新位置:Moved Permanently

  • 302:与301相似,但在响应报文中通过Location指明资源限制所处临时新位置:Found

  • 304:客户端发出了条件式请求,但服务器上的额资源未曾发送改变,则通过响应此响应状态码通知客户端:Not Modified

  • 401:需要输入账号和密码认证方能访问资源:Unauthorized

  • 403:请求被禁止,Forbidden

  • 404:服务器无法找到客户端请求的资源:Not Found

  • 500:服务器内部错误:Internal Server Error

  • 502:代理服务器从后端服务器收到了一条伪响应:Bad Gateway

首部的分类

  1、通用首部:
  • Date:报文的创建时间

  • Connection:连接状态,如keep-alive,close

  • Via:显示报文经过的中间节点

  • Cache-Control:控制缓存

  2、请求首部
  • Accept:通过分期自己可接受的媒体类型

  • Accept-Charset:接受的字符集

  • Accept-Encoding:接受的编码格式,如gzip

  • Accept-Language:接受的语言

  • Host:请求的服务器名称的端口号

  • Referer:包含当前正在请求的资源的上一级资源

  • User-Agent:客户端代理

    条件式请求首部:
  • If-Modified-Since:自从指定的时间之后,请求的资源是否发生过修改

  • f-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的ETag不匹配

    安全请求首部:
  • Authorization:向服务器发送认证信息,如账号密码

  • Cookie:客户端向服务器发送cookie

    代理请求首部:
  • Proxy-Authorization::向代理服务器认证

  3、响应首部:
   信息性:
  • Age:响应持续时长

  • Server:服务器程序软件名称和版本

    协商首部:某资源有多种表示方法时使用
  • Accept-Ranges:服务器可接受的请求范围类型

  • Vary:服务器查看的其它首部列表

    安全响应首部:
  • Set-Cookie:向客户端设置cookie

  • WWW-Authwenticate:来自服务器对客户端的质询认证表单

  4、实体首部:
  • Allow:列出此实体可使用的请求方法

  • Location:告诉客户端真正的实体位于何处

  • Content-Encoding:内容的实体格式

  • Content-Language:内容的语言

  • Content-Length:主体的长度

  • Content-Location:实体正则所处位置

  • Content-Type:主机的对象类型

  缓存相关:
  • ETag:实体的扩展标签

  • Expires:实体的过期时间

  • Last-Modified:最后一次修改的时间

一次完整的http请求处理过程

  HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:

1、 建立TCP连接

  在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。

2、Web浏览器向Web服务器发送请求命令

  一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令。例如:GET/sample/hello.jsp HTTP/1.1。

3、Web浏览器发送请求头信息

  浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

4、Web服务器应答

  客户机向服务器发出请求后,服务器会客户机回送应答, HTTP/1.1 200 OK ,应答的第一部分是协议的版本号和应答状态码。

5、 Web服务器发送应答头信息

  正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。

6、Web服务器向浏览器发送数据

  Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。

7、Web服务器关闭TCP连接

  一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive,TCP连接将在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

 

原创文章,作者:641348038@qq.com,如若转载,请注明出处:http://www.178linux.com/68039

赞 (0)
641348038@qq.com641348038@qq.com
上一篇 2017-02-15 17:04
下一篇 2017-02-15 17:05

相关推荐

  • FHS文件系统介绍及各目录功能说明

     FHS文件系统介绍及各目录功能说明 M21-陆东贵 FHS简介 Filesystem Hierarchy Standard(文件系统目录标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理…

    Linux干货 2016-10-18
  • LVM逻辑卷管理

    一、简述 什么是逻辑卷?LVM(Logical Volume Manager)利用Linux内核device-mapper实现存储系统的虚拟化。通过LVM,把底层存储硬件抽象化成存储逻辑块,再将这些逻辑块集合构成存储池,从存储池空间划分分区,可以简单地扩大或缩小分区,而不用担心硬盘没有足够的连续空间。 使用逻辑卷分区有什么用?使用逻辑卷分区重点在于可以弹性地…

    Linux干货 2016-09-06
  • linux 加密和证书

    安全目标:机密性:明文传输的ftp, http,telnet 不安全数据完整性:身份验证:可用性:安全技术:认证,授权,安全通信,审计密码算法和协议:对称加密,公钥加密,单向加密,认证协议 1、对称加密:加密,解密使用同一个秘钥,效率高 DES:Data Encrption Standard, 56bit3DES:AES:AdvancedBlowfish缺点…

    2017-09-11
  • 马哥教育网络班21期-第五周课程练习

    第五周作业 1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; [root@zz ~]# egrep "^[[:space:]]+" /boot/grub/grub.conf 2、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有…

    Linux干货 2016-07-29
  • shell脚本编程之变量

    一、创建shell脚本文件   创建shell脚本时,必须在第一行指定要使用的shell。格式为:   #!/bin/bash   通常在shell脚本中,#代表注释行,即不被执行的行,而第一行“#!”则是表示用哪个shell来执行脚本。   实例:   让我们来执行一下这个脚本:   上面的结果显…

    Linux干货 2016-02-14
  • 设计模式(二)单件模式Singleton(创建型)

      几乎所有面向对象的程序中,总有一些类的对象需要是唯一的,例如,通过数据库句柄到数据库的连接是独占的。您希望在应用程序中共享数据库句柄,因为在保持连接打开或关闭时,它是一种开销。再如大家最经常用的IM,如QQ,在同一台电脑,一个帐号只能有唯一的登录。 1. 问题 怎样确保一个特殊类的实例是独一无二的(它是这个类的唯一实例),并且这个实例…

    Linux干货 2015-06-24

评论列表(1条)

  • luoweiro
    luoweiro 2017-02-22 22:56

    非常赞的http总结,这部分常被面试问到,尤其是http2.0相关的知识,结合ssl实现全站https。