1、HTTP(Hypertext Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案,HTTP是应用层协议,无需关心网络通信的细节,细节交给了传输层协议TCP/IP,HTTP协议位于TCP的上层,HTTP使用TCP来传输其报文数据
2、在客户端向服务器发送报文前,需要用网际协议(Internet Protocol, IP)地址和端口号在客户端和服务器之间建立一条TCP/IP连接,所以需要知道服务器的IP地址及在服务器上运行的特定软件相关的TCP端口号。所以这里延伸出一个问题:浏览器中输入URL后发生了什么?
(1)浏览器冲URL中解析出服务器的主机名(2)浏览器将主机名通过DNS解析转换成服务器的IP地址(3)浏览器将端口号(如果有的话)从URL中解析出来(4)浏览器建立一条与服务器的TCP连接(5)浏览器向服务器发送一条请求报文(6)服务器向浏览器回送一条响应报文(7)关闭连接,浏览器显示文档
3、几个概念:
(1)资源:web服务器是web资源的宿主。资源可以是静态资源或动态资源。静态资源比如文本文件、html文件、图片、视频等,动态资源比如一些可以根据需要生成内容的软件程序
媒体类型(MIME):web服务器会为所有HTTP对象数据附加一个MIME类型,浏览器会对不同的MIME类型数据进行相应的处理,比如对于text/html类型会调用html解析器进行解析、通过计算机声卡播放音频文件等
URI(Uniform Resource Identifier,统一资源标识符):有两种形式(URL和URN),URL(统一资源定位符)是最常见的形式,它描述了如何从一个精确、固定的位置获取资源,URL包括三个部分:方案(scheme)、服务器的因特网地址、服务器的某个资源,URN(统一资源名),是作为特定内容的唯一名称使用的,与资源地址无关,用的不多不赘述
(2)事务:一条HTTP事务由一条请求命令和一个响应结果组成。这种通信时通过名为HTTP报文的格式化数据块进行的。
方法(HTTP方法):每条HTTP请求报文都包含一个方法,这个方法会告诉服务器要执行什么动作,常见的HTTP方法:GET、PUT、DELETE、POST、HEAD
状态码:每条HTTP响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端是否请求成功,或者是否需要采取其他动作
(3)报文:HTTP报文都是纯文本,不是二进制代码,包含三个部分:起始行(在请求报文中用来说明做些什么,在响应报文中说明出现了什么情况)、首部字段(每个首部字段都包含一个名字和一个值,用冒号分隔)、主体(可选,请求主体包括发送给服务器的数据,响应主体包括返回给客户端的数据,主体可以包含任何二进制数据,比如图片、视频、音轨、软件程序)
(4)代理:代理位于客户端和服务器之间,接收客户端的HTTP请求,并转发给服务器(可能会对请求进行修改之后转发)
(5)缓存:web缓存或代理缓存是一种特殊的HTTP代理服务器,客户端从附近的缓存下载文档会比远程web服务器下载快得多
(6)网关:网关(gateway)是一种特殊的服务器,通常用于将HTTP流量转换成其他协议
(7)隧道:隧道是在建立起来之后,会在两条连接(HTTP连接和SSL连接)之间对原始数据进行盲转发的HTTP应用程序,常见用途是通过HTTP连接承载加密的安全套接字层(SSL,Secure Sockets Layer)流量,这样SSL流量就可以穿过只允许web流量通过的防火墙了
(8)Agent代理:是代表用户发起的HTTP请求的客户端程序,类型:浏览器、网络蜘蛛、web机器人等