Http 协议

一、HTTP 协议详解

http (Hyper Text Transfer Protocol,超文本传输协议)协议是基于应用层的 通信规范:双方要进行通信,大家都遵守一个规范——http协议。

http协议从WWW服务器传输超文本到本地浏览器,可以使浏览器更加高效。

http协议 http/2 协议

http 是一个应用层协议,由 请求 和 响应 构成,是一个标准的客户端服务器模型。

http 通常承载于 TCP 协议之上,有时也承载于 TSL 或 SSL 协议层之上,这个时候就成了常说的 https。

默认 http 的端口号为 80, https 的端口号为 443。

http 协议是个无状态的协议,同一个客户端的这次请求和上次请求没有对应关系。

http 协议的模型就是客户端发起请求,服务器回送响应。这种设计属于典型的“问答式”交互,客户端和服务器一问一答,使http协议模型异常简单。

但是也存在问题:如服务器端不会主动向客户端PUSH,一问一答的轮询也会使TCP连接频繁建立和断开,异常其交互效率不高。

http 协议如何工作

1、客户机与服务器需要建立连接。单击某个超链接,HTTP 协议的工作开始。

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

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

4、客户端接收服务器返回的信息并显示在用户的显示屏上,然后客户机与服务器断开连接。

注:如果以上过程中的某一步出现错误,产生的错误信息将返回到客户端,由显示屏输出。可以使用抓包工具查看http协议。

http 的一些主要概念

1、请求

在发请求前,需要先建立连接

连接是传输层的实际环流,建立在两个互相通信的应用程序之间,

在 http/1.1 中,request 和 response 头中都有可能出现一个 connection 的头,其决定 Client 和 Server 通信时对于长链接如何处理。

http/1.1 默认对方支持长连接。只要 request 或 response 的header 中包含值为close 的 connection,都表名当前正在使用的 TCP 连接在请求处理完毕后会被断掉,以后Client 再进行新的请求时必须创建新的 TCP 连接。

持久连接的好处在于减少了TCP连接的重复建立和断开造成的额外开销,减轻了服务器端的负载。另外,减少开销的那部分时间,使HTTP请求和响应能够更早地结束,这样Web页面的显示速度也就相应提高了。

持久连接使得多数请求以管线化方式发送称为可能,即不用等待响应亦可直接发送下一个请求。

http 请求由三部分组成:请求行、消息报文、请求正文。

请求行:以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,

格式为:Method Request-URI HTTP-Version CRLF

Method: 请求方法

Request-URI: 一个统一资源标识符

HTTP-Version: 请求的HTTP协议版本

CRLF: 回车和换行

 

2、响应

http 响应也由三部分组成,分别是:状态行、消息报文、响应正文。

格式为:HTTP-Version Status-Code Reason-Phrase CRLF

HTTP-Version: 服务器http协议的版本。

Status-Code: 服务器发回的响应状态代码。

Reason-Phrase: 状态代码的文本描述。

状态码由三位数字组成,第一个数字定义了响应的类型,有五种可能取值:

1xx:指示信息——请求已接收,继续处理

2xx:成功——请求已被成功接收、理解、接收。

3xx:重定向——要完成请求必须进行进一步的操作。

4xx:客户端错误——请求有语法错误或请求无法实现。

5xx:服务器端错误——服务器未能实现合法的请求。

 常用的状态码大概只有14种。

200 OK:表示从客户端发来的请求在服务器端被正常处理了。

204 No Content:表示服务器接收的请求已经成功处理,但在返回的响应报文中不含实体的主体部分。一般只需要从客户端往服务器发送信息,而对客户端不需要发送新的消息内容的情况下使用。

206 Partial Content:表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定范围的实体内容。

301 Moved Permanently:永久重定向,表示请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI。

302 Found:临时重定向,表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。

303 See Other:表示由于对应的资源存在另一个URI,应使用GET方法定向获取请求的资源。

304 Not Modified:表示客户端发送附带条件的请求(指采用GET方法的请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一部首)时,服务器端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304 Not Modified(服务器端资源未改变,可直接使用客户端未过期的缓存)。

307 Temporary Redirect:临时重定向。

400 Bad Request:表示请求报文中存在语法错误。

401 Unauthorized:表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。另外若之前已进行过1次请求,则表示用户认证失败。返回401的响应必须包含一个适用于被请求资源的WWW-Authenticate 首部用以咨询用户信息。当浏览器初次接收到401响应,会弹出认证用的对话窗口。

403 Forbidden:表示对请求资源的访问被服务器拒绝了。未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源IP地址视图访问)等列举的情况都可能是403发送的原因。

404 Not Found:表示服务器上无法找到请求的资源。

500 Internal Server Error:表示服务器端在执行请求时发生了错误。

503 Service Unavailable:表示服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求。可以写入Retry-After头部字段返回给客户端以通知解除所需的时间。

3、报头

http消息报头包括普通报头、请求报头、响应报头、实体报头。

每个报头域组成形式为:名字 + : + 空格 + 值

消息报文域的名字是不区分英文大小写的。报头都是自解释的。

原文地址:https://www.cnblogs.com/cshaptx4869/p/10542130.html