码迷,mamicode.com
首页 > Web开发 > 详细

http协议原理

时间:2018-02-02 11:51:04      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:很多   second   国外   resource   拒绝   protoc   数据库技术   error   请求方法   

第1章 http协议原理概念介绍

1.1  http服务重要基础

1.1.1 用户访问网站的过程?

1. 利用DNS协议进行域名解析

第一步:客户端用户从浏览器里输入www.baidu.com网站地址,回车后,系统首先会查找系统本地的DNS缓存及hosts文件信息,查找是否存在www.baidu.com域名对应的IP解析记录,如果有就直接获取IP地址,然后去访问这个IP地址对应域名www.baidu.com的服务器,一般第一次请求时,DNS缓存是没有解析记录的,而hosts多在内部临时测试时使用。

 

第二步:如果客户端本地DNS缓存及hosts文件没有www.baidu.com域名对应的解析记录,那么,系统会把浏览器的解析请求发送给客户端本地设置的DNS服务器地址(通常称此DNSLDNS或首选DNS服务器,即Local DNS)解析,如果LDNS服务器的本地缓存有对应的解析记录就会直接返回IP地址给客户端,如果没有,则LDNS会负责继续请求其他的DNS服务器。

 

第三步:LDNS会从DNS系统的根域(.)开始请求www.baidu.com域名的解析,针对各个层级的DNS服务器系统进行一系列的查找,最终会查找到baidu.com域名对应的授权DNS服务器,而这个授权DNS服务器正是企业购买域名时用于管理域名解析的服务器,这个授权服务器会有www.baidu.com对应的IP解析记录,如果此时没有,就表示企业的域名管理人员没有为www.baidu.com域名做解析设置,即网站还没架设好。

 

第四步:baidu.com域名的授权DNS服务器会把www.baidu.com对应的最终IP解析记录发给LDNS

 

第五步:LDNS把收到的来自授权DNS服务器www.baidu.com对应的IP解析记录(A记录)缓存到本地,再发给客户端,以便下一次更快的返回相同解析请求的记录,这些缓存记录在指定的时间(DNS TTL值控制)内不会过期。

 

第六步:客户端浏览器获取到了www.etiantian.org的对应IP地址的解析记录,会先缓存到本地,接下来,浏览器会请求获得的IP地址对应的网站服务器

2. 建立tcp协议三次握手过程

3. 客户端发出访问网站相应页面请求(发出http协议请求报文)

4. 系统架构部署情况

5. 服务端发出响应访问页面的请求信息(发出http协议响应报文)

6. 断开tcp协议四次挥手过程

提示:

上述仅仅是客户端用户第一次访问网站的基本过程,连续访问后,系统本地和LDNS层级都会有缓存记录,再访问时流程就会有些变化,会直接取本地缓存记录,这样访问过程就很快了。在上述整个访问流程里,包含了DNS的解析流程以及HTTP协议的通信原理等重要的技术点。

1.2 HTTP协议简介

HTTP协议,全称HyperText Transfer Protocol,中文名为超文本传输协议,是互联网中最常用的一种网络协议。HTTP的重要应用之一是WWW服务。设计HTTP协议最初目的就是提供一种发布和接收HTML(一种页面标记语言)页面的方法(请求返回)。

HTTP协议是互联网上常用的通信协议之一。它有很多的应用,但最流行的就是用于Web浏览器和Web服务器之间的通信,即WWW应用或称Web应用。

WWW,全称World Wide Web,常称为Web,中文译为“万维网”。它是目前互联网上最受用户欢迎的信息服务形式。HTTP协议的WWW服务应用的默认端口为80(端口的概念),另外的一个加密的WWW服务应用https的默认端口为443,主要用于网银,支付等和钱相关的业务。当今,HTTP服务,WWW服务,Web服务三者的概念已经混淆了,都是指当下最常见的网站服务应用。

第2章 HTTP协议

2.1 常见的HTTP请求方法

HTTP方法

作用描述

GET

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

HEAD

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

POST

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

PUT

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

DELETE

请求服务器删除Request-URI所标识的资源

MOVE

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

2.2 HTTP状态码

2.2.1 HTTP状态码介绍

HTTP状态码(HTTP Status Code)是用来表示Web服务器响应http请求状态的数字代码。每当Web客户端向Web服务器发送一个HTTP请求时,Web服务器都会返回一个状态响应代码。这个状态码是一个三位数字代码,作用是告知Web客户端此次的请求是否成功,或者是否要采取其他的动作方

2.2.2 HTTP协议1.1版本中的状态

HTTP协议1.1版本中的状态可以分为五大类,如下表:

状态码范围

作用描述

100-199

用于指定客户端相应的某些动作

200-299

用于表示请求成功

300-399

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

400-499

用于指出客户端的错误

500-599

用于指出服务器端的错误

提示:http响应的状态码种类很多,但是在实际工作场景中,经常遇到的状态码却不多,我把生产场 景常见 的重要状态码及对应的作用整理为下表。

2.2.3 生产环境常见的状态码 

生产场景常见的状态及其对应的作用

状态代码

详细描述说明

200OK

服务器成功返回网页,这是成功的http请求,返回的标准状态码

301-Moved Permanently

永久跳转,所有请求的网页将永久跳转到被设定的新的位置,例如:从baidu.com跳转到www.baidu.com

403-Forbidden

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

404-Not Found

服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源导致

500-Internal Server Error

内部服务器错误,服务器遇到了意料不到的情况,不能完成客户的请求。这是一个较为笼统地报错,一般为服务器的设置或者内部程序问题导致。例如SElinux开启,而又没有为http设置规则许可,客户端访问就是500

502-Bad Gateway

坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成响应网关服务器。一般为反向代理服务器下面的节点出问题导致。

503-Service Unavailable

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

504-Gateway Timeout

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

2.3 HTTP响应报文介绍

2.3.1 请求报文结构

报文格式

报文信息

请求行

①. 请求的方法(get方法没有请求主体内容 post方法会有请求主体信息)

②. 请求的数据信息(默认请求index.html首页文件)

③. 请求http协议版本

    tcp协议分为长连接(http1.1)和短连接(http1.0

请求头部

客户端有关信息说明

空行

空白内容

请求报文主体

get方法没有请求主体内容 post方法会有请求主体信息

技术分享图片 

2.3.2 响应报文结构

报文格式

报文信息

起始行

①. HTTP协议版本信息

②. 响应的状态码信息(请求成功状态码 200

③. 响应状态码说明信息

响应头部

服务端有关信息说明

空行

空白内容

响应报文主体

一般为html css js 等等代码信息

技术分享图片 

查看请求报文与响应报文详细结构信息方法:(2种方法)

1. curl -v www.baidu.com    --- 利用curl命令进行网站访问

                       -v      --- 详细显示请求报文结构和响应报文结构信息

2. wget --debug www.baidu.com

第3章 HTTP资源

3.1 媒体资源类型

3.1.1 url

 URL,全称Uniform Resource Location,中文翻译为统一资源定位符,也被称为网页地址(网址)。如同在网络上的门牌,它是因特网上标准的资源唯一地址。通俗地说,URLInternet上用来描述信息资源的字符串,主要用在各种WWW客户端和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件,服务器的地址和目录等。严格的说,每个URL都是一个URI,它标识一个互联网资源,并指定对其进行操作或取得该资源的方法。

3.1.2 uri

URI,全称Uniform Resource Identifier,中文翻译为统一资源标识符,是一个用于标识某一互联网资源名称的字符串。这个字符串在世界范围内唯一标识并定位某一个信息资源。互联网上每个可用的数据资源,如HTML,图片,视频等皆通过统一资源标识符进行定位。

3.1.3 urluri区分

例:channel.jd.com/women.html

    channel.jd.com / women.html    

 url部分         uri部分

3.2 静态网页资源

3.2.1 静态网页资源介绍

在网站设计中,纯粹HTML格式的网页(可以包含图片,视频,JS(前端功能实现),CSS(样式)等)通常被称为“静态网页”,早期的网站大多都是静态的。静态网页是相对于动态网页而言的,是指没有后台数据库,不含程序(如phpjspasp)。

3.2.2 静态资源特点

每个网页都有一个固定的URL地址,且URL一般以.html,.html,shtml等常见形式为后缀,而且地址中不含邮问号“&”等特殊符号。

纯文本类程序或文件,如.html.htm.xml.shtml.js.css等;

图片类文件或数据文档,如.jpg.gif.png.bmp.txt.doc.ppt等;

视频类流媒体文件,如.mp4.swf.avi.wmv.flv等。

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

网页内容是固定不变的,因此,容易被搜索引擎收录(容易被用户找到)(优点)

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

网页的交互性较差,在程序功能实现方面有较大的限制(缺点)

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

总结:

1. 程序在客户浏览器端解析,不读取后端数据库,因此性能和效率很高。

2. 因为后端没有数据库支持,所以和用户的交互性较差,功能实现也很少

3.3 动态网页资源

3.3.1 动态网页资源介绍

所谓的动态网页是与静态网页相对而言的,也就是说,动态网页的URL后缀不是.htm,.html,.shtml,.xml,.js,.css等静态网页的常见后缀扩展名形式,而是以.asp,.aspx,.php,.js,.do,.cgi等形式作为后缀的,并且一般在动态网页网址中会有标志性的符号--“?,&”,此外,在大多数情况下后端都需要有数据库支持等。

3.3.2 动态资源特点

网页扩展名后缀常见为:.asp,.aspx,.php,.jsp,.do,cgi

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

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

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

动态网页中的“?”在搜索引擎的收录方面存在一定问题,搜索引擎一般不会从一个网站的数据库中访问全部网页,或者出于技术等方面的考虑,搜索蜘蛛一般不会去抓去网址中“?”后面的内容,因此在企业通过搜索引擎进行推广时,需要针对采用动态网页的网站做一定的技术处理(伪静态技术),以便适应搜索因穷的抓取要求。(动态网页资源不便于被搜索引擎收录

程序在服务器端解析,这相当于顾客点餐,饭店厨师做饭做菜,耗时长,效率低。由于程序在服务端解析,因此,会消耗大量的CPU和内存,I/O等资源,并且多数还要读取数据库等服务,因此,其访问效率远不如静态网页,在服务端解析动态程序的服务常见的有PHP引擎,Java容器(tomcat,resin,jboss,weblogic

3.4 伪静态网页

取长补短(伪静态资源实质是动态资源)

 

第4章 网络访问统计方法

4.1 IP

1.  IP(独立IP),即Internet Protocol,这里指独立IP数,

2.  独立IP数是指不同IP地址的计算机访问网站时被计的总次数

3.  一般一天内(00:00-24:00)相同IP地址的客户端访问网站页面只会被计一次

   

1. 利用awk或者相应统计命令,进行分析访问日志信息进行统计

2. 在网站访问页面中嵌入统计程序代码(页面结尾处),只有全部网页加载完毕后,才进行数据统计

 [root@m01 ~]# curl -s  www.oldboyedu.com|grep "hm.baidu" --color

         <script type="text/javascript">

   var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://"); document.write(unescape("%3Cscript src='" + _bdhmProtocol + "hm.baidu.com/h.js%3F9aa800f882f575237396648643111698' type='text/javascript'%3E%3C/script%3E"))

 </script>

     说明:利用hm.baidu.com在页面curl时会出现,利用百度进行统计PV IP信息

3. 利用第三方公认的统计工具进行统计

例如:百度统计工具 hm.baidu.com

4.2 PV

1.   PV(访问量)即Page View,中文翻译为页面浏览,

2.   即页面浏览量或点击量,不管客户端是不是相同,也不管IP是不是相同,

3.   用户只要访问网站页面就会被计算PV,一次计一个PV

1. 利用awk或者相应统计命令,进行分析访问日志信息进行统计

2. 在网站访问页面中嵌入统计程序代码(页面结尾处),只有全部网页加载完毕后,才进行数据统计

 [root@m01 ~]# curl -s  www.oldboyedu.com|grep "hm.baidu" --color

         <script type="text/javascript">

   var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://"); document.write(unescape("%3Cscript src='" + _bdhmProtocol + "hm.baidu.com/h.js%3F9aa800f882f575237396648643111698' type='text/javascript'%3E%3C/script%3E"))

 </script>

     说明:利用hm.baidu.com在页面curl时会出现,利用百度进行统计PV IP信息

4. 利用第三方公认的统计工具进行统计

   例如:百度统计工具 hm.baidu.com

4.3 UV

1.   UV(独立访客)即Unique Visitor,同一个客户端(PC或移动端)访问网站被计为一个访客。

2.   一天(0000-24:00)内相同的客户端访问同一个网站只计一次UV

3.   UV一般是以客户端Cookie等技术作为统计依据

  

   cookie:根据用户信息,为用户设定一个身份标识。(保存在客户端本地)(一把钥匙)

   session:记录用户信息,用户情况。保存在服务端本地(配置一把锁)


   · 通过客户端HTTP请求报文分析

   · 通过Cookie信息鉴别统计

 

   工作中常用的统计工具

   · 网页信息统计软件-piwik

         pwiki统计工具:(https://piwik.org/

         pwiki演示页面:https://piwik.org/demo

       · ELK软件介绍说明

         http://blog.oldboyedu.com/elk/

 

4.4 并发连接

       A种理解:网站服务器每秒能够接收的最大用户请求数。

       B种理解:网站服务器每秒能够响应的最大用户请求数。

       C种理解:网站服务器在单位时间内能够处理的最大连接数。


   下面是国外学者对网站并发数的计算公式及参考说明:

       Request Per Second + Simultaneous Browser connections + Thinking Time =        Concurrent User

       其中:

   Concurrent User表示网站并发用户总数

   Request Per Second[RPS]表示每秒请求数(吞吐量)

   Simultaneous Browser connections[SBC]表示并发浏览连接数。

   Thinking Time表示平均用户思考时间。


http协议原理

标签:很多   second   国外   resource   拒绝   protoc   数据库技术   error   请求方法   

原文地址:http://blog.51cto.com/12805107/2067971

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!