HTTP简述

http1.png

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

————维基百科

为什么要了解HTTP呢
因为 HTTP 是 web 的核心,也是动态 web 应用的核心。理解 HTTP 是理解现代 web 应用如何工作和如何构建的核心。在今后,无论我们是编写 Web 应用,还是进行接口测试等互联网相关的工作,都必须要掌握的基础。

由于仅仅是做相关的简述,至于更多深层次的理论知识,可以参考结果所提供的相关资料进一步了解。


HTTP – 注解


HTTP 是英文:HyperText Transfer Protocol 的缩写,中文释义:超文本传输协议。

更多的解释也可自行谷歌或者百度。


HTTP – 随处可见


在如今这样一个互联网的世界,其实我们每一个人,只要你上网,其实 HTTP 就存在。只是你并没有注意到它而已。此处,我们举一个典型的例子:使用浏览器访问网站。

当你在浏览器地址栏输入 URL 时,请注意网址的开头,通常就是已 http 开头的。为了更容易理解,我们简单的描述一下我们上网的过程:

一个网站的基本构成是由各式各样的文件组成的——诸如CSS,HTML,Javascript,视频文件,图片文件等等 。这些文件被有组织的存放在互联网上的某一台主机(你可以简单粗暴的理解为电脑)上,这个主机有着自己独特的标签(就好比门牌号码一样贴在这台电脑上)来与互联网上其他的计算机设备进行区分。浏览器就是我们与这台电脑进行交流的媒介。
现在,我们在浏览器中输入网址访问到这个网址的内容,就好比:我们告诉浏览器说我们要看一下这个网址的内容,于是浏览器就通过互联网找到了这个网址所对应的主机,然后向主机索要内容(这个过程是请求),主机收到浏览器的请求后,根据浏览器的请求,将存放的诸如CSS,HTML,Javascript,视频文件,图片文件等等组织好后,将这些内容以网页的形式返给浏览器(这个过程是响应),最终浏览器把这些内容呈现给了我们。

那么在这个过程中有一个问题:
浏览器拿到网址后,他是如何知道该怎么与服务端主机进行沟通交流的呢?

就好比人与人之间交流使用的是语言一样,他们之间请求和响应的交流,便是通过“HTTP”。至此,相信大家已经简单的明白了什么是“HTTP”:HTTP 是规定了互联网上机器之间彼此交流和沟通的协议。它遵循一个简单的模式:从客户端(使用浏览器访问的这一方)发送一个请求到服务端,服务端进行响应。

因此有人也简单的定义http为:请求< – >响应 协议。

  • 请求:对应英文–> request
  • 响应:对应英文–> response

HTTP – Request


http 协议规定了基本请求的内容格式,应当包含:

  • 请求行 –> 对应英文:request line
  • 请求头 –> 对应英文:request header
  • 空行
  • 请求数据 –> 对应英文:body
http2.png

请求行

请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。
格式如下:Method Request-URI HTTP-Version CRLF
其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

请求方法,常用的几个典型有:

  • GET:向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
  • POST:向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
  • PUT:向指定资源位置上传其最新内容。
  • DELETE:请求服务器删除Request-URI所标识的资源

请求头

请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息。
例如Accept-Language: en。常用的请求报头:

  • Accept-Charset 请求报头域用于指定客户端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。
  • Accept-Language 请求报头域类似于Accept,但是它是用于指定一种自然语言。eg:Accept-Language:zh-cn.如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。
  • Accept-Encoding 请求报头域类似于Accept,但是它是用于指定可接受的内容编码。eg:Accept-Encoding:gzip.deflate.如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。

空行

空行是用于分割请求数据的行,且是必须的。
即使第四部分的请求数据是空的,也必须有空行分割。

请求数据

请求数据也叫主体,可以添加其他的任意数据。


HTTP – Response


http 协议规定了基本响应的内容格式,应当包含:

  • 状态行
  • 消息报头
  • 空行
  • 响应正文
http3.png

状态行

由HTTP协议版本号, 状态码, 状态消息 三部分组成。
例如:HTTP/1.1 200 OK

有关状态码——
由三位数字组成,第一个数字定义了响应的类别,共分五种类别:

  • 1xx:指示信息–表示请求已接收,继续处理

  • 2xx:成功–表示请求已被成功接收、理解、接受

  • 3xx:重定向–要完成请求必须进行更进一步的操作

  • 4xx:客户端错误–请求有语法错误或请求无法实现

  • 5xx:服务器端错误–服务器未能实现合法的请求

常见的诸如:

1
2
3
4
200 OK //客户端请求成功
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误

消息报头

消息报头,用来说明客户端要使用的一些附加信息。
通常有:
Date:生成响应的日期和时间;
Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8。

空行

用于区分正文部分,且是必须的。表示该空行之后的内容均为正文内容。

响应正文

空行后面的html部分为响应正文。也可以是单独的图片或者视频文件等。


结语


以上就是HTTP的基本内容,至于更多更深的东西,可以参考其他文献资料,本文并不做过多的解释和说明。
但是 HTTP 是整个互联网的核心,所以我个人认为从 HTTP 开始,去学习 web 开发是一个良好的起点。理解 HTTP 中所包含的 GET,POST,会话(Session),cookies 以及HTTP的“无状态”是什么意思更是必不可少的。只有理解 HTTP 的基础,我们才能了解构建一个 web 应用时,其背后究竟发生了什么以及是如何工作的。
其中有些东西诸如会话和Cookie等这里没有提及,在以后的文章中我们再行赘述。


参考资料


HTTP 百度百科
HTTP 维基百科
HTTP 下午茶

0%