web service之http协议

一.概述

1.web应用的核心是http协议(HyperText Transfer Protocol),http协议的由两部分组成,客户端程序和服务器端程序,通过交换http报文进行会话。web页面则是由对象(也叫资源)组成的,对象直白的说就是一个个的文件,而这些对象可以通过URL引用,URL由两部分组成,存放对象的主机名和对象的文件路径,而这些对象都存储在web服务器之上。http协议以tcp作为他的支撑,一旦建立连接,用户的浏览器进程就能通过套接字接口访问TCP服务,这意味着客户端咩发出一个http请求都能完整的到达服务器,而http是一个无状态协议,因为服务器向客户端发送数据时并不存储任何有关客户端的状态信息,即使客户端在很短时间内对同一个资源做出请求,服务器端也会发送两次该资源,就像之前什么也没发生一样。

2.持久连接与非持久连接

当客户端与服务器端进行长时间的通信时,客户端会发出一系列的请求,服务器端要这些请求一一进行响应,而http协议基于tcp协议建立连接,于是对这一系列的请求和响应可以每次经过一个单独的tcp连接发送,也可以都经过同一个tcp连接进行发送;每次都经过不同的tcp进行发送的方式就叫做非持久连接,每次都经过同一个tcp连接发送的方式叫做持久连接。

假设我们请求一个包含10个资源的web页面,这里所说是http的基本形态,并不包括cookie,session等机制。

(1)对于非持久连接,整个过程是:

1.http客户端向服务器发起一个tcp连接,完成tcp的三次握手,建立连接
2.http客户端向服务器端发送一个http请求报文
3.http服务器端接受报文,经过在web服务器中进行资源检索,构建http响应报文,并发送给客户端
4.http服务器端断开tcp连接,但是要等到客户端确认已经完整的接受响应报文
5.http客户端接受响应报文,关闭tcp连接,从而完成一次http会话。

注意:每个tcp连接只只传输一个一个请求报文和一个响应报文,因此要请求10个资源需要建立10个tcp连接。

(2)对于持久连接,整个过程是:

1.http客户端向服务器发起一个tcp连接,完成tcp的三次握手,建立连接
2.http客户端向服务器端发送一个http请求报文
3.http服务器端接受报文,经过在web服务器中进行资源检索,构建http响应报文,并发送给客户端
4.http服务器端断开tcp连接,但是要等到客户端确认已经完整的接受响应报文
5.http客户端接受响应报文,关闭tcp连接,从而完成一次http会话。

所不同的是:必须为每个会话维护同一个连接,客户端和服务器端都要分配TCP的缓冲区,对于短时间之内的资源的发送,可以一个接一个的发出,在单个tcp连接上进行,http默认使用流水线的方式持久连接。

3.web缓存

web缓存服务器也叫代理服务器,他能代表初始web服务器来满足http请求的资源,web缓存服务器有自己的存储空间,存储着最近请求过的web资源的拷贝,当有web缓存服务器之后,当客户端通过浏览器请求资源以后,整个过程为:

1.浏览器与缓存服务器建立tcp连接,并向缓存服务器发送一个http请求
2.web缓存服务器检查本地是否存储了该资源的拷贝,如果有则直接响应
3.如果缓存服务器里没有该资源,则该服务器向后端初始服务器建立tcp连接,并帮助客户端去请求该资源
4.当缓存服务器接受到来自初始服务器的资源以后,现在本地缓存一份,然后构建响应报文给客户端

我们看到,这个过程中,缓存服务器即是客户端又是服务器,web缓存能从整体上降低网络中的web流量,加快对客户端请求的响应速度。

二.http报文

http报文分为请求报文和响应报文

1.http的请求报文

                                                         201403200902322.jpg


报文中各个字段分别为:

(1)方法:指明客户端对web资源的操作,常用的方法有

GET:从服务器获取资源
HEAD:从服务器获取文档的响应首部
POST:提交数据给服务器
PUT:将报文中主体部分指定的资源存储在服务器中
DELETE:删除服务器中的资源
TRACE:跟踪请求到达初始服务器经经过的代理服务器
OPTIONS:请求服务器返回对指定资源支持的使用方法

(2).URL:指明所要获取资源的位置

(3)版本:http的第一个版本是http/0.9,然后是http/1.0,http/1.1,直到今天的http/2.0

(4)首部:分为通用首部,请求首部,响应首部,实体首部,扩展首部,其格式为: Name Value

通用首部

Date:报文创建的时间
Connection:连接状态
Via:显示报文经过的中间节点
Cache-Control:缓存控制信息
Pragma:编译控制信息
Upgrade:用于检测HTTP协议及其他协议是否可以使用更高版本进行通信
Warning:告知用户一些与缓存相关问题的警告

实体首部:

Allow:列出对此实体使用的请求方法
Location:客户端正真的实体所处的位置
Content-Encoding:内容的编码格式
Content-Language:内容所能接受的语言
Conntent-length:主体的长度
Content-Location:服务器端真正的主体所处的位置
Content-Type:主体对象的类型

缓存相关的标记

 ETag:实体扩展标签

 Expires:缓存的过期时间

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

 Content-MD5:加密了的字符串,用于检验传输过程中首部信息的完整性

请求首部:

Accept:告诉务器用户代理可处理的媒体类型及媒体类型的优先级

Accept-Charset告诉服务器用户代理支持的字符集及字符集的优先级,可一次性指定多个字符集

Accept-Encoding:告诉服务器用户代理支持的内容编码及内容编码优先级顺序,可一次性指定多种内容编码
Accept-Language:告诉服务器用户代理能够处理的自然语言集,以及其相对有限集,可一次指定多种自然语言集
Client-IP:指明客户端自己的地址
Host:告诉服务器请求的资源所处的互联网主机名和端口号
Referer:告诉服务器原始链接的URI
User-Agent:指明用户代理的信息

Max-Forwards:发送包含该字段的请求时,该字段以十进制整数形式指定可经过的服务器最大数目

条件式请求首部

  Except:告诉服务器期望出现的行为

  If-Modified-Since:指明自从指定时间开始资源是否方式改变

  If-Unmodified-Since:指明自从指定时间开始资源是否没有发生改变

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

  If-Match:服务器收到请求,只有判定条件为真时,才会执行请求

 If-Range:告诉服务器若指定的值和请求资源的值一致,则作为范围请求处理,反之,则返回全部资源

安全请求首部

 Authorization:向服务器发送认证信息,包括帐号和密码

 Cookie:客户端向服务器端发送的cookie信息

 Cookie2:cookie2是cookie的升级版

代理请求首部:Proxy-Authorization:向代理服务器发送认证信息


2.http的响应报文

        

   201403200902324.jpg

(1)版本:http/1.1 ,http/2.0等根据使用的版本

(2)状态码:

1xx:提示类信息

2xx:成功响应客户端所请求资源的信息,200成功响应

3xx:资源被重定向的信息;

 301:所请求的资源被删除,但是通过响应报文的location指明新位置

 302:与301类似,通过响应报文的location指明资源现在所处的临时位置

 304:客户端发出条件式请求,但在服务器中未曾发送改变

4xx:客户端错误信息

 401:需要用户输入帐号和密码认证才能访问的资源,显示为Unauthorized

 403:客户端所请求的资源被禁止,显示为Forbidden

 404:服务器无法找到客户端所请求的资源,显示为Not Found

5xx:服务器端错误信息

 500:服务器端内部错误,显示为Internal Server Error

 502:代理服务器从后端服务器收到一条伪响应,显示为Bad Gateway

(3)响应首部

信息类

 Age:响应持续的时长

 Server:服务器软件的名称和版本

协商首部:

 Accept-Ranges:服务器可以接受的请求范围类型

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

安全响应首部

 Set-Cookie:向客户端发送cookie信息

 Set-Cookie2:向客户端发送cooki2信息

 www-Authenticate:对客户端的质询认证列表

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

(0)
zhangbaozhangbao
上一篇 2016-11-03 20:06
下一篇 2016-11-03 21:45

相关推荐

  • 网络管理(三)之路由设置、网络组

    网络管理(三)之路由设置、网络组 一、网卡名称: 1、网络接口的识别命名udev配置文件:#vim /etc/udev/rules.d/70-persistent-net.rules 2、网卡查看:#dmesg | grep -i eth 或者#ethtool -i eth0            …

    Linux干货 2016-09-08
  • 无网不利

                    网络是主机之间交互的必备条件。联网就是将主机互联来形成网络,使得网络中的主机得以交换信息。       &n…

    2017-08-19
  • Linux基础知识之网络配置

    基本网络配置:     将Linux主机接入到网络,需要配置网路相关设置。         IP/NETMASK:本地通信         路由(网关):跨网络…

    Linux干货 2016-09-07
  • 第六周作业

    请详细总结vim编辑器的使用并完成以下练习题 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; %s@^[[:space:]]\+@#&@g 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的…

    Linux干货 2017-03-03
  • shell脚本编程之变量详解

    什么是变量     变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。 使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。 变量:变量类型 作用:  &…

    Linux干货 2016-08-15
  • 网络通信安全基础OpenSSL

    OpenSSL: NIST: 保密性: 数据保密性 隐私性 完整性: 数据完整性 系统完整性 可用性  安全攻击: 被动攻击:窃听 主动攻击:伪装、重放、消息篡改、拒绝服  安全机制: 加密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证 安全服务: 认证 访问控制 数据保密性 连接保密性 无连接保密性 选择域保密性 …

    Linux干货 2015-09-06