HTTP基础|青训营笔记

97 阅读5分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记。 对计算机网络的学习总计如下:

1.URI(Uniform Resource Identifier)

URI分为URL和URN,目前URL是最常用的URI,而URN暂未大规模使用。实际上HTTP应用程序处理的只有URL,也就是说目前URI就是指URL。URL的格式为"方案://服务器位置/路径",分为三部分:

  • URL方案,告知Web客户端怎样访问资源。如http、https等。
  • 服务器的位置,告知Web客户端资源位于何处。如www.baidu.comwww.bilibili.com
  • 资源路径,说明请求的是服务器上哪一个特定的本地资源。如/index.asp、/index.html。

2.事务

2.1 方法

HTTP方法是一条请求命令,每一条HTTP请求报文都包含一个方法。下面是常用的HTTP方法:

  • GET 从服务器向客户端发送命名资源
  • PUT 将来自客户端的数据存储到一个命名的服务器资源中去
  • DELETE 从服务器中删除命名资源
  • POST 将客户端数据发送到一个服务器网关应用程序
  • HEAD 仅发送命名资源响应中的HTTP首部

2.2 状态码

每条HTTP响应报文返回是都会携带一个状态码,由三位数字组成,告知客户端请求是否成功或是否要采取其他动作。下面是常用的状态码:

  • 200 OK。文档正确返回
  • 302 Redirect(重定向)。到其他地方去获取资源
  • 404 Not Found(没找到)。无法找到这个资源

3.报文

HTTP报文分为请求报文和响应报文,均为纯文本,由字符组成。HTTP报文包含三个部分:

  • 起始行 报文的第一行,在请求报文中说明要做什么,在响应报文中说明发生了什么。
  • 首部字段 起始行后面有0个或多个首部字段。每个首部字段都包含一个键值对,用冒号(:)分隔,首部以一个空行结束。
  • 主体 空行之后是报文主体,其中可包含所有MIME类型数据。请求主体中包含要发给Web服务器的数据,响应主体中装载了要返回给客户端的数据

4.连接

HTTP在应用层,TCP在传输层,IP在网络层

4.1 TCP协议

TCP(Transmission Control Protocol)传输控制协议 TCP提供了三点好处:

  • 无差错的数据传输
  • 按序传输(数据总是会按照发送的顺序到达)
  • 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)

4.2 IP协议

IP(Internet Protocol)网际协议 在HTTP客户端向服务器发送报文之前,需要用IP地址和端口号在客户端和服务器之间建立一条TCP/IP连接。 在TCP中,需要知道服务器的IP地址及服务器相关的TCP端口号,HTTP默认端口号为80。 URL中可以使用IP地址或者主机名的形式,使用DNS(Domain Name Service)可以将主机名转换为IP地址

4.3TCP/IP连接的过程

(a)浏览器从URL中解析出服务器的主机名 (b)浏览器将服务器的主机名转换成服务器的IP地址 (c)浏览器将端口号从URL中解析出来(如果有端口号的话) (d)浏览器建立一条与Web服务器的TCP连接 (e)浏览器向服务器发送一条HTTP请求报文 (f)服务器向浏览器发送一条HTTP响应报文 (g)关闭连接,浏览器显示文档

5.Web的结构组件

5.1 代理

代理是位于客户端和服务器之间的HTTP中间实体,能够接收所有客户端的HTTP请求,并将这些请求转发给服务器,出于安全考虑,通常会将代理作为转发Web流量的中间节点。代理还可以对请求和响应进行过滤,以清除一些不必要的内容。

5.2 缓存

Web缓存或代理缓存是一种特殊的HTTP代理服务器,又称作HTTP的仓库,可以将经过代理传送的常用文档复制保存起来。缓存机制使得常用页面的副本可以保存在里客户端更近的地方,客户端从缓存下载文档会比从远程Web服务器下载快得多。

5.3 网关

网关是连接其他应用程序的特殊的Web服务器,通常用于将HTTP流量转换为其他协议。例如,一个HTTP/FTP网关会通过HTTP请求接收对FTP URI的请求,但通过FTP协议来获取文档。得到的文档会被封装成一条HTTP报文发送给客户端。

5.4 隧道

隧道是建立起之后,就会在两条连接之间对原始数据进行盲转发的HTTP应用程序,通过用来在一条或多条HTTP连接上转发非HTTP数据,转发时不会窥探数据。

5.5 用户Agent代理

用户Agent代理是代表用户发起HTTP请求的客户端程序,所有发布Web请求的应用程序都是HTTP Agent代理,如Web浏览器、游戏客户端和爬虫等。

总结:是网络编程的重要部分,了解其本身对更好的使用有很大的帮助。