关于URL
当你看到一个 URL,比如 http://www.example.com/home 其实是由几个组件构成的。我们可以把这个 URL 分解成 3 部分:
<ul>
<li>http:作用是告诉 web 客户端怎样去访问一个资源。在本例中,它告诉 web 客户端使用超文本传输协议也就是 HTTP 去发起一个请求。常见的 URL 模式还有ftp,mailto和git。</li>
<li>www.example.com:URL 的第二个部分,表示主机 (host)。</li>
<li>/home/:URL 的第三个部分就是 URL 路径。它代表了资源在服务器的哪一个位置。</li>
</ul>
关于端口
比如 http://www.example.com/home ,他指明了服务器的主机ip(通过dns协议),但是他并没有指明服务器的端口。其实url在没有指明端口的情况下,默认的端口是80。但是也可以指明端口,比如你的url也可以是这样。 http://localhost:3000/profile,3000 指明了服务器的端口是3000。
查询字符串 / 参数
一个查询字符串或者参数是 URL 的一部分并且通常都包含一些要发往至服务器的各种类型的数据。一个简单的带查询字符串的 URL 长这样:

使用查询字符串向服务器传递附加信息是个很棒的方法,但是对于查询字符串的使用,以下是一些限制:
<ul>
<li>查询字符串有最大长度。所以,如果你大量的数据需要传输,还是不要用查询字符串的好。</li>
<li>查询字符串中使用的键/值对儿是显示在 URL 上的。所以,不推荐用查询字符串传输敏感信息比如用户名或密码。</li>
<li>查询字符串中无法使用空格和特殊字符比如&。它们必须用 URL 编码代替,我们接下来会讨论这个。</li>
</ul>
URL 在设计的时候就默认只接受 ASCII 码。因此,不安全的或者不是 ASCII 码的字符就要进行转义或者编码来适应这个格式。URL 编码的原理是将不符合格式的字符替换成%开头后面跟着两个十六进制数字代表的 ASCII 码的一串字符。

好像看过一些文章,好多网页劫持的原理就是通过这个。
参考资料:
《http 下午茶》
《Introduction to HTTP》 这个英文的写的很好,强烈推荐。https://launchschool.com/books/http
网友评论