网络通信之生成HTTP消息

简介: URL是个啥?浏览器解析URL省略文件名的情况HTTP 的基本思路生成 HTTP 请求消息发送请求后会收到响应


虚度一生,无所作为,不如永不出生 —— 拿破仑

简明扼要

  1. URL:Uniform Resource Locator,统一资源定位符
  2. 浏览器是一个具备多种客户端功能综合性客户端软件
  3. 浏览器的第一步工作就是对 URL 进行解析
  4. 请求消息中包含的内容是对什么进行怎样的操作两个部分
  5. 消息头按照用途可分为四大类
    1. 通用头:适用于请求和响应的头字段
    2. 请求头:用于表示请求消息的附加信息的头字段
    3. 响应头:用于表示响应消息的附加信息的头字段
    4. 实体头:用于消息体的附加信息的头字段
  6. 状态码的第一位数字表示状态类型,第二、三位数字表示具体的情况
  7. 1 条请求消息中只能写 1 个 URI。如果需要获取多个文件,必须对每个文件单独发送 1 条请求。

文章概要

  1. URL是个啥?
  2. 浏览器解析URL
  3. 省略文件名的情况
  4. HTTP 的基本思路
  5. 生成 HTTP 请求消息
  6. 发送请求后会收到响应

1. URL是个啥?

URL:Uniform Resource Locator,统一资源定位符,是互联网上标准资源的地址。

而互联网上的每个文件都有唯一的一个的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

基本URL包含:模式(或称协议)、服务器名称(或IP地址/网址)、路径和文件名。

协议部分则以“//”为分隔符,如“协议://授权/路径?查询”。

其一般语法格式为:protocol :// hostname[:port] / path / [;parameters][?query]#fragmen

之所以有各种各样的 URL,是因为尽管我们通常是使用浏览器来访问 Web 服务器的,但实际上浏览器并不只有这一个功能。

浏览器是一个具备多种客户端功能综合性客户端软件

URL 开头的文字,即“http:”“ftp:”“file:”“mailto:”这部分文字都表示浏览器应当使用的访问方法


2. 浏览器解析URL

浏览器要做的第一步工作就是对 URL 进行解析,从而生成发送给 Web 服务器的请求消息。

看拆分结果,其中包含 Web 服务器名称 www.lab.glasscom.com,以及文件的路径名 /dir1/file1.html

因此,我们得知,URL 表示要访问 www.lab.glasscom.com 这个 Web 服务器上路径名为 /dir/file1.html 的文件,也就是位于 /dir/ 目录 D 下的 file1.html 这个文件。


3. 省略文件名的情况

有时候我们也会见到一些不太一样的 URL,例如这个 URL 是以“/”来结尾的。

http://www.wl.com/dir/
复制代码

以“/”结尾代表 /dir/ 后面本来应该有的文件名被省略了。根据 URL 的规则,文件名可以像前面这样省略。

在服务器上事先设置好文件名省略时要访问的默认文件名。大多数情况下是 index.html 或者 default.html 之类的文件名。

还有一些 URL 是像下面这样只有 Web 服务器的域名

http://www.wl.com/
复制代码

它表示访问一个名叫“/”的目录。而且,由于省略了文件名,所以结果就是访问 /index.html 或者/default.html 这样的文件了。

浏览器的第一步工作就是对 URL 进行解析


4. HTTP 的基本思路

HTTP 协议定义了客户端和服务器之间交互的消息内容和步骤

客户端向服务器发送请求消息

请求消息中包含的内容是对什么进行怎样的操作两个部分

1. 对什么 (URI)

其中相当于“对什么”的部分称为 URI。一般来说,URI 的内容是一个存放网页 数据的文件名或者是一个 CGI 程序的文件名,例如/dir1/file1.html/dir1/program1.cgi等。

换句话说就是,这里可以写各种访问目标,而这些访问目标统称为 URI

URI:Uniform Resource Identifier,统一资源标识符

2. 进行怎样的操作 (方法)

把“进行怎样的操作”的部分称为方法。方法表示需要让 Web 服务器完成怎样的工作,其中典型的例子包括读取 URI 表示的数据、将客户端输入的数据发送给 URI 表示的程序等。


5. 生成HTTP请求消息

对 URL 进行解析之后,浏览器确定了 Web 服务器和文件名,接下来就是根据这些信息来生成 HTTP 请求消息了。

1. 请求行

请求消息的第一行称为请求行。

这里的重点是最开头方法,方法可以告诉 Web 服务器它应该进行怎样的操作。

方法有很多种,我们必须先判断应该选用其中的哪一种。解决这个问题的关键在于浏览器的工作状态

浏览器向 Web 服务器发送请求消息的场景。

  • 在浏览器顶部的地址栏中输入网址(Get状态
  • 点击网页中的超级链接(Get状态
  • 表单中填写信息后点击“提交”按钮(Post/Get状态
  • .....

写好方法之后,加一个空格,然后写 URI

URI 部分的格式如下,一般是文件和程序的路径名

/< 目录名 >/…/< 文件名 >

路径名一般来说已经包含在 URL 中了,因此只要从 URL 中提取出来原封不动地写上去就好了。

第一行的末尾需要写上 HTTP 的版本号,这是为了表示该消息是基于哪个版本的 HTTP 规格编写的。到此为止,第一行就结束了

2. 消息头

有些情况下还需要一些额外的详细信息,而消息头的功能就是用来存放这些信息的。

消息头按照用途可分为四大类

1. 通用头:适用于请求和响应的头字段

2. 请求头:用于表示请求消息的附加信息的头字段

3. 响应头:用于表示响应消息的附加信息的头字段

4. 实体头:用于消息体的附加信息的头字段

3. 消息体

写完消息头之后,还需要添加一个完全没有内容的空行,然后写上需要发送的数据。这一部分称为消息体,也就是消息的主体。


6. 发送请求后会收到响应

在响应消息中,第一行的内容为状态码响应短语,用来表示请求的 执行结果是成功还是出错。

状态码是一个数字,它主要用来向程序告知执行的结果。

响应短语则是一段文字,用来向人们告知执行的结果。

状态码的第一位数字表示状态类型,第二、三位数字表示具体的情况

1 条请求消息中只能写 1 个 URI。如果需要获取多个文件,必须对每个文件单独发送 1 条请求。

返回响应消息之后,浏览器会将数据类型 (Content-Type)提取出来并显示在屏幕上。

之后的流程,可以参考页面是如何生成的(宏观角度)

后记

分享是一种态度,这篇文章,主要的篇幅来自于《网络是如何连接的》,算是一个自我学习过程中的一种记录和总结。主要是把自己认为重要的点,都罗列出来。同时,也是为大家节省一下排雷和踩坑的时间。当然,可能由于自己认知能力所限,有些点,没能表达的很好。如果大家想看原文,“墙裂推荐”看原文。

参考资料:

  1. URL是什么意思
  2. 网络是如何连接的
相关文章
|
8天前
|
Web App开发 API 数据格式
Python网络数据抓取(2):HTTP Headers
Python网络数据抓取(2):HTTP Headers
24 0
|
6天前
|
缓存 安全 前端开发
探索HTTP协议:网络通信的基石
探索HTTP协议:网络通信的基石
|
8天前
状态码对于理解HTTP请求和响应的流程,以及调试网络问题非常重要
【5月更文挑战第15天】HTTP状态码由三位数字表示,分为1xx-5xx五类。1xx为信息响应,2xx表示成功,如200(请求成功)、201(创建成功)。3xx是重定向,如301(永久移动)、302(临时重定向)。4xx表示客户端错误,如400(坏请求)、404(未找到)。5xx是服务器错误,包括500(内部服务器错误)和503(服务不可用)。这些状态码用于理解请求响应流程和调试网络问题。
16 1
|
23小时前
|
JSON 安全 网络协议
【Linux 网络】网络基础(二)(应用层协议:HTTP、HTTPS)-- 详解
【Linux 网络】网络基础(二)(应用层协议:HTTP、HTTPS)-- 详解
|
8天前
|
移动开发 网络协议 网络安全
【网络安全 | 网络协议】一文讲清HTTP协议
【网络安全 | 网络协议】一文讲清HTTP协议
25 0
|
8天前
|
缓存 安全 算法
网络原理 HTTP _ HTTPS
网络原理 HTTP _ HTTPS
16 0
|
8天前
|
存储 缓存 网络协议
[计算机网络]---Http协议
[计算机网络]---Http协议
|
8天前
|
安全 网络协议 算法
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
【计算机网络】http协议的原理与应用,https是如何保证安全传输的
|
8天前
|
网络协议 安全
【专栏】`curl`是广泛用于网络编程和自动化脚本的命令行工具,支持HTTP、HTTPS等协议
【4月更文挑战第28天】`curl`是广泛用于网络编程和自动化脚本的命令行工具,支持HTTP、HTTPS等协议。在处理大文件或慢速服务器时,设置超时参数至关重要。本文介绍了`curl`的超时参数,如`-m`(最大操作时间)、`-c`(连接超时)、`--dns-timeout`(DNS解析超时)和`-t`(时间条件)。通过示例展示了如何设置这些超时,并提到了一些高级技巧和注意事项,如错误处理和带宽限制。合理设置超时能提高效率和可靠性,对编写健壮的自动化脚本非常有用。
|
8天前
|
存储 缓存 开发框架
Flutter的网络请求:使用Dart进行HTTP请求的技术详解
【4月更文挑战第26天】了解Flutter网络请求,本文详述使用Dart进行HTTP请求