概述
HTTP(超文本传输协议)是一个简单的请求-响应协议,通常运行于TCP之上,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。
超文本:是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。可以理解为普通的文本文件中若是含有超链接,点击超链接后可以进入另一个文本文件,该文本即为超文本。
当客户端使用浏览器访问网页时,浏览器向服务器发送请求,随后服务器会返回响应给浏览器客户端,所谓的响应就是服务器发送HTML文件给浏览器,浏览器接收发送过来的HTML文件。
设计HTTP的初衷就在于提供一种发布和接收HTML页面的方法,我们可以将其理解为一种规范。所有的WWW文件都必须遵守HTTP的标准。
发展历程
Http 0.9
在1990年,WWW之父蒂姆·贝纳斯·李提出HTTP协议,随后WWW联盟成立,组织了IETF小组进一步完善和发布HTTP;
此时的Http协议只是一个草案,纯文本格式。贝纳斯最初设想的系统里的文档都是只读的,所以只允许用“GET”方法从服务器上获取HTML文件,并且在响应请求之后立即关闭连接,功能十分有限。
Http 1.0
在1996年正式发布,增加了HEAD、POST等方法,增加了响应状态码(如:404),标记可能的错误原因,引入了协议版本号的概念、HTTP header头概念,传输的数据不在限制于文本。
在1.0中服务器发送完一个http响应后,会断开连接。
Http 1.1
是目前互联网上使用最广泛的协议,功能也十分完善。
1.1版本协议增加了PUT、DELETE等新的方法;增加了缓存管理和控制;明确了连接管理;允许持久连接;允许响应数据分块,利于传输大文件;强制要求Host头,让互联网主机托管称为可能
Http 2.0
相对于Http 1.1来说:
重点掌握Http/1.0和Http/1.1,其它了解即可
Http 和 Https
Https可以理解为Http + security!
HTTPS是安全超文本协议,在HTTP基础上有更强的安全性。简单来说,HTTPS是使用TLS/SSL加密的HTTPS协议。
HTTPS和HTTP的区别:
HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即Web服务器发送所有请求。
Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是我们也可以改为8080等其他端口
HTTP消息结构分为两种,HTTP请求Request和HTTP响应Response。HTTP请求为客户端–>发请求–>服务器;HTTP响应为服务器–>响应–>客户端。
客户端请求消息:Request
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(Request line)、请求头部(header)、空行和请求数据四个部分组成,以下图片给出了请求报文的一般格式:
以百度发送请求为例:
以下这四行即为请求行和请求头部信息;
Request URL:https://www.baidu.com/ 请求地址 Request Method:GET get方法/post方法 Status Code:200 OK 状态码:200 Remote (远程) Address:14.215.177.39:443
以下即为请求数据;
Accept:text/html 告诉浏览器,它所支持的数据类型是什么 Accept-Encoding 支持哪种编码格式 Accept-Language:zh-CN,zh;q=0.9 语言 Cache-Control:max-age=0 缓存控制 Connection:keep-alive 告诉浏览器,请求完成是断开还是保持连接
实际上的请求数据远不止如此,但是我们只需要掌握以上截取的内容即可。
服务端响应消息:Response
服务器响应也是由四个部分组成:状态行、消息报头、空行和响应正文
HTTP/1.1 200 OK //第一行:状态行 Date:Sat, 25 July 2021 19:10:59 GMT //第2~4行:消息报头 Content-Type:text/html;charset=ISO-8859-1 Content-Length:122 //空行 <html> //下面都是响应正文 <head> <title>英雄联盟</title> </head> <body> <!-- body goes here --> </body> </html>
我们还是以百度为例:
Cache-Control:private 缓存控制 Connection:Keep-Alive 连接 Content-Encoding:gzip 编码类型 Content-Type:text/html 类型
响应体:
Accept 告诉浏览器,它所支持的数据类型 Accept-Encoding 支持哪种编码格式 BGK UTF-8 GB2312 ISO8859-1 Accept-Language 告诉浏览器,它的语言环境 Cache-Control 缓存控制 Connection 告诉浏览器,请求完成是断开还是保持连接 HOST 主机... Refrush 告诉客户端,多久刷新一次 Location 让网页重新定位
响应状态码
200:请求响应成功
3xx:请求重定向
4xx:找不到资源,比如404——懂的都懂(在线滑稽=。=)
5xx:服务器代码错误
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法:GET,POST和HEAD方法。
HTTP1.1新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE和CONNECT方法。