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

相关推荐

  • 马哥教育网络第21期-第七周课程练习

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;    (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@6 ~]# …

    Linux干货 2016-08-29
  • 第二周博客作业

    1.Linux上的文件管理类命令都有那些,其常用的使用方法及其相关示例演示。
    2.Bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
    3.请使用命令行展开功能来完成以下的练习。
    4.文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
    5.如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
    6.显示/var目录下所有以1开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其他字符)的文件或目录。
    7.显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
    8.显示/etc目录下,以非字母开头,后面跟了一个字母以及其他任意长度任意字符的文件或目录。
    9.在/tmp目录下创建以tgile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22
    10.复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
    11.复制/etc目录下所有以.d结尾的文件或目录到/tmp/mytest2目录中。
    12.复制/etc目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

    2018-03-22
  • netstat命令和ss命令

    详解netstat命令和ss命令

    Linux干货 2018-01-01
  • 请罗列Linux发行版的基础目录名称命名法则及功用规定

    Linux文件系统 <逻辑视图>     根文件系统(rootfs):         root filesystem     LSB,FHS:(FileSystem Heirache Standard)         /bo…

    Linux干货 2016-10-30
  • 路由器解析路由表

    1.定义——>选择最佳路径;他只完成发送到下一个路径上就结束,任务到达就撤了(就像快递员一样,当他将物件发往到下一个目的地,那他的任务就结束了)2.分类:主机路由、网络路由、默认路由3.每个路由记录由四项主要组成部分目标地址:主机IP、网络ID号、未知地址(0.0.0.0)子网掩码接口interface:从哪个口发往目标地址 网…

    2017-09-05
  • 程序包的编译安装

    程序包的编译安装     程序包的编译安装是比较重要的内容,在之后的网络知识以及服务的配置等学习方面也发挥着重要作用,是我们的必备技能。 一、杂项知识整理 1、which –skip-alias:跳过别名,直接查看原命令 [root@localhost ~]# which –…

    Linux干货 2016-08-24