HTTP读书笔记
Web及网络基础
浏览器根据URL从Web服务器端获取文件资源等信息,从而显示出Web页面。
Web使用HTTP超文本传输协议作为规范,完成从客户端到服务器端等一系列运行流程。
WWW这一名称,是Web浏览器当年用来浏览超文本的客户端应用程序时的名称,现在则用来表示这一系列的集合,也可以简称为Web。
HTTP于1990年问世,此时的HTTP并没有作为正式的标准被建立,被称为HTTP/0.9;HTTP在1996年5月正式作为标准公布,版本命名为HTTP/1.0;1997年1月公布的HTTP/1.1是目前主流的HTTP协议版本。
通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的,而HTTP属于其内部的一个子集。
TCP/IP协议族
TCP/IP协议族按层次划分为以下四层:
- 应用层:决定了向用户提供应用服务时通信的活动。协议包括FTP、DNS、HTTP。
- 传输层:提供处于网络连接中的两台计算机之间的数据传输。协议包括:TCP、UDP。
- 网络层(网络互连层):处理在网络上流动的数据包,该层规定了通过怎样的传输路线到达对方计算机,并把数据包传送给对方。
- 链路层(数据链路层/网络接口层):处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动、网卡,及光纤等物理可见部分。
利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信,发送端从应用层往下走,接收端则往应用层上走。
HTTP通信流程:
- 作为发送端的客户端在应用层(HTTP协议)发出一共想看某个Web页面的HTTP请求。
- 在传输层(TCP协议)把从应用层收到的数据(HTTP请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。
- 在网络层(IP协议),增加作为通信目的地的MAC地址后转发给链路层。
- 接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。
IP协议
IP(Internet Protocol)网际协议位于网络层,作用是把各种数据包传送给对方。要确保数据包正确传送,需要两个正确条件:IP地址和MAC地址。
IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址配对,IP地址可变换,但MAC地址基本上不会变更。
IP间的通信依赖MAC地址,通信双方在同一局域网(LAN)的情况很少见,通常是经过多台计算机和网络设备中转才能连接到对方。在进行中转时,会利用下一站中转设备的MAC地址搜索中转目标,此时会采用ARP协议(Address Resolution Protocol),根据通信方的IP地址可以反查出对应的MAC地址。
TCP协议
TCP位于传输层,提供可靠的字节流服务。字节流服务是指,为了方便传输将大块数据分割成以报文段为单位的数据包进行管理。
为了确保数据准确到达目标,TCP采用三次握手策略。握手过程中使用了TCP的标志,SYN和ACK。
- 发送端发送一个带SYN标志的数据包给对方。
- 接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。
- 发送端再回传一个带ACK标志的数据包,代表握手结束。
DNS服务
DNS(Domain Name System)服务是和HTTP一样位于应用层的协议,提供域名到IP地址之间的解析服务。
用户通常使用主机名或域名(如https://www.nowcoder.com/)来访问对方的计算机,而不是直接通过IP地址访问,用字母和数字配合的表示形式来指定计算机名更符合人类的记忆习惯。但计算机很难理解名称,为解决该问题,DNS服务应运而生。
URI和URL
URL(Uniform Resource Location)统一资源定位符,是使用Web浏览器等访问Web页面时需要输入的网页地址。
URI(Uniform Resource Identifier)统一资源标识符,是由某个协议方案标识的资源的定位标识符,协议方案是指访问资源所使用的协议类型名称,例如使用HTTP时协议方案就是http。
URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置),可见URL是URI的子集。
表示指定的URI,要是有涵盖全部必要信息的绝对URI,绝对URL和相对URL。
相对URL,是指从浏览器中基本URI处指定的URL,例如/image/logo.jpg
。
绝对URI,例:http://user:[email protected]:80/dir/index.htm?uid=1#ch=1
。
http
:协议方案名。user:pass
:从服务器端获取资源时的登录信息,是可选项。www.example.jp
:服务器地址,使用绝对URI必须指定服务器地址,地址可以是这种DNS可解析的名称,或192.168.1.1这种IPv4地址,还可以是[0:0:0:0:0:0:0:1]这种用方括号括起来的IPv6地址。80
:服务器连接的网络端口号,可选项。dir/index.htm
:指定服务器上的文件路径来定位特指的资源,与UNIX系统的文件目录结构类似。uid=1
:查询字符串,针对文件路径内的资源可以使用查询字符串传入参数,是可选项。ch=1
:片段标识符,可标记出已获取资源中的子资源,是可选项。
HTTP基础
请求报文和响应报文
HTTP协议用于客户端和服务器之间的通信,请求访问文本或图形等资源的一端被称为客户端,提供资源响应的一端被称为服务器端。
HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回,服务器端在没有收到请求前不会发送响应。
例:客户端发送给某个HTTP服务器的请求报文。
GET /index.htm HTTP/1.1
Host: hackr.jp
起始行的GET表示请求访问服务器的类型,称为方法。随后的字符串 /index.htm
指明了请求访问的资源对象,也叫做请求URI。HTTP/1.1
说明了HTTP的版本号。
请求报文由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成。
例:接收到请求的服务器将请求内容的处理结果以响应报文的形式返回。
HTTP/1.1 200 OK
Date: Tue,10 Jul 2020 06:50:12 GMT
Content-Length:352
Content-Type:text/html
<html>
...
起始行的HTTP/1.1
表示服务器的HTTP版本,200和OK表示请求的处理结果对应的状态码和原因短语。下一行显示了创建响应的日期时间等首部字段的属性。接着以一空行分割,之后的内容被称为资源实体。
响应报文由协议版本、状态码