sailei1 / blog

1 stars 0 forks source link

URI 统一资源标识符 #86

Closed sailei1 closed 5 years ago

sailei1 commented 5 years ago

URI不完全等同于网址,它包含有URL和URN两个部分,在HTTP世界里用的网址实际上是URL ——统一资源定位符(Uniform Resource Locator)。但因为URL实在是太普及了,所以常常把这两者简单 地视为相等。

URI常用的形式:

scheme :// host:port path ? query

scheme:协议名 host:port 资源所在主机名,地址+端口,如果不写端口,浏览器使用默认的端口 path:资源所在位置,必须以“/”开始 query: 查询参数,以“?”开始,但不包含“?”。key=value字符串,用&连接 eg: https://search.jd.com/Search?keyword=openresty&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=openres ty&psort=3&click=0

URI的完整格式 scheme :// user:passwd@ host:port path ? query #fragment User:passwd@ : 身份信息,但是不推荐这样使用,泄露重要信息

fragment :片段标识符。标识URI所定位的资源内部的一个锚点,浏览器可以跳转到它指示的位置。服 务器看不到#fragment

URI的编码 在URI里只能使用ASCII码,直接把非ASCII 码或特殊字符转换成十六进制字节值,然后前面加一个“%”,中文、日文等通常使用UTF-8编码后再转义。

  1. HTTP协议允许在在请求行里使用完整的URI,但为什么浏览器没有这么做呢? 不需要重复写,在http请求头里面有的
  2. URI的查询参数和头字段很相似,都是key-value形式,都可以任意自定义,那么它们在使用时该如何区别呢? query参数针对的是资源(uri),而字段针对的是本次请求,也就是报文。 一个是长期、稳定的,一个是短期、临时的。