first step
浏览器要做的第一步工作就是对 URL 进行解析,从而生成发送给 Web 服务器的请求消息。 http表示协议, URL中服务器名字后面跟的是访问的文件路径 入下图所示
如果省略了文件名,所以结果就是访问 /index.html 或者 /default.htm 这样的文件了。 因为/ 代表根目录,根目录是没有名字;比如dir/ 就是有名字的目录,它不是根目录; 如果URL中路径连/都没有,可能web server还是会返回默认的default.htm
有一个特殊的情况,如果dir是目录名,但是你在url中访问的时候,是这样: http://webserver/dir 那么, 如果 Web 服务器上存在名为 dir 的文件,则将 whatisthis 作为文件名来处 理;如果存在名为 dir 的目录,则将 dir 作为目录名来处理;但是不管是在windows 还是linux中,都不存在同名的文件或者文件夹;
second step
URL = 协议+ URI
下面是http 方法的汇总 其中最常用的方法是get和post get: 需要获取 /dir1/file1.html 文件中的数据,当 Web 服务器收到消息后,会 打开 /dir1/file1.html 文件并读取出里面的数据,然后将读出的数据存放到 响应消息中,
如果响应的内容(例如一个大文件的内容)超出了服务器或客户端的处理能力或配置的最大响应体大小,服务器可能会根据配置返回 413 Payload Too Large 错误,或者直接中断连接。如果客户端在请求时没有合适的接收能力,可能也会导致超时或连接丢失等问题。
post: 在表单中填写数据并将其 发送给 Web 服务器
发送请求的payload 格式如下
由于每条请求消息中只能写 1 个 URI,所以每次只能获取 1 个文件, 如果需要获取多个文件,必须对每个文件单独发送 1 条请求。
下面是对get请求解析
这是一个请求头
DNS 工作原理
在URL中我们使用域名,但是这个并不能被识别。 要自顶向下,依次轮训找到对应的server的 IP 使用IP进行通信考虑到通信的便捷,如果都使用域名,长度不同,增加路由器的负担,还不如都固定4byte进行通信
IP包含网络号+ 主机号,使用mask表示网络号的长度
有两个特殊表示方法
关于DNS解析,本质上还是server + client
解析器实际上是一段程序,它包含在操作系统的 Socket 库中,解析器就是这个库中 的其中一种程序组件,解析器会取出 IP 地址,并将其写入浏览器指定的内存地址中。
浏览器在向 Web 服务器发送消息时,只要从该内存地址取出 IP 地 址,并将它与 HTTP 请求消息一起交给操作系统就可以了。
浏览器)调用解析器时, 程序的控制流程就会转移到解析器的内部-》 进入内核态
根据URL查询DNS服务器
- 上一级DNS服务器 IP会记录到下一集DNS服务器记录
- 根域的 DNS 服务器信息保 存在互联网中所有的 DNS 服务器中
- 分配给根域 DNS 服务器 的 IP 地址在全世界仅有 13 个
DNS解析过程
browser充当client 向顶级DNS发送请求
如果要查询 www.lab.glasscom.com 这个域名对应的 IP 地址,客 户端会向 DNS 服务器发送包含以下信息的查询消息。 (a)域名 = www.lab.glasscom.com (b)Class = IN (c)记录类型 = A
假设在DNS服务器,记录内容如下,那么,第一条记录就满足条件
他会返回给client
首先,客户端在创建套接字时,协议栈会为这个套接 字随便分配一个端口号 当协议栈执行连接操作时,会将这个随 便分配的端口号通知给服务器。