本文向大家分享http协议相关基础知识,了解http的请求方法,相关http状态码,及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服务三者的概念已经混淆了,在本书中也是为相同,都是指当下最常见的网站服务应用。
HTTP协议从诞生之初到现在已经经历了若干个版本,其中最主要的版本为HTTP/1.0、HTTP/1.1。HTTP/1.0是第一个得到广泛使用的版本,而HTTP/1.1为当前使用的主流版本。
HTTP/1.0是第一个的得到广泛使用的HTTP版本。HTTP/1.0在HTTP/0.9的基础上增加了HTTP请求头,可支持更多的请求方法,并且能对多媒体对象进行处理。HTTP/1.0使得包含生动图片的web页面和交互式表格成为可能,而正是这些页面和表格促使互联网为人们广泛地接受。HTTP/1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后即断开TCP连接,服务器不跟踪每个客户,也不记录过去的请求。
HTTP/1.1的重点是修复HTTP设计中的缺陷,从扩展性,缓存处理,带宽优化,持久连接,host头,错误通知,消息传递,内容协商等多个方面做了相关改进。HTTP/1.1是当前互联网主流的HTTP版本。
在连接方面,HTTP/1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和时间延迟。
在请求头方面,HTTP/1.1增加了更多的请求头和响应头信息,用以增强HTTP功能。例如:host主机头功能,可以让Web浏览器使用主机头名来明确表示要访问服务器上的哪个WEB站点,这样就可以使用Web服务器在同一个IP地址和端口号上配置多个虚拟Web站点。
HTTP/1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,表示客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,表示客户端通知服务器返回本次请求结果后关闭连接。HTTP/1.1还提供了与身份认证,状态管理和Cache缓存等机制相关的请求头和响应头等。
在HTTP通信中,每个HTTP请求报文都包含一个方法。用以告诉Web服务器端需要执行哪些具体的动作,这些动作包括:获取指定Web页面、提交内容到服务器、删除服务器上资源文件等,这些HTTP请求报文中包含的方法被称为HTTP请求方法。
常用的HTTP请求方法
HTTP方法 |
作用描述 |
GET |
客户端请求指定资源信息,服务器返回指定资源 |
HEAD |
只请求响应报文中的HTTP首部 |
POST |
将客户端的数据提交到服务器,例:注册表单 |
PUT |
用从客户端向服务器传送的数据取代指定的文档内容。 |
DELETE |
请求服务器删除Request-URI所表示的资源。 |
MOVE |
请求服务器将指定的页面移至另一个网络地址。 |
1. HTTP状态码介绍
HTTP状态码(HTTP Status Code)是用来表示Web服务器响应HTTP请求状态的数字代码。每当Web客户端向Web服务器发送一个HTTP请求时,Web服务器都会返回一个状态响应代码。这个状态码是一个三位数字代码,作用是告知Web客户端此次请求是否成功,或者是否要采取其他的动作方式。
HTTP协议1.1版本中的状态码可以分为五大类。
不同范围的状态码及其对应的作用
状态码范围 |
作用描述 |
100 - 199 |
用于指定客户端相应的某些动作 |
200 - 299 |
用于表示请求成功 |
300 - 399 |
用于已经移动的文件,并且常被包含在定位头信息中指定新的地址信息 |
400 - 499 |
用于指出客户端的错误 |
500 - 599 |
用于指出服务端的错误 |
HTTP响应的状态码种类很多,但是在实际工作场景中,经常遇到的状态码却不多,生产场景下常见的重要状态码及对应的作用
生产场景常见的状态码及其对应的作用
状态代码 |
详细描述说明 |
200 - OK |
服务器成功返回网页,这是成功的HTTP请求返回的标准状态码 |
301 - Moved Permanently |
永久跳转,所请求的网页将永久跳转到被设定的新位置, |
401 - Forbidden |
禁止访问,虽然这个请求是合法的,但是服务器端因为匹配了预先设置的规则而拒绝响应客户端的请求,此类问题一般为服务器或服务权限配置不当所致。 |
404 - Not Found |
服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源所致。 |
500 - Internal Server Error |
内部服务器错误,服务器遇到了意料不到的情况,不能完成客户的请求。 这是一个较为笼统的报错,一般为服务器的设置或内部程序问题导致。 例如:SELinux开启,而又没有为HTTP设置规则许可,客户端访问就是500 |
502 - Bad Gateway(重点) |
坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成响应网关服务器。这通常为反向代理服务器下面的节点出问题所致。 反向代理服务器无法与后面的web服务节点服务器建立联系 |
503 - Service Unavailable |
服务当前不可用,可能是服务器超载或停机维护导致的,或者是反向代理服务器后面没有可以提供服务的节点 |
504 - Gateway Timeout |
网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求。数是服务器过载导致没有在指定的时间内返回数据给前端代理服务器。 |
2. HTTP状态码的命令行查看
可以通过curl命令(附带相关参数)在Linux命令行查看HTTP相应的数字状态码命令如下:
[root@localhost ~]# curl -I www.baidu.com HTTP/1.1 200 OK <- 200即为状态码 Server: openresty/1.13.6.1 Date: Thu, 22 Dec 2022 06:37:17 GMT Content-Type: text/html;charset=utf-8 Content-Length: 5537 Connection: keep-alive Cache-Control: private Content-Encoding: gzip X-AspNet-Version: 4.0.30319 X-Frame-Options: SAMEORIGIN X-Content-Type-Options: nosniff X-XSS-Protection: 1;mode=block X-Powered-By: ASP.NET [root@localhost ~]# curl -I -s -w "%{http_code}\n"-o /dev/null www.baidu.com 200 <- 200即为状态码
HTTP报文中有很多行内容,这些含的字段都是由一些ASCII码串组成,但各个字段的长度是不同的。HTTP报文可分为两种,一种是从Web客户端发往Web服务器的HTTP报文,称为请求报文(Request Message)。另外一种是从Web服务器发往Web客户端的报文,称为响应报文(Response Message),HTTP的请求和响应报文的格式类似。
1. HTTP请求报文(Request Message)介绍
HTTP请求报文由请求行、请求头部(header)、空行和请求报文主体几个部分组成。
HTTP请求报文格式说明
报文格式 |
报文信息 |
请求行 |
请求方法URL协议版本 |
请求头 |
字段名1:值1 字段名2:值2 ...... 例如: Accept:image/gif,image/jpeg Accept-Language:zh-cn ...... |
空行 |
空白无内容 |
请求报文主体 |
GET方法没有请求报文主体,POST方法才有 |
下面对HTTP请求报文的每个部分逐一阐述:
1) 请求行
请求行请求报文的第一行,用来说明客户端想要做什么。内容有请求方法字段、URL字段和HTTP协议版本字段组成,它们之间用空格分隔。下面以GET/index.html HTTP/1.1为例来说明请求报文的起始请求行信息详情
请求报文的起始请求行信息
请求方法字段示例 |
URL字段示例 |
HTTP协议版本 |
GET |
/index.html |
HTTP/1.1 |
2) 请求头部
请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部的作用是通过客户端把请求的相关信息告诉给服务器。
常见的请求头部信息
请求头信息 |
说 明 |
Accept:image/gif,image/jpeg |
媒体类型 |
Accept-Language:zh-cn |
语言类型 |
Accept-Encoding:gzip,deflate |
支持压缩 |
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT;...) |
客户端类型 |
Host:www.baidu.com |
主机名 |
与请求报文相关的最常用的请求头是Content-Type和Content-Length。
3) 空行
最后一个请求头部信息之后是一个空行,通过发送回车符和换行符,通知Web服务器空行以下不会有请求头部的信息了。
4) 请求报文主体
请求报文主体包含了要发送给Web服务器的数据信息。请求报文主体不会应用于HTTP的GET命令方法,而是应用与POST方法。POST方法适用于需要客户填写表单的场合。请求报文的主体信息此处就不再举例了。
2. HTTP响应报文(Response Message)介绍
HTTP响应报文由起始行、响应头部(header)、空行和相应报文主体这几个部分组成,和HTTP请求报文格式类似。
HTTP响应报文的一般格式
报文格式 |
报文信息 |
起始行 |
协议及版本号、数字状态码、状态信息 |
响应头部 |
字段名1:值1 字段名2:值2 ...... 例如: Content-Type:text/html,charset=utf-8 Content-Language:78 ...... |
空行 |
空白无内容 |
响应报文主体 |
123 |
下面对响应报文的每个部分逐一阐述。
1) 起始行
相应报文的起始行也叫状态行,用来说明服务器响应客户端请求的状况。一般为协议及版本号、数字状态码、状态情况。例如:HTTP/1.1 200 OK。
2) 响应头部
和请求报文类似,起始行的后面一般有若干个头部字段。每个头部字段都包含一个名字和一个值,两者之间用冒号分隔。头部结尾也是一个空行结束的。常见的头部信息有:
Content-Type:text/html,charset=utf-8 Content-Language:78 ......
3) 空行
最后一个响应头部信息之后是一个空行,通过发送回车符和换行符,通知客户端空行下文无头部信息了。
4) 响应报文主体
响应报文主体中装载了要返回给客户端的数据。这些数据可以是文本,也可以是二进制的(如图片、视频)
HTTP协议属于OSI模型中的第七层应用层协议,HTTP协议的重要应用就是WWW服务应用,下面就以WWW服务应用为例介绍HTTP协议的通信原理。以HTTP协议进行通信时,需要有客户端(即终端用户)和服务器端(即Web服务器),在Web客户端向Web服务器发送请求报文之前,先要通过TCP/IP协议在Web客户端和服务端之间建立一个TCP/IP连接,整个HTTP协议请求的工作流程如下:
1) 终端客户在Web浏览器地址栏输入访问地址http://www.baidu.com
2) Web浏览器请求DNS服务器把域名www.baidu.com转换为Web服务器的IP地址,此处的解析过程就是DNS解析的原理流程
3) Web浏览器将端口号(默认80)从访问地址(URL)中解析出来;
4) Web浏览器通过解析后的IP地址及端口号与Web服务器之间建立一条TCP连接;
5) 建立TCP连接后,Web浏览器向Web服务器发送一条HTTP请求报文
6) Web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文
7) Web服务器关闭HTTP连接,关闭TCP连接,Web浏览器显示访问的网站内容到屏幕上。