HTTP协议浅谈

一、基础浅谈

HTTP–Hyper Text Transfer Protocol超文本传输(转移)协议,是一种建立在TCP上的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。其中一个请求的开始到一个响应的结束称为事务,当一个事物结束后还会在服务端添加一条日志条目。

1、在TCP/IP协议栈中的位置
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示:
在这里插入图片描述
默认HTTP的端口号为80,HTTPS的端口号为443。

2、工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:

1)首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作开始。

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

3、请求方法

HTTP的请求方法包括如下几种:

GET
POST
HEAD
PUT
DELETE
OPTIONS
TRACE
CONNECT
GET — 访问服务器的资源
POST — 向服务器发送要修改的数据
HEAD — 获取服务器文档的首部
PUT — 向服务器上传资源
DELETE— 删除服务器的资源

二、HTTP请求

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

HTTP请求由状态行、请求头、请求正文三部分组成:
状态行:包括请求方式Method、资源路径URL、协议版本Version;

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

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

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

现在大多数协议版本为http/1.1

下图所示为POST请求的格式,有状态行、请求头、请求正文三部分。
在这里插入图片描述

三、HTTP响应

1、 响应数据格式

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

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

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

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

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

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

在这里插入图片描述
具体HTTP响应实例如下图:

在这里插入图片描述

2、 常见状态码的含义

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

301—/请求永久重定向

302—/请求临时重定向

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

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

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

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

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

500—/服务端永久错误

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

3、 HTTP响应模型

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

单进程I/O模型

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

多进程I/O模型

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

复用I/O模型

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

复用多线程I/O模型

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

四、HTTP报文格式

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

1、HTTP请求报文
在这里插入图片描述

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

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

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

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

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

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

Host 服务器域名

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

2、HTTP响应报文

在这里插入图片描述

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

上边已经说明;

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

Server 服务器软件名,Apache/Nginx

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

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

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

小tips:关于更多请求头和响应头(即首部字段名)的说明请参考http://tools.jb51.net/table/http_header

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值