HTTP 简易理解
网络中,有一台计算机 A。A 存储着一个超文本文件 name.html 。
网络中,另一台计算机 B。B 想获取 A 的 name.html 有什么办法呢?
- FTP 文件传输协议
- SCP 基于 SSH 的远程文件传输协议
- SMTP 电子邮件
很明显,这些方法可行。但是异常繁琐。有的需要各种认证,有的反应迟缓。
因此为了方便的分享 html 文件,HTTP 协议诞生了。
与 FTP,SCP 不同的是,HTTP 不需要任何权限验证。可以仅仅通过一次 HTTP 请求即可获取目的文件。
最早 HTTP 的诞生就是欧洲核子研究组织为了分享知识所提出的设想。
最初设想的基本的理念是:
- 通过多个文档的相互关联形成超文本(HyperText)
- 作为超文本传输协议的 HTTP
- 指定文档所在地址的 URL
而 WWW 这一名称,是当年用来浏览超文本的客户端应用程序的名字。
URI(统一资源标识符)
URI 就是在「一定规则」下,把一个资源「独一无二的标识」出来。
- 若是把人比作资源,身份证号就是人的 URI 。
- 但名字不是,因为它会重复。
寻找人类协议://地球/中国/四川/成都/某大学/某宿舍楼/2楼/203寝室/4号床/张三
也是一个 URI 。因为它独一无二的标识了「资源」。
而且它使用的规则是 人类住址协议
。
URL(统一资源定位符)
URL 与 URI 类似,只是 URL 将在「一定规则」下,把一个资源的「位置」独一无二的标识出来。
因为一个资源只有一个位置,所以 URL 同时也将一个资源「独一无二的标识了」出来。
-
寻找人类协议://地球/中国/四川/成都/某大学/某宿舍楼/2楼/203寝室/4号床/张三
同时是 URI 和 URL。 - 因为它同时符合了 URI 与 URL 的要求。
网址与 URL
网址就是一种 URL,因为它根据 「域名规则」将一个网络资源的「位置」独一无二的标识了出来。
一个示例网址:http://www.baidu.com/1.txt
它的含义为:文本传输协议://商业区域.百度商业公司.WWW服务器中的1.txt 这个文件
对应关系如下:
- http :文本传输协议
- com :商业区域
- baidu :百度商业公司
- www :www服务器
- 1.txt :文件名
可以看出定位百度的地址 商业区域.百度商业公司.www服务器
在网址中是从小区域到大区域书写的。这只是西方文化的习惯,没有理由。
【注意】因为 「 URI,URL,网址 」它们的定义相近,因此大多情况可以混用。
HTTP 请求与响应
对于 HTTP 而言,获取目标文件的唯一方法是发送一个请求,这个请求被称为请求报文,有如下格式:
- 请求行:请求方法,URL,HTTP 协议版本
- 请求头:一些信息,如当前时间
- 请求体:使用 GET 方法时,没有请求体
在收到 HTTP 请求报文后,服务器会发送一个 HTTP 响应报文:
- 响应行:HTTP 协议版本,状态码,原因短语
- 响应头:一些信息,如当前时间
- 响应体:请求报文中所指定的 html 文档文件
客户端给服务器传输信息
有些时候,我们不仅只是想要从服务器获取文件。我们还要发送给服务器一些信息。
GET 方法
假设需要给百度服务器传输:a=1 b=2 c=3
这样的信息。需要把请求报文便需要修改为以下格式:
- 请求行:GET
baidu.com/?a=1&b=2&c=3
协议版本 - 请求头:无影响,和不上传信息时一样
- 请求体:GET 方法,无请求体
可以看出 GET 方法给服务器传输信息时,只需要在 url 后面添加一个 ?
就可以将信息填入了。
其中每个信息之间必须由 &
隔开。
POST 方法
当需要上传大量的信息,不是简单的 a=1 b=2 c=3
这样的信息时。便需要使用 POST 方法。它的格式为:
- 请求行:POST
baidu.com
协议版本 - 请求头:含有所上传文件的描述信息
- 请求体:包含所上传的文件。
或者按 a=1&b=2&c=3
这样的格式在请求体中,来上传简单的信息。
PUT 方法
PUT 如同 FTP 用来上传文件,要求请求体含有文件内容,然后保存到请求 URL 指定的位置。
- 请求行:PUT
/1.txt
协议版本 - 请求头:上传文件的描述信息
- 请求体:所上传的文件
PUT 请求报文示例:
PUT /new.html HTTP/1.1
Host: example.com
Content-type: text/html
Content-length: 16
<p>New File</p>
成功响应有两种方法:
- 201:服务器没有此文件,成功新建并保存
- 200 或 204:服务器已有此文件,成功更新
参考
- 如有雷同,是我抄袭