在学习HTTP协议的时候,看了一些文章,感觉都很晦涩难懂,尝试图解一下,方便更好的理解记忆。现在先简单记录一篇入门粗浅的博客,更深入的学习,待后续学习跟进再更新。
1、HTTP协议是什么?
HTTP--Hyper Text Transfer Protocol,超文本传输协议,是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。——摘自wiki百科
2、HTTP的历史版本
HTTP/0.9;HTTP/1.0;HTTP/1.1;HTTP/2(当前版本,于2015年5月作为互联网标准正式发布。)仅作了解即可。
3、请求方法
HTTP/1.1协议中共定义了八种方法,其中常用的是GET、POST、PUT、DELETE四种,必须牢记,其余四种现阶段了解即可。
(1)GET:向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
(2)HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
(3)POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
(4)PUT:向指定资源位置上传其最新内容。
(5)DELETE:请求服务器删除Request-URI所标识的资源。
(6)TRACE:回显服务器收到的请求,主要用于测试或诊断。
(7)OPTIONS:这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
(8)CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
4、HTTP的状态码
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。具体的状态吗就不一一罗列出来了,其中2,3,4是常见到的,需牢记在心。
我们可以打开chrome浏览器的开发者工具,点击Network这一项,查看相应的请求和响应的数据(记得点击「view source」,才能看到我们想看的内容),如下图所示:

状态代码的第一个数字代表当前响应的类型:
(1)1xx消息——请求已被服务器接收,继续处理。
(2)2xx成功——请求已成功被服务器接收、理解、并接受。
(3)3xx重定向——需要后续操作才能完成这一请求。
(4)4xx请求错误——请求含有词法错误或者无法被执行。
(5)5xx服务器错误——服务器在处理某个正确请求时发生错误。
5、HTTP的请求格式
(1)第一行:即请求行,包括:请求方法 路径 协议/版本
(2)第二行:即请求头,格式为:Key: value(例如:Content-Type: application/x-www-form-urlencoded等内容)
(3)第三行:回车(空行),表示与第二行隔断,以下为第四行的内容。
(4)第四行:其他消息体,例如:要上传的数据等。
6、HTTP的响应格式
(1)第一行:即响应行,包括协议/版本号 状态码 状态解释
(2)第二行:即响应头,格式为:Key: value(例如:Content-Type: text/html等内容)
(3)第三行:回车(空行),表示与第二行隔断,以下为第四行的内容。
(4)第四行:其他消息体,例如:返回的内容等。
7、curl命令行
curl,全称CommandLine URL 或 CommandLine Uniform Resource Locator,顾名思义,curl命令是在命令行方式下工作,利用URL的语法进行数据的传输或者文件的传输。在我们开发远程服务的时候,比如http传输时,这个工具能非常方便的作为验证工具和测试工具。 常用参数,以 -v选项为例(更加详尽的参数例子,具体用到具体查询,依旧不一一罗列出来,显得太臃肿了。),--verbose,指定该选项后,可以跟踪URL的连接信息。我们可以根据这个选项看看curl是怎么工作的。例如,我们输入:curl -v -- "https://www.baidu.com"。就可以看到这个百度网址是怎么工作的,它返回的信息就会有请求头和响应头的相关信息。如下图所示:

8、结尾碎碎念
今日是寒露,《月令七十二候集解》文中提到:“九月节,露气寒冷,将凝结也。” 此时气温比白露时更低,地面的露水更冷,快要凝结成霜,即为【寒露】。饮食可根据个人的具体情况,适当多食甘、淡滋润的食品。水果有梨、柿、香蕉等;蔬菜有胡萝卜、冬瓜、藕、银耳等及豆类、菌类、海带、紫菜等。寒露节气里最容易诱发呼吸系统、消化系统的疾病。夏秋暑热与秋凉干燥的交替,容易患上季节交换的感冒发热,这些常见病小伙伴们都要注意充分防范。养生的重点是养阴防燥、润肺益胃。同时要避免因剧烈运动、过度劳累等耗散精气津液。中老年人和慢性病患者应多吃些红枣、莲子、山药、鸭、鱼、肉等食品。