乐趣区

关于java:一条HTTP请求的生命周期一-URL

粗读《网络是怎么连贯的》的第一章,讲述了从应用程序,解析 URL 到委托给操作系统的大抵流程

  1. 解析 URL, 生成 HTTP 音讯
  2. 向 DNS 服务器获取 web server IP
  3. 寰球 DNS 服务器大接力
  4. 委托协定栈发送音讯

其中波及到很多的概念:URL HTTP DNS Socket 协定栈。

URL

URL: Uniform Resource Locators(URLs), 通过 Internet 定位和拜访资源。

URL 标准源自 World-Wide Web global information initiative(万维网寰球信息倡导)

1. URL 的次要组成部分

URL 协定格局:\<scheme>:\<scheme-specific-part>
scheme:url 计划名称,例如:http ftp
例如:https://www.w3.org/

计划名称由以下字符组成组成:字母(a~z) 数字 + . – 不分大小写。

2. URL 字符编码问题

应用 US-ASCII 
<scheme>://<net_loc>/<path>;<params>?<query>#<fragment>

2.1 保留字符 — 相似于 java 关键字

";" | "/" | "?" | ":" | "@" |
"&" | "=" | "+" | "$" | "," |

2.2 非保留字符

可间接在 url 中应用

unreserved = alphanum | mark
alphanum = 字母 | 数字
mark =  "-" | "_" | "." | "!" | "~" | "*" | "'"|"("|")"
疏忽大小写

2.3 URI 和非 ascii 字符(比方 如何示意 UTF-8 编码的 “ 你好 ”)

转换公式
URI character sequence->octet sequence->original character sequence
URI 字符序列 -> octet 序列(US-ASCII) -> 原始序列
octet: 8bit, 2^8=256, 两个十六进制相乘, 在 URL 中体现为 %HEXHEX

"a" 示意 octet 97 (decimal)
%0a 示意 octet 10 (decimal)

%E4%BD%A0%E5%A5%BD --> 你好
一个字符对应三组 (octet) 个别是 UTF-8

Unicode/UTF-8-character table

国家标准 |GB 18030-2005 (samr.gov.cn)

2.4 不平安字符(URI 中不容许应用的 US-ASCII 字符)

这些字符,须要转成 %HEXHEX 格局

不容许应用的字符以及理由

control     = <US-ASCII coded characters 00-1F and 7F hexadecimal>
1. 不可打印 
2. 会被某些管制机制误会

space       = <US-ASCII coded character 20 hexadecimal>
1. 很多上下文中空格用于分隔 URI
2. 多一个空格少一个空格不容易被觉察

delims      = "<" | ">" | "#" | "%" | " 双引号 |
<>" 常在文档中用作 URI 的分隔符
#  在 URI 中示意 fragment identifier 的分隔符
%  转移字符

unwise      = "{" | "}" | "|" | "\" | "^" | "[" | "]" | "`"
gateways 或其余 transport proxy 会批改他们或把他们当分隔符

3. 具体计划(scheme)

应用 BNF 语法定义

ftp                     File Transfer protocol
http                    Hypertext Transfer Protocol
file                    Host-specific file names
telnet                  Reference to interactive sessions
...

3.1 通用 Internet 计划语法

//<user>:<password>@<host>:<port>/<url-path>

3.2 HTTP

http://<user>:<password>@<host>:<port>/<path>?<searchpart>
user password 可选
默认端口:80
path 可选
searchpart 可选

3.3 ftp

默认端口:21
ftp://<user>:<password>@<host>:<port>/<cwd1>/<cwd2>/.../<cwdN>/<name>;type=<typecode>
3.3.1. FTP url-path

url-path 可疏忽

格局:<cwd1>/<cwd2>/.../<cwdN>/<name>;type=<typecode>
typecode:枚举值 a i d

参考

  1. rfc 官网
  2. Uniform Resource Locators (URL rfc 1738)
  3. Uniform Resource Locators (URL rfc 2396)
  4. Uniform Resource Locators (URL w3.org)
退出移动版