天天看点

http协议初识

HTTP–Hyper Text Transfer Protocol,超文本传输协议,是一种建立在TCP上的无状态连接。

基本工作流程:

1.客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作

2.服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源

3.最后通过发送HTTP响应把结果返回给客户端。

其中一个请求的开始到一个响应的结束称为事务,当一个事物结束后还会在服务端添加一条日志条目。

1.TCP/IP 通信传输流

http协议初识

发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。

这种把数据信息包装起来的做法称为封装(encapsulate)。

2.HTTP 协议用于客户端和服务器端之间的通信

3.通过请求和响应的交换达成通信

http协议初识

3.1http请求

HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。

HTTP请求由状态行、请求头、请求正文三部分组成:

状态行:包括请求方式Method、资源路径URL、协议版本Version;

请求头:包括一些访问的域名、用户代理、Cookie等信息;

请求正文:就是HTTP请求的数据。

备注:请求方式Method一般有GET、POST、PUT、DELETE,含义分别是获取、修改、上传、删除,其中GET方式仅仅为获取服务器资源,方式较为简单,因此在请求方式为GET的HTTP请求数据中,请求正文部分可以省略,直接将想要获取的资源添加到URL中。

下图所示就是GET的请求,没有请求正文。

http协议初识

下图所示为POST请求的格式,有状态行、请求头、请求正文三部分。

http协议初识

3.2http响应

响应数据格式

服务器收到了客户端发来的HTTP请求后,根据HTTP请求中的动作要求,服务端做出具体的动作,将结果回应给客户端,称为HTTP响应。

HTTP响应由三部分组成:状态行、响应头、响应正文;

状态行:包括协议版本Version、状态码Status Code、回应短语;

响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息;

响应正文:就是响应的具体数据。

备注:我们主要关心并且能够在客户端浏览器看得到的是三位数的状态码,不同的状态码代表不同的含义,其中

http协议初识

常见状态码的含义

200---OK/请求已经正常处理完毕

        301---/请求永久重定向

        302---/请求临时重定向

        304---/请求被重定向到客户端本地缓存

        400---/客户端请求存在语法错误

        401---/客户端请求没有经过授权

        403---/客户端的请求被服务器拒绝,一般为客户端没有访问权限

        404---/客户端请求的URL在服务端不存在

        500---/服务端永久错误

        503---/服务端发生临时错误
           

HTTP响应模型

服务器收到HTTP请求之后,会有多种方法响应这个请求,下面是HTTP响应的四种模型:

        单进程I/O模型

服务端开启一个进程,一个进程仅能处理一个请求,并且对请求顺序处理;

        多进程I/O模型

服务端并行开启多个进程,同样的一个进程只能处理一个请求,这样服务端就可以同时处理多个请求;

        复用I/O模型

服务端开启一个进程,但是呢,同时开启多个线程,一个线程响应一个请求,同样可以达到同时处理多个请求,线程间并发执行;

        复用多线程I/O模型

服务端并行开启多个进程,同时每个进程开启多个线程,这样服务端可以同时处理进程数M*每个进程的线程数N个请求。
           

4.HTTP报文格式

HTTP报文是HTTP应用程序之间传输的数据块,HTTP报文分为HTTP请求报文和HTTP响应报文,但是无论哪种报文,他的整体格式是类似的,大致都是由起始、首部、主体三部分组成,起始说明报文的动作,首部说明报文的属性,主体则是报文的数据。接下来具体说明。

http协议初识

4.1请求报文

请求报文的起始由请求行构成(有些资料称为状态行,名字不一样而已,都是指的一个东西),用来说明该请求想要做什么,由Method、URL、Version 三个字段组成,注意每个字段之间都有一个空格。

其中<Method>字段有不同的值:

            GET   --- 访问服务器的资源

            POST  --- 向服务器发送要修改的数据

            HEAD  --- 获取服务器文档的首部

            PUT   --- 向服务器上传资源

            DELETE--- 删除服务器的资源

    <URL>字段表示服务器的资源目录定位

    <Version>字段表示使用的http协议版本

    首部部分由多个请求头(也叫首部行)构成,那些首部字段名有如下,不全:

            Accept     指定客户端能够接收的内容格式类型

            Accept-Language 指定客户端能够接受的语言类型

            Accept-Ecoding  指定客户端能够接受的编码类型

            User-Agent      用户代理,向服务器说明自己的操作系统、浏览器等信息

            Connection      是否开启持久连接(keepalive)

            Host            服务器域名

            ...

    主体部分就是报文的具体数据。  
           

4.2相应报文

响应报文的起始由状态行构成,用来说明服务器做了什么,由Method、URL、Version 三个字段组成,同样的每个字段之间留有空格;

<Status-Code> 上边已经说明; 

    首部由多个响应头(也叫首部行)组成, 首部字段名如下,不全:

            Server    服务器软件名,Apache/Nginx

            Date      服务器发出响应报文的时间

            Last-Modified   请求资源的最后的修改时间

            ...

    主体部分是响应报文的具体数据。
           

5.HTTP 是不保存状态的协议

使用 HTTP 协议,每当有新的请求发送时,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应报文的信息。这是为了更快地处理大量事务,确保协议的可伸缩性,而特意把 HTTP 协议设计成如此简单的

6.使用方法下达命令

http协议初识

7.网站访问量

IP IP访问量
           

相同的公网IP计算一次,就是同一个局域网内的所有用户访问一个网站,但是他们都是借助一个公网IP去访问那个网站的(NAT),因此这也只能算作一个IP访问量。换一次公网IP则会加1。

PV 网页访问量
           

用户访问的页面数就是PV访问量,同一个局域网的不同用户,而且就算是同一个用户,只要刷新一次网站页面,PV访问量就加1,三个访问量的值往往数PV的值最大。

UV 访客访问量
           

这里的访客不是用户,而是电脑,一台电脑算一个访客,即使是同一台电脑的不同用户,访问同一个网站UV也只能加1,只有更换电脑才会使UV加1,因为服务端会记录客户端电脑的信息。

web