HTTP 协议几乎是每个人上网用的第一个协议。比如看新闻我们会登录 http://www.163.com
当把 URL 输入到浏览器框里,按下回车
http://www.163.com 是个 URL,叫作统一资源定位符。之所以叫统一,是因为它是有格式的。其中 HTTP 称为协议,www.163.com 是一个域名,表示互联网上的一个位置。由的 URL 会有更详细的位置标识,例如 http://www.163.com/index.html 。正是因为这个东西是统一的,所以当你把这样一个字符串输入到浏览器的框里时,浏览器才知道如何进行统一处理。
HTTP 请求的准备
浏览器会将 www.163.com 这个域名发送给 DNS 服务器,让它解析为 IP 地址。那接下来是发送 HTTP 请求吗?不是,HTTP是基于 TCP 协议的,要先建立 TCP 连接,怎么建立呢?
在目前常使用的 HTTP1.1 中,默认开启了 Keep-Alive 的,这样建立的 TCP 连接,就可以在多次请求中复用。
HTTP 请求的构建
建立了连接以后,浏览器就要发送 HTTP 的请求。请求的格式如下:
HTTP 的报文大概分为三大部分,第一部分是请求行,第二部分是请求的首部,第三部分才是请求的正文实体。
第一部分:请求行
在请求行中,URL 就是 http://www.163.com , 版本为 HTTP1.1。方法有几种类型:
对于访问网页,最常用的类型是 GET。顾名思义,GET 就是去服务器获取一些资源。对于访问网页来说,要获取的资源往往是一个页面。其实也有很多其他的格式,比如说返回一个 JSON 字符串,到底要返回什么,是由服务器端的实现决定的。
例如,在云计算中,如果服务器端要提供一个基于 HTTP 协议的 API,获取所有云主机列表,这就会使用 GET 方法获得,返回的可能是一个人 JSON 字符串。字符串里面是一个列表,列表里面是一项的云主机信息。
另外一种类型叫作 POST。它需要主动告诉服务端一些信息,而非获取。要告诉服务端什么呢?一般会放在正文里。正文可以由各种各样的格式。常见的格式也是 JSON。
再如,在云计算里,如果我们的服务端,要提供一个基于 HTTP 协议的创建云主机的 API,也会用到 POST 方法ÿ