《HTTP权威指南》 第1-2章 HTTP和URL基础
HTTP请求基础
格式化数据块称为HTTP报文
请求报文
:从客户端发往服务器的HTTP报文,只有请求起始行
+请求首部
,没有请求主体
响应报文
:从服务器发往客户端的报文,包含响应起始行
+响应首部
+响应主体
HTTP报文通过传输控制协议(TCP)
连接:
- 无差错的数据传输
- 按序传输
- 未分段的数据流
HTTP事务
=请求命令(HTTP方法)+响应结果
从输入URL到浏览器显示全过程
简单描述:通过URL获取目标IP地址+TCP端口号 >> 建立TCP/IP连接 >> 传输HTTP报文
URL举例:(HTPP端口默认80,HTTPS端口默认443)
index.html
表示web服务器的资源,资源名称为统一资源标识符(URI)
浏览器处理请求图解:
- 输入URL
- 浏览器从URL
解析服务器主机名
IP解析
:通过DNS服务获取服务器主机名对应的IP地址- 从URL
解析端口号
- 与IP对应的端口
建立TCP连接
- 浏览器发送一条HTTP请求报文
- 服务器向浏览器回送一条HTTP响应报文
- 关闭连接,浏览器显示页面
URL语法、URL组件及含义
URL结构:方案://服务器位置/路径
用怎样的方案请求哪个地方的什么资源,简称(我瞎定义的):How
- Where
- What
URL语法通用格式:<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
(由多个组件段组成)
-
<scheme>
:方案名(协议)不区分大小写,也就是说HTTP://...
=http://...
。 -
<user>:<password>
:FTP协议需要用户名和密码,比如:ftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnu
(如没有提供,浏览器会给一个默认值) -
<host>:<port>
:主机和端口号 -
/
将URL划分为一些路经段(<path>;<params>
),path和params为一组,用;
隔开。比如:http://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true
-
<query>
为查询组件,用&
连接多个键值对。
-
<frag>
为片段组件,前面跟一个#
URL快捷方式
相对URL
URL有两种方式:绝对的
和相对的
。
解析相对URL的第一步:分解URL
,即:将相对URL和基础URL划分成组件段。
将相对URL转换成绝对URL如图:缺啥补啥
(相对URL中缺的组件就用基础URL中的组件段补上)
自动扩展URL
浏览器主动进行主机名扩展
(匹配自动补齐)、历史访问扩展
(匹配URL前缀)
URL编码和字符规则
基于适配各种不同的协议
+ 供人类阅读
+ URL完整
的需求,引入了转义机制,将不安全字符编码为安全字符再进行传输。
用US-ASCII字符集集成转义序列对数据进行编码,实现可移植性和完整性。
%
后跟着两个表示字符ASCII码
的16进制数,举例:
保留字符:
URL方案