HTTP协议

HTTP协议,全称HyperText Transfer Protocol即超文本传输协议,是互联网中最常用的一种网络协议。HTTP协议是互联网上的通信协议方案之一。它有很多的应用, 但最流行的就是用于web浏览器和web服务器之间的通信应用,即www应用或web应用。HTTP协议位于OSI模型中第7层应用层。

HTTP协议的WWW服务应用的默认服务端口为80,另一个加密的www服务应用(https)的默认服务端口为443,用于网银、支付等和资金交易相关的业务。

HTTP方法

作用描述

GET

客户端请求指定资源信息,服务器返回指定资源。

HEAD

只请求响应报文中的HTTP首部

POST

将客户端的数据提交到服务器,例如:注册表单

PUT

从客户端向服务器传送的数据替代指定的文档内容

DELETE

请求服务器删除指定的资源

MOVE

请求服务器将指定的页面移至另一个网络地址

HTTP状态码

HTTP状态码(HTTP Status Code)是用来表示web服务器响应http请求状态的数字代码。状态码是一个三位数字代码,作业是告知web客户端此次的请求是否成功,或者是采取其它的动作方式。

状态码范围

作用描述

100-199

指定客户端应响应的某些动作

200-299

表示请求成功

300-399

已经移动的文件并且常被包含在定位头信息中指定新的地址信息。

400-499

客户端错误

500-599

服务器错误

常见的状态码及对应的作用

200 - OK:服务器成功返回网页,成功的http请求,返回的标准状态码。

301 - Moved Permanently:永久跳转,所有请求的网页将永久跳转到被设定的新位置。

404 - Forbidden:禁止访问,这个请求是合法的,但是服务端因为匹配了预先设置的规则而拒绝响应客户端的请求,此类问题一般为服务器权限配置不当所致。

500 - Internal Server Error:内部服务器错误,服务器遇到了意料不到的情况,不能完成客户端请求,一般是服务器的设置或者内部程序问题所致。例如:SElinux开启,而又没有为http设置规则许可。

502 - Bad Gateway:网关问题,一般是代理服务器请求后端服务时,后端服务不可用或者没有完成响应网关服务器。一般为代理服务器下面的节点出问题所致。

503 - Service Unavailable:服务当前不可用,可能因为服务器超载或停机维护导致,或者是代理服务器后面没有可以提供服务的节点。

504 - Gateway Timeout:网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求,一般是服务器过载导致没有在指定的时间内返回数据给代理服务器。

  1. [root@backup ~]# curl -I -s -w %{http_code} -o /dev/null www.baidu.com
  2. 200 #状态码200

HTTP报文

HTTP报文中有很多行内容,不同行的字段都是一些ASCII码串,各个字段的长度也是不同的。HTTP报文有两种,一种是从web客户端往web服务器的HTTP报文,称为请求报文(Request Message)。另外一种是 从web服务器发往web客户端的报文,称为响应报文(Response Message),HTTP请求和相应报文的格式类似。

HTTP请求报文

HTTP请求报文由请求行、请求头部(header)、空行和请求报文主体几个部分组成。

请求行:请求方法URL协议版本,例如:GET /index.html HTTP/1.1。

请求头:

字段名1:值1

字段名2:值2

……

例如:

Accept:image/gif,image/jpeg

Accept -Language:zh-cn

……

空行:空白无内容

请求报文主体:GET方法没有请求报文主体,POST方法才有。

请求行

请求行是请求报文的第一行,用来说明客户端想要做什么。内容由请求方法字段、URL字段和HTTP协议版本字段共3个字段组成,它们之间用空格分隔。例如:GET /index.html HTTP/1.1。

请求头部

请求头部由关键字/值组成,每行一对,关键字和值用英文冒号":"分隔。请求头部的作用是客户端把请求的相关信息告诉给服务器。

请求头信息

说明

Accept:image/gif,image/jpeg

媒体类型

Accept -Language:zh-cn

语言类型

Accept –Encoding:gzip,deflate

支持压缩

User -Agent:Mozilla/4.0(compatible;MSIE 6.0;Windows NT;…)

客户端类型

Host:<a href="http://www.baidu.com">www.baidu.com</a>

主机名

与请求报文相关的最常用的请求头是Content-Type和Content-Length。

空行

最后一个请求头部信息之后是一个空行,发送回车符和换行符,通知web服务器空行以下不会有请求头部的信息了。

请求报文主体

请求报文主体中包括了要发送给web服务器的数据信息。请求报文主体不会应用于HTTP的GET命令方法,而是应用于POST方法。POST方法适用于需要客户填写表单的场合。

HTTP相应报文

HTTP相应报文由起始行、响应头部(header)、空行和响应报文主体几个部分组成,与HTTP请求报文格式类似。

HTTP协议原理

HTTP协议属于OSI模型中的第七层应用层协议,HTTP协议的重要应用就是WWW服务应用。以WWW服务应用为例,HTTP协议进行通信时,需要有客户端即终端用户和服务端即web服务器,当web客户端向web服务器发送请求报文之前,先要通过TCP/IP协议在web客户端和服务器之间建立一个TCP/IP连接。整个http协议请求的工作流程原理如下:

1、终端客户在web浏览器地址栏输入访问地址www.baidu.com

2、web浏览器请求DNS服务器把域名www.baidu.com转换成web服务器的IP地址,此处的解析过程就是DNS解析的原理流程。

3、web浏览器将端口号(默认80)从访问地址URL中解析出来。

4、web浏览器通过解析后的IP地址及端口号与web服务器之间建立一条TCP连接。

5、建立TCP连接后,web浏览器向web服务器发送一条HTTP请求报文。

6、web服务器响应并读取浏览器的请求信息,并返回一条HTTP响应报文。

7、web服务器关闭http连接,关闭tcp连接,web浏览器显示访问的网站内容到屏幕。

动态web服务请求流程:

客户端发送请求àhttpd得到请求àhttpd解析请求的格式(html、css)à请求响应php解析àphp解析程序执行完毕àdb(数据库),返回结果(html)给httpdàhttpd把数据返回给客户端(可能是压缩过的)à浏览器接到返回结果(解压)。

静态网页资源的重要特征

1、每个页面都有一个固定的URL地址,且URL一般以.html、.htm、.shtml等常见形式为后缀,并且地址中不含有问号"?"或"&"等特殊符号。

2、网页内容一经发布到网站服务器上,无论是否有用户访问,每个网页的内容都是保存在网站服务器文件系统上的,也就是说,静态网页是实实在在保存在服务器上的文件实体,每个网页都是一个单独的文件。

3、网页内容相对固定的,因此,容易被搜索引擎收录。

4、网页没有数据库的支持,在网站制作和维护方面工作量较大,因此当网站信息量很大时完全依靠静态网页制作的方式比较困难。

5、网页的交互性较差,在程序功能实现方面有较大的限制。

6、网页程序在用户浏览器端解析,如IE浏览器,这样程序解析效率更高,由于服务器端不进行解析,并且不需要读取数据库,因此可接收更多的并发访问。当客户端向服务器请求数据时,服务器直接把数据从磁盘上返回(不做任何解析),当客户端拿到数据后,在浏览器端解析展示出来。

有关静态网页架构思想

高并发高访问量的场景,做架构优化,关键的环节,就是把动态网页转成静态网页,不直接请求数据库和动态服务器,并且可以把静态内容推送到前端缓存中提供服务,可以提升用户体验,节约服务器和维护成本。

动态网页资源特点

1、网页扩展名常见为asp、aspx、php、jsp、do、cgi等。

2、网页一般以数据库技术为基础,大大降低了网站维护的工作量。

3、采用动态网页技术的网站可以实现更多的功能,如用户注册、用户登录、在线调查、投票、用户管理、订单管理、发博文等等。

4、动态网页并不是独立存在于服务器上的一个个网页文件(php/jsp),当用户请求服务器上的动态程序时,服务器解析程序并读取数据库返回一个完整的网页内容。

5、动态网页中的"?"对搜索引擎的收录存在一定的问题,搜索引擎一般不会从一个网站的数据库中访问全部网页,或者处于技术方面的考虑,搜索蜘蛛一般不会去抓取网站中"?"后面的内容,因此采用动态网页的网站在进行搜索引擎推广时需要做一定的技术处理(伪静态技术)才能适应搜索引擎的抓取的要求。

6、程序在服务器端解析,服务端如:php引擎、java容器(tomcat、resin、jboss、weblogic),由于程序在服务端解析,因此,会消耗大量的CPU和内存等资源,并且多数还要读取数据库等服务,因此,访问效率不如静态网页。

有关动态网页架构思想

1、一般来说,静态网页的效果是动态网页的10-30倍。

2、动态网页效率很差,并发能力也很低,高并发场景中,应尽可能转换成静态网页提供服务。

3、动态转静态也要根据业务需求设计,例如,对于更新频繁的网站会产生数据不一致的情况,即用户看到的数据不会是最新的内容。

4、动态转静态,高并发网站必备的架构方案,是高级架构师的职责所在。

伪静态网页特点

从网站的URL地址看,伪静态表面上看起来是静态内容(如地址结尾带html),这是通过rewite规则来实现的URL地址重写。改写后的URL地址规范、美观,有利于搜索引擎抓取,以及用户访问体验加强。伪静态网页还是动态网页,从性能上考虑,伪静态功能不但没有提示网站性能,反而会降低网站的性能。

生产web架构优化

由于静态网页程序在客户端解析,大大降低了服务端的访问压力,因此解析效率更高,在实际高并发网站架构中,可以考虑把用户请求的数据解析后存成静态文件存放于磁盘中或放于内存中来降低动态服务器的压力,节约企业成本,提示用户体验。

门户新闻业务

新闻网站的特点是一旦发布完成,几乎不会再改动网页内容。因此,对于新闻的业务内容静态化相对比较简单:

第一步:程序支持发布内容直接转成静态。

第二步:运营编辑人员发布新闻网页后,后台程序立刻将动态网页生成静态文件。

第三步:运维人员通过触发把生成的静态网页发布到事先搭建好的公司缓存集群服务器上,或者把静态内容同步到全国所有CDN服务器节点上,然后,再提供给用户访问浏览。

视频网站业务

优酷视频,用户上传视频,需要经历转码-审核的过程,大概1-2小时,转码-审核-推送(同步到全国所有CDN服务器节点)。

其他

blog、bbs、sns、微博社区业务、电商(淘宝、京东)

异步方式,消息中间件、消息队列。

网站流量度量术语

IP(独立IP):即Internet Protocol,这里指独立IP数,独立IP数是指不同IP地址的计算机访问网站的被计算的总次数。独立IP数是衡量网站流量的一个重要指标。一般一天内(00:00-24:00)内相同IP地址的客户端访问网站页面只被计算为一次。

PV(访问量):即Page View,页面浏览量或点击量,不管客户端是不是相同,也不管IP是不是相同。用户每次访问一个网站页面都会被计算一个PV。

UV(独立访客):即Unique Visitor,同一台客户端(PC或移动端)访问网站被计算为一个访客。UV一般是以客户端Cookie等技术作为统计数据的,实际统计会有误差。

常见企业网站排名及PV/IP访问量

网站

独立IP/日

PV数/日

网站并发级别

机器数量

www.51cto.com

582000

1338600

10000

50台

www.ganji.com

1734000

13872000

10000-30000

几百台

www.58.com

1398000

22927200

10000-30000

几百台

www.weibo.com

30180000

166593600

几十万

千台

www.taobao.com

46620000

489510000

几十万-几百万

万台

www.jd.com

6108000

98949600

数万

千台

www.163.com

10320000

79154400

十万

千台

www.suning.com

930000

7254000

10000-30000

百台

web服务

常用来提供静态web服务的软件

1、apache:中小型web服务的主流,web服务器中的老大哥。

2、nginx:大型网站web服务主流。nginx的分支tengine目前也在飞速发展。

3、lighttpd:社区不活跃,静态解析效率很高。

常用来提供动态服务的软件

1、php(fastcgi):大中小型网站都会使用,动态网页语言php程序的解析容器。

2、tomcat:中小型企业动态web服务主流,互联网java容器主流(jsp、do)。

3、resin:大型动态web服务主流,互联网java容器主流(jsp、do)。

4、IIS:微软的windows下的web服务软件(asp、aspx)。

web服务之http的更多相关文章

  1. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  2. 基于IIS构建Pyathon Web服务

    本文简单叙述了在Windows下,如何利用IIS构建Python Web服务. 其主要步骤如下: 1.在IIS下构建一个站点,如图: 2.配置Python文件的处理程序,如图: 3.最后,在对应站点根 ...

  3. Web服务

    Web服务的相关信息 Apache服务器是web服务的重要应用 在这也是讲的apache   这里需要安装一个http服务软件才行! Apache的根文档在/var/www/html 主配置文件 /e ...

  4. Python flask 基于 Flask 提供 RESTful Web 服务

    转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...

  5. 使用 ServiceStack 构建跨平台 Web 服务

    本文主要来自MSDN杂志<Building Cross-Platform Web Services with ServiceStack>,Windows Communication Fou ...

  6. webServices与Web服务

    本篇的内容在MSND中标注已是一项旧技术,而取而代之的是WCF, 那么我也放弃吧!但是这个属于Web服务的范畴,而WCF本质上也是一个Web服务来的,所以对于基础的东西还是不变的.那么这次就着重看看这 ...

  7. J2EE基础之Web服务简介

    J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...

  8. 大规模web 服务开发技术

    <大规模web 服务开发技术> 是一本讲解大型Web 应用的入门级书籍,能够让我们接触到大应用的知识点. 目录如下: 第1章  大规模Web服务的开发定位——掌握整体第2章  大规模数据处 ...

  9. 计划任务,机器码与注册码,Web服务

    01.计划任务的客户端配置 TScheduleTask 辅助结构内容: TScheduleRecord<ScheduleTask.pas> TScheduleRecord.Schedule ...

  10. 尝试利用CentOS环境安装LiteSpeed WEB服务环境的过程

    对于普通的网站搭建的环境虚拟主机就足够使用,不过近期公司的网站需要上线VPS主机,于是采用到LNMP(http://lnmp.org/)一键包安装的,运行还是比较好的,这不最近我也开始尝试接触VPS方 ...

随机推荐

  1. hibernate系列之二

    首先先介绍一下持久化: 持久化:将程序数据在持久状态和瞬时状态间转换的机制:即将内存的数据永久存在关系型数据库中: 持久化类的编写规则: 持久化类需要提供无参构造方法: 持久化类的属性需要私有,对私有 ...

  2. 【PHP】详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI、SCRIPT_NAME、PHP_SELF区别

    实例:1.http://localhost/index.php/Home/Home/index.html $_SERVER['QUERY_STRING'] = ""; $_SERV ...

  3. 绘制矩形:描边矩形imagerectangle()、填充矩形imagefilledrectangle()

    <?php //1. 绘制图像资源(创建一个画布) $image = imagecreatetruecolor(500, 300); //2. 先分配一个绿色 $green = imagecol ...

  4. 第8课 Thinkphp 5 update判断修改成功与失败 Thinkphp5商城第四季

    没有修改数据时,判断修改成功与失败 如果提交时的数据库里之前的数据一样(即没有修改就提交表单),会返回0,此时 判断修改成功用$save !== false 这样才会提示修改成功. $save=db( ...

  5. 精通SpringBoot--整合Redis实现缓存

    今天我们来讲讲怎么在spring boot 中整合redis 实现对数据库查询结果的缓存.首先第一步要做的就是在pom.xml文件添加spring-boot-starter-data-redis.要整 ...

  6. 学习Pytbon第七天,集合

    list_1=[5,22,2,6,5,66,6,8] list_1=set(list_1)#把列表转成集合,天生不允许 重复 print(list_1,type(list_1) list_2=set( ...

  7. Cakephp在Controller中显示sql语句

    Cakephp在Controller中查询语句一般是: $this->Model->find(); 那么这条语句对应的sql语句是什么呢? 可以通过下面方法显示: 1. $dbo = Co ...

  8. mysql sum聚合函数和if()函授的联合使用

    今天去面试遇到一个数据库试题,首先说一下表结构如下: 表结构:mytest 表数据:mytest 要查询的结果如下: 在本题目中,需要用到sum聚合函数和if函数 sql如下: ,)) ,)) AS ...

  9. Struts1 部分源码学习

    Struts1工作原理    1.系统初始化(读取配置):初始化ModuleConfig对象       Struts框架是一个总控制器(ActionServlet)是一个Servlet,在web.x ...

  10. MySQL时间字段究竟使用INT还是DateTime

    今天解析DEDECMS时发现deder的MYSQL时间字段,都是用 `senddata` ) unsigned '; 随后又在网上找到这篇文章,看来如果时间字段有参与运算,用int更好,一来检索时不用 ...