应用程序发送消息到外部

时间:2022-09-21 20:43:27

以浏览器访问url为例子:

1、生成请求消息
2、向DNS服务器查询web服务器IP地址
3、委托协议栈发送消息

这里仅先介绍请求消息,后续将介绍其他的内容

请求消息:

从访问一个url开始,一般来讲,普通用户从浏览器输入的网址都默认是http://开头的url,而实际上,url还可以以其他一些文字开头,如:file:、ftp:、mailto”等

之所以有各种各样的url,是因为浏览器不仅仅是可以用来访问web服务器的,还可以用来访问本地文件、在ftp服务器上上传下载文件等。因此,浏览器通过不同的URL
头来判断起应当使用哪种功能。

不同的URL,其访问目标不一样,其写法也不一样

如:

http协议访问WEB服务器: http://user:password@www.glasscom.com:80/dir/file , 其中用户名、密码和端口号可以省略
ftp协议上传下载文件: ftp://user:password@ftp.glasscom.com:21/dir/file 其中用户名、密码和端口号可以省略
读取本地客户端文件: file://kicakgist/c:/path/file 其中计算机名称可省略
发送电子邮件: mailto:tone@glasscom.com

这些url虽然写法不同,但是其开头的文字如“http:”等都表示浏览器应当使用的访问方法,表明访问时使用的协议类型。

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

访问URL之后,浏览器需要先解析URL,从而生成需要发送给WEB服务器的请求消息,

根据HTTP的规格, URL包含下图的几种元素:

应用程序发送消息到外部

有时候,如果表示数据源的路径名缺失,服务器怎么知道要访问哪个文件呢?
其实,我们会在服务器上事先设计好文件名省略时候的默认文件。一般是index.html 或者default.html之类的 。

根据URL解析完成后,我们得知了需要访问的目标在哪里,之后,浏览器就会使用HTTP协议来访问web服务器,在此之前,先了解一下HTTP协议

HTTP协议定义了客户端和服务器之间交互的消息内容和步骤,首先客户端想服务器发送请求消息,请求消息包括“对什么”和“执行什么操作”两部分。

“对什么”的部分称之为URI(统一资源标识符),一般来讲URI的内容是一个存放网页数据的文件名或者一个CGI程序的文件名。(PS: 实际上这个文件在WEB
服务器上未必真实存在,因为服务器可以通过重写规则对虚拟的URI进行映射)。
“执行怎样的操作”的部分称之为方法,典型的方法为GET 和POST方法,表示读取URI所表示的数据,将客户端传入的数据发送个URI所表示的程序,其他还有HEAD,
OPTIONS,PUT,DELETE,TRACE,CONNECT等方法,不赘述

HTTP协议的基本思路:

应用程序发送消息到外部

其中,请求消息和响应消息的具体格式如下:

应用程序发送消息到外部

请求行声明了http方法和URI,告知web服务器对什么执行哪种操作

消息头为一些列的键值对,用来添加一些额外的附加信息,诸如日期,支持的数据类型,是否缓存等等。具体的头字段就不一一列出,具体可自查。

请求消息体则包含着客户端想服务器发送的数据,例如POST方法向服务器发送的网页表单数据等。

状态行表示了服务器执行操作的结果

状态码 含义

1** 告知请求的处理进度和情况

2** 成功

3** 表示需要进一步操作

4** 客户端错误

5** 服务器错误