大多数URL协的语法都建立在下面9个部分构成的通用格式上:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
其中比较重要的是:方案(scheme)、主机(host)和路径(path)
组件 | 描述 |
---|---|
方案<scheme> | 访问服务器以获取资源时要使用哪种协议 |
用户<user> | 某些方案访问资源时需要的用户名 |
密码<password> | 用户名后面可能要包含的密码,中间由冒号分隔 |
主机<host> | 资源宿主服务器的主机名或点分IP地址 |
端口<port> | 资源宿主服务器正在监听的端口号。很多方案都有默认端口号 |
路径<path> | 服务器上资源的本定名,由斜杠将其与前面的URL组件分隔开来。路径组件的语法是与服务器和方案有关。 |
参数<params> | 某些方案会用这个组件来指定输入参数。参数为名/值对。URL中可以包含多个参数字段,它们相互之间以与路径的其余部分之间用分号(;)分隔。 |
查询<query> | 某些方案会用这个组件传递参数以激活因公程序。查询组件的内容没有通用格式。用字符”?”将其与URL的其余部分分隔开来。 |
片段<frag> | 一小片或者一部分资源的名字。引用对象时,不会将frag字段传送给服务器。这个字段是在客户端内部使用的。通过字符”#”将其与URL的其余部分分隔开来。 |
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:
GET /123.png HTTP/1.1
Host: img.test.com
content-length: 1500
content-type: image/png
date: Sat, 22 Sep 2018 08:36:13 GMT
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
POST / HTTP1.1
Host: img.test.com
content-length: 1500
content-type: image/png
date: Sat, 22 Sep 2018 08:36:13 GMT
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
name=aa&score=90
HTTP/1.1 200 OK
Date: Sat, 22 Sep 2018 08:36:16 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
请求 | 响应 | |
---|---|---|
请求行(request line) | 用来说明请求类型,要访问的资源以及所使用的HTTP版本. | 状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。 |
头部(header) | 用来说明服务器要使用的附加信息 | 消息报头,用来说明客户端要使用的一些附加信息 |
空行 | 空行,消息报头后面的空行是必须的 | 空行,消息报头后面的空行是必须的 |
数据 | 请求数据也叫主体,可以添加任意的其他数据 | 响应正文,服务器返回给客户端的文本信息。 |
请求方法 | 描述 |
---|---|
GET | 请求指定的页面信息,并返回实体主体。 |
HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE | 请求服务器删除指定的页面。 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
OPTIONS | 允许客户端查看服务器的性能。 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
序号 | 步骤 | 描述 |
---|---|---|
1 | DNS解析 | 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址; |
2 | 建立TCP连接 | 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接 |
3 | 发送HTTP请求 | 通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。 |
4 | 服务器接受请求 | 服务器解析请求,进行适当的处理 |
5 | 响应 | 服务器将响应内容写到TCP套接字(第),由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。 |
6 | 释放TCP连接 | 若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求; |
7 | 接收内容 | 浏览器将该 html 文本并显示内容 |
GET | POST | |
---|---|---|
对数据长度的限制 | 当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符) | 无限制。 |
对数据类型的限制 | 只允许 ASCII 字符。 | 没有限制。也允许二进制数据。 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分,在发送密码或其他敏感信息时绝不要使用 GET ! | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |
点击返回/刷新按钮 | 没有影响 | 数据会重新发送 |