本文是在学习美团tutor给出的资料 — 《HTTP权威指南》时记录的笔记
第一章 HTTP概述
在HTTP报文中,通过
Content-type
字段存储了MIME类型,表示每一个HTTP对象的数据类型表示方法是:主要对象类型 + 特定的子类型,如
image/jpeg
,text/html
,video/quicktime
HTTP报文包括三个部分
- 起始行
- 首部字段
- 主体
第二章 URL与资源
URL是浏览器寻找信息时所需的资源位置。当浏览器指向一个URL时,后台就会发送适当的协议豹纹来获取人们所期望的资源。
URL最重要的三个组件:
方案 scheme
告知Web客户端怎样访问资源
服务器的位置,如
www.google.com
资源路径,如
/seasonal/index-fall.html
说明了请求的事服务器上哪个特定的本地资源
URL组件
大多数URL方案的URL语法都建立在由九个部分构成的通用格式上: <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
下面依次介绍这些组件
方案
规定如何访问指定资源的主要标识符
方案组件必须以一个字母符号开始,由第一个“:”将其与URL其余部分分隔开来。方案名是大小写无关的。
主机与端口
要想在网上找到资源,应用程序药知道是哪台机器装载了资源,以及在那台机器的什么地方可以找到能对目标资源进行访问的服务器。主机和端口组件提供了这两组信息。
前者标识了能够访问资源的宿主机器。可以用主机名”www.google.com",或者IP地址来表示主机名。
端口组件标识了服务器正在监听的网络端口,对于下层使用了TCP协议的HTTP来说,默认端口号为80
用户名和密码
很多服务器都要求输入用户名和密码才会允许用户访问数据,下面给出两个例子:
ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
http://joe:joespasswd@www.joes-hardware.com/sales_info.txt
如果用户自己没有指定用户名和密码,那么
路径
URL的路径组件说明了资源位于服务器的什么地方,它通常很像一个分级的文件系统路径
使用/
来对路径进行分级,每一级都可以有自己的参数
参数
负责解析URL的应用程序需要协议参数来访问资源。否则另一端的服务器可能就不会为请求提供服务,或者更糟糕的是,提供错误的服务。比如,像FTP这样有两种传输模式(二进制形式和文本形式),参数可以用来确定当前工作的事哪种模式。
参数由字符”;”将其与URL的其余部分分隔开来。如ftp://prep.ai.mit.edu/pub/gnu;type=d
其中参数即为type,值为d
查询字符串
使用?
将其与前面的URL进行分隔,可以认为查询字符串由多条键值对构成,每个键值对由&
分隔
片段
对于某些资源类型,如HTML,除了资源级之外,还可以做进一步的划分。如一个带有章节的大型文本文档,资源的URL会指向整个文本文档,但理想的情况是,能够指定资源中的那些章节。
为了引用部分资源或资源的一个片段,URL支持使用片段组件来表示一个资源内部的片段。
片段使用#
将其与前面的URL分隔起来。在chrome中对指定元素右键,然后点“检查”,将对应元素的id添加到片段位置即可
URL字符集
原本URL使用ASCII字符集,仅能表示英文以及有限的特殊符号,通过加入转义机制,即可表示所有的字符,同时避免了某些不安全字符如空格、%、或者~
第三章 HTTP报文
3.1 报文的组成部分
由三个部分组成:起始行、首部块、主体
HTTP报文的每行都由两个字符组成的行终止序列作为结束,其中包括一个回车符\r和一个换行符\n,该行终止序列可以写做CRLF
3.2 报文的语法
所有的HTTP报文都可以分为两类:request message & response message
请求报文的格式
1 | <method> <request-URL> <version> |
响应报文的格式
1 | <version> <status> <reason-phrase> |
一组HTTP收不总是应该以一个空行结束,甚至及时没有收不和实体的主体部分也应该是这样。
3.2.1 起始行
请求行
包含了一个方法、一个请求URL、HTTP的版本,上面三个字短使用空格分隔
响应行
包含了HTTP版本、数字状态码、原因短语
方法
GET, HEAD, POST, PUT, TRACE, OPTIONS, DELETE
状态码