1.什么是HTTP协议?
HTTP 协议一般指 HTTP(超文本传输协议)。所有的 WWW 文件都必须遵守这个标准。
HTTP 负责 web 服务器与 web 浏览器之间的通信,用于从 web 客户端(浏览器)向 web 服务器发送请求,并从 web 服务器向 web 客户端返回内容(网页)。
HTTP 是基于 TCP/IP 通信协议来传递数据的(HTML 文件、图片文件、查询结果等)。
2.HTTP请求 URL
HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包,HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。
URL包含了用于查找某个资源的足够的信息。
HTTP 的 URL 是由 http:// 起始与默认使用端口 80,而 HTTPS 的 URL 则是由 https:// 起始与默认使用端口443。
3.HTTP的工作原理
HTTP 协议工作于客户端-服务端架构上,浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求,Web 服务器根据接收到的请求后,向客户端发送响应信息。
但是需要注意一下几点:
- HTTP 是无连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,节省传输时间。
- HTTP 是媒体独立的:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。
- HTTP 是无状态的:HTTP 协议是无状态协议,无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快。
总的来说,HTTP通信包含了四个步骤:1.客户与服务器建立连接 2.客户向服务器提出请求 3.服务器接收请求,并根据请求返回相应的文件作为应答 4.客户与服务器关闭连接。
4.HTTP请求
客户端通过发送HTTP请求向服务器请求对资源的访问。,http请求由请求行,消息报头,请求正文三部分构成。
访问http:/baidu.com,打开浏览器的f12开发者模式:
4.1 HTTP请求数据格式
图:HTTP数据请求格式
HTTP请求行
请求行是请求数据的第一行,请求行以方法字段开始,后面分别是URL字段和HTTP协议版本字段,并以CRLF结尾。
HTTP请求头
消息报头由一系列的键值对组成,允许客户端向服务器端发送一些附加信息或者客户端自身的信息,主要包括:
- Host: 表示请求的主机名
- User-Agent: 浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0 …
- Chrome/79,IE浏览器的标识类似Mozilla/5.0 (Windows NT …) like Gecko;
- Accept:表示浏览器能接收的资源类型,如text/*,image/或者/*表示所有;
- Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;
- Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。
HTTP请求体
只有在发送POST请求时才会有请求正文,GET方法并没有请求正文。
例如:
4.2 HTTP请求方法
根据 HTTP 标准,HTTP 请求可以使用多种请求方法,HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
9种请求方法:
方法 |
描述 |
GET |
请求指定的页面信息,并返回实体主体。 |
POST |
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 |
HEAD |
类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
PUT |
从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE |
请求服务器删除指定的页面。 |
CONNECT |
HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
OPTIONS |
允许客户端查看服务器的性能。 |
TRACE |
回显服务器收到的请求,主要用于测试或诊断。 |
PATCH |
是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
5.HTTP响应
在接收和解释请求消息后,服务器会返回一个HTTP响应消息。
HTTP响应也由三部分组成,包括状态行,消息报头,响应正文。
5.1 HTTP响应状态行
状态行也由三部分组成,包括HTTP协议的版本,状态码,以及对状态码的文本描述。例如:
5.2 HTTP响应状态码
当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头用以响应浏览器的请求。
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。分别是:
- 1xx:响应中 - 表示请求已接收,继续处理
- 2xx:成功 - 表示请求已被成功接收、理解、接受
- 3xx:重定向 - 要完成请求必须进行更进一步的操作
- 4xx:客户端错误 - 请求有语法错误或请求无法实现
- 5xx:服务器端错误 - 服务器未能实现合法的请求
常见的状态码:
- 200 OK :请求成功。一般用于 GET 与 POST 请求
- 404 Not Found: 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
- 501 Not Implemented :服务器不支持请求的功能,无法完成请求
6.HTTPS
那么,HTTP传输协议有什么缺点呢?
通信使用明文(不加密),内容可能会被窃听
不验证通信方的身份,因此有可能遭遇伪装
无法证明报文的完整性,所以有可能已遭篡改
…
HTTP 协议中没有加密机制,但可以通 过和 SSL(Secure Socket Layer, 安全套接层 )或 TLS(Transport Layer Security, 安全层传输协议)的组合使用,加密 HTTP 的通信内容。属于通信加密,即在整个通信线路中加密。
HTTP + 加密 + 认证 + 完整性保护 = HTTPS(HTTP Secure )
HTTPS 采用共享密钥加密(对称)和公开密钥加密(非对称)两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。
所以应充分利用两者各自的优势, 将多种方法组合起来用于通信。 在交换密钥阶段使用公开密钥加密方式,之后的建立通信交换报文阶段 则使用共享密钥加密方式。