HTTP简介
HTTP,超文本传输协议(Hypertext Transfer Protocol)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP是应用层协议,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。
HTTP是一种协议规范,这种规范记录在文档上,为真正通过HTTP进行通信的HTTP的实现程序。
工作方式
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP处理过程为:
(1)客户与服务器建立连接
(2)客户向服务器提出请求
(3)服务器接受请求,并根据请求返回相应的文件作为应答
(4)客户与服务器关闭连接
需要注意的是
客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。
HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。
9个HTTP请求方法
GET
GET方法请求一个指定资源的表示形式,并返回实体主体。
HEAD
HEAD方法请求一个与GET请求的响应类似的响应,但没有响应体,用于获取报头。
POST
POST方法向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT
PUT方法用请求有效载荷替换目标资源的所有当前表示。
DELETE
DELETE方法删除指定的资源。
CONNECT
CONNECT方法建立一个到由目标资源标识的服务器的隧道,HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS
OPTIONS方法用于描述目标资源的通信选项。
TRACE
TRACE方法沿着到目标资源的路径执行一个消息环回测试,主要用于测试或诊断。
PATCH
PATCH方法用于对资源应用部分修改。
HTTP请求消息
请求报文的一般格式为:
HTTP请求
GET /books/defult.asp HTTP/1.1
Host: wahh-app.com
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: __tad=1611557569.4614522
Referer: http://wahh-app.com/books/defult.asp
- 每个HTTP请求的第一行都由三个以空格间隔的项目组成。
第一个说明HTTP方法的动词。最常用的方法为GET,它的主要功能是Web服务器获取一个资源。GET请求并没有消息主体,因此在消息头后的空白行中没有其他数据。
第二个为被请求的URL。URL由被请求的资源名称,以及一个包含客户端向该资源提交的参数的可选查询字符串结成。在URL中,查询字符串以?号标识。
第三个为使用的HTTP版本。因特网上常用的HTTP版本为1.0和1.1,多数浏览器默认使用1.1版本。 - Host消息头用于指定出现在被访问的完整URL中的主机名称。如果几个Web站点以相同的一台服务器为主,就需要使用Host消息头,因为请求第一行中的URL内通常并不包括主机名称。
- User-Agent消息头提供与浏览器或其他生成请求的客户软件有关的信息。请注意,由于历史原因等,大多数浏览器中都包含Mozilla前缀。
- Cookie消息头用于提交服务器向客户发布的其他参数
- Referer消息头用于表示发出请求的原始URL(例如,因为用户单击页面上的一个链接)。请注意,在最初的HTTP规范中,这个消息头存在拼写错误,并且这个错误一直保留了下来。
HTTP响应
HTTP/1.1 200 OK
Date: Mon, 25 Jan 2021 08:10:27 GMT
Server: IBM_HTTP_SERVER/1.3.26.2 Apache/1.3.26 (Unix)
Set-Cookie: tracking=tI8rk7joMx44S2Uu85nSWc
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Content-Type: text/html; charset=ISO-8859-1
Content-Language: en-US
Content-Length: 24246
- 每个HTTP响应的第一行由三个空格间隔的项目组成。
第一个是使用的HTTP版本。
第二个表请求结果的数字状态码。200是最常用的状态码,它表示成功请求提交,正在返回被请求的资源
第三个是一段文本形式的"原因短语",进一步说明响应状态。这个短语中可包含任何值。 - Server消息头中包含一个标题,指明所使用的Web服务器软件。有时还包括其他信息,如所安装的模块和服务器操作系统。其中包含的信息可能并不准确。
- Set-Cookie消息头向浏览器发送另一个cookie,它将在随后向服务器发送的请求中由Cookie消息头返回。
- Pragma消息头指示浏览器不要将响应保存在缓存中。Expires消息头还指出响应内容已经过期,因此不应保存在缓存中。当返回动态内容时常常会发送这些指令,以确保浏览器随时获得最新内容。
- Content-Type消息头表示这个消息主体包含HTML文档。
- Content-Length消息头规定消息主体的字节长度。
其他消息头信息可以参考这位https://www.cnblogs.com/honghong87/articles/6941436.html