HTTP协议学习笔记(一)——初识HTTP协议和常见状态码介绍

HTTP简述

文章基于http协议1.1版本,目前最新为2.0版本,但1.1仍然是主流。
HTTP协议:是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
相关基础介绍
TCP/IP协议族各层以及其作用:
应用层:决定了向用户提供应用服务时通信的活动。如FTP(文件传输协议)和DNS(域名系统)。HTTP协议也属于该层。
传输层:提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个性质不同的协议:TCP(传输控制协议)和UDP(用户数据包协议)。
网络层:处理在网络上流动的数据包。数据包是网络传输的最小数据单位。
链路层(数据链路层):用来处理连接网络的硬件部分。
在这里插入图片描述
在这里插入图片描述
发送端从应用层往下走,接收端则从链路层往上。

RFC:一些用来制定HTTP协议技术标准的文档。

URI是用字符串标示某一互联网的资源,URL标示资源的地点(互联网上所在位置);可见URL是URI的子集。

http://user:[email protected]:80/dir/index.htm?uid=1#ch1
使用http:或者httpsd等协议方案名获取访问资源时要指定协议类型。不区分字符大小写。

简单的HTTP协议

在这里插入图片描述
在这里插入图片描述

HTTP无状态协议

HTTP协议是一种不保存状态,即无状态协议。HTTP自身不对请求和响应之间的通信状态进行保存,也就是说协议对发送过的请求和响应都不做持久化处理。
Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。

持久连接

HTTP协议初始版本中,每进行一次HTTP通信(请求到响应完毕)就要断开一次TCP连接。造成一些问题,如一个html页面中有多个图片资源,每次请求一个图片完成后都会断开连接,无疑增加通信量,同时前台等待时间过长。HTTP1.1版本和部分1.0版本中想出了持久连接。持久连接的特点是:只要任意一端没有明确提出断开连接,则保持TCP连接状态。
注:在HTTP1.1版本中所有的连接默认都是持久连接。在http1.0中并未标准化。
持久连接使得多数请求以管线化发送成为可能,即发送请求后不再需等待收到响应后再发送下一个请求。

在这里插入图片描述

管线化

持久连接使得多数请求以管线化方式发送成为可能。管线化即在发送多个请求时不需要一个接一个的等待请求,可并行同时发送多个请求。
在这里插入图片描述

HTTP协议常用方法

方法名 说明
GET 用来请求访问已被URI识别的资源
POST 传输实体主体。虽然GET方法也可传输实体,但一般用POST方法,POST方法的主要目的并不是获取响应的主体内容。
PUT 传输文件。像FTP协议的文件上传一样,要求在请求报文的主体中包含内容,然后保存到请求的URI指定位置。由于方法在1.1版本中不带自身验证机制,安全性能差,一般不会开发此方法。
HEAD 获取报文首部,和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。
DELETE 删除文件。按请求删除指定URI上的资源。和PUT方法一样不带自身验证机制,任何人可操作,一般不开放。
OPTIONS 询问支持方法。用来查询针对请求RUI指定的资源支持的方法。
TRACE 让WEB服务器将之前的请求通信返回给客户端。发送请求时,在Max-Forwards首部字段填入数值,每经过一个服务器就将该数字减1,当数值为0时,停止传输,最后收到请求的服务器则返回200ok状态码。
CONNECT 要求用隧道协议连接代理。方法要求与代理服务器通信是建立隧道。实现用隧道协议进行TCP通信。主要使用SSL和TLS协议把通信内容加密后经网络隧道传输。
 注:方法名区分大小写,注意要使用大写字母。

HTTP报文
报文大致分为报文首部和报文主体两块。
报文:是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输。
实体:作为请求或响应的有效载荷数据被传输,其内容由实体首部和实体主体组成。
通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生了变化,才导致它与报文主体产生差异。

HTTP报文内的HTTP信息

在这里插入图片描述
报文大致分为报文首部和报文主体两块。
报文:是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输。
实体:作为请求或响应的有效载荷数据被传输,其内容由实体首部和实体主体组成。
通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生了变化,才导致它与报文主体产生差异。
请求行:包含请求方法,请求的URI和HTTP版本。
状态行:包含表明响应结果的状态码,原因短语和HTTP版本。
首部字段:包含标示请求和响应的各种条件和属性的各类首部。(一般有4种首部:通用首部,请求首部,响应首部,实体首部)
其他:可能包含HTTP的RFC里为定义的首部(Cookie等)。

多部分对象集合(Multipart)
HTTP协议中发送的报文主体中可能包含多类型实体。通常实在图片或者文本文件等上传时使用。
Multipart/form-data:在web表单文件上传时使用
Multipart/byteranges:状态码206响应报文包含了多个范围的内容时使用。
注:在HTTP协议中使用对部分对象集合时,必须要在首部字段里加上Content-type字段。

HTTP常用响应状态码

状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务端是否正常处理请求。
数字中第一位指定了响应的类别,后两位无分类。仅记录在RFC2616上的HTTP状态码就达40种。实际上经常使用的大概只有14种。
1XX:接收的请求正在处理

2XX:请求正常处理完毕

状态码和短语 说明
200 ok 表示客户端发来的请求在服务器端被正常处理了
204 No Content 表示服务器接收的请求已成功处理,但在返回的报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。返回204响应,浏览器页面不会更新。
206 Partial Content 表示客户端进行了范围请求,而服务器成功执行了这部分GET请求。响应报文中Content-Range指定范围的实体内容。

3XX 重定向

状态码和短语 说明
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-Math,If-Range,If-Unmodified-Since中任意一个首部),服务器端允许请求访问字段,但因发生请求不满足条件的情况。和重定向没有关系。
307 Temproary Redirect 临时重定向。与302有相同含义。尽管302标准禁止POST改成GET,但使用时大家不会遵守,307会遵照浏览器标准,不会从POST改成GET。
注:303和302状态码有着相同的功能,但303状态码明确表示客户端应当采用GET方法获取资源,这点与302状态码有区别。

说明:301、302、303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并且删除请求报文内的主体,之后请求会自动发送。301、302标准是禁止将POST方法改成GET方法,但在实际使用中,每个浏览器都会改成GET。

4XX:客户端错误

状态码和短语 说明
400 Bad Request 表示报文中存在语法错误。另外浏览器会像200OK一样对待该状态码。
401 Unauthorized 表示发送的请求需要有通过HTTP认证(BASIC认证,DEGEST认证)的认证信息。另外若之前已进行过一次请求,则表示用户认证失败。
403 Forbidden 表示请求资源的访问被服务器拒绝了
404 Not Found 表示服务器上无法找到请求的资源

5XX 服务器错误

状态码和短语 说明
500 Internal Server Error 表示服务器在执行请求时内部发生错误。也可能是Web应用存在的bug或者某些临时故障。
503 Service Unavailable 表示服务器暂时处于超负荷或者正在进行停机维护,现在无法处理请求。

猜你喜欢

转载自blog.csdn.net/qq_32165615/article/details/87652228