1.URI和URL的区别
首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema必须被指定。
说的通俗一点:URL是URI的子集
2.常用的HTTP方法有哪些?
GET: 用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器。
POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式。
PUT: 传输文件,报文主体中包含文件内容,保存到对应URI位置。
HEAD: 获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效。
DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件。
OPTIONS:查询相应URI支持的HTTP方法。
3.post和get的区别
- get把请求的数据放在url上,即HTTP协议头上,其格式为: 以?分割URL和传输数据,参数之间以&相连。 数据如果是英文字母/数字,原样发送, 如果是空格,转换为+, 如果是中文/其他字符,则直接把字符串用BASE64加密,及“%”加上“字符串的16进制ASCII码”。 post把数据放在HTTP的包体内(requrest body)。
- get提交的数据最大是2k(原则上url长度无限制,那么get提交的数据也没有限制咯?限制实际上取决于浏览器,(大多数)浏览器通常都会限制url长度在2K个字节,即使(大多数)服务器最多处理64K大小的url。也没有卵用。)。
- post理论上没有限制。实际上IIS4中最大量为80KB,IIS5中为100KB。
- GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
- GET在浏览器回退时是无害的,POST会再次提交请求。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。post支持标准字符集,可以正确传递中文字符。
4.常见的HTTP响应状态码
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
200:请求被正常处理
204:请求被受理但没有资源可以返回
206:表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求,响应报文中通过Content-Range指定范围的资源。
301:永久性重定向
302:临时重定向(可以用来做网址劫持)
303:与302状态码有相似功能,只是它希望客户端在请求一个URI的时候,能通过GET方法重定向到另一个URI上
304:发送附带条件的请求时,条件不满足时返回,与重定向无关
307:临时重定向,与302类似,只是强制要求使用POST方法
400:请求报文语法有误,服务器无法识别
401:表示发送的请求需要有通过HTTP认证的认证信息。
403:对请求资源的访问被服务器拒绝了
404:服务器无法找到对应资源,url可能不正确
500:服务器内部错误,可能存在bug
503:表明服务器暂时处于超负荷或正在进行停机维护,现在无法处理请求。
5.HTTP1.1版本新特性
- 默认持久连接:节省通信量,只要客户端和服务端任意一端没有明确的断开TCP连接,就可以发送多次HTTP请求
- 管线化:客户端可以同时发送多个HTTP请求,而不用一个个等待响应
- 断点续传原理:客户端记录下当前的下载进度,并在需要续传时通知服务器本次需要下载的内容片断。一个简单的断点续传实现如下:(HTTP1.1协议中定义了断点续传相关的属性,如Range和Content-Range),当客户端下载一个1024K文件,下载到500k时网络中断,当客户端请求续传时,客户端需要在http头中声明本次需要续传的片断,如下:Range: bytes=500000——这个头通知服务器从文件的500k位置开始传文件服务器收到断点续传请求后,从文件的500k位置开始传输文件,并在http头开始增加Content-Range:bytes=500000-1024000,并且此时服务器端返回的HTTP状态码应该是206,而不是200。
6.HTTP请求报文与响应报文格式
请求报文包含四部分:
- a、请求行:包含请求方法、URI、HTTP版本信息
- b、请求首部字段:包含表示请求的各种条件和各类首部
- c、空行
- d、请求内容实体(请求数据)
响应报文包含四部分:
- a、状态行:包含HTTP版本、状态码、状态码的原因短语
- b、响应首部字段:包含表示响应的各种条件和各类首部
- c、空行
- d、响应内容实体(响应数据)
7.常见HTTP首部字段
a、通用首部字段(请求报文与响应报文都会使用的首部字段)
Date:创建报文时间
Connection:连接的管理
Cache-Control:缓存的控制
Transfer-Encoding:报文主体的传输编码方式
Warning:提供一些警告信息
b、请求首部字段(请求报文会使用的首部字段)
Host:请求资源所在服务器
Accept:可接收的媒体类型
Range:实体的字节范围请求
Accept-Charset:可接收的字符集
Accept-Encoding:可接受的内容编码
Accept-Language:可接受的语言(自然语言)
User-Agent:HTTP客户端程序的信息
c、响应首部字段(响应报文会使用的首部字段)
Accept-Ranges:范围请求是否ok,ok返回bytes,否则返回none
Location:令客户端重新定向到的URI
Server:HTTP服务器的安装信息
d、实体首部字段(请求报文与响应报文的的实体部分使用的首部字段)
Allow:资源可支持的HTTP方法
Content-Type:实体主体的类型
Content-Encoding:实体主体适用的编码方式
Content-Language:实体主体的自然语言
Content-Length:实体主体的大小
Content-Range:实体主体的位置范围,一般用于发出部分请求时使用
8.浏览器中输入网址后到页面展现的过程
1)用户输入网址
2)浏览器通过DNS获取网站的IP地址:客户端先检查本地是否有对应的IP地址,若找到则返回响应的IP地址。若没找到则请求上级DNS服务器,直至找到或到根节点。DNS查找IP地址的顺序: 浏览器缓存、系统缓存、互联网服务提供商(ISP)的DNS缓存、如果ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)。找到后,浏览器会获得一个IP地址。
3)传输层TCP传输报文。TCP协议通过“三次握手”等方法保证传输的安全可靠。
4)浏览器客户端发送http请求:HTTP请求包括请求报头和请求主体两个部分,其中请求报头包含了至关重要的信息,包括请求的方法(GET / POST)、目标url、遵循的协议(http / https / ftp…),返回的信息是否需要缓存,以及客户端是否发送cookie等。
5)网络层IP协议查询MAC地址:IP协议的作用是把TCP分割好的各种数据包传送给接收方。而要保证确实能传到接收方还需要接收方的MAC地址,也就是物理地址。IP地址和MAC地址是一一对应的关系,一个网络设备的IP地址可以更换,但是MAC地址一般是固定不变的。ARP协议可以将IP地址解析成对应的MAC地址。当通信的双方不在同一个局域网时,需要多次中转才能到达最终的目标,在中转的过程中需要通过下一个中转站的MAC地址来搜索下一个中转目标。
6)数据到达数据链路层:在找到对方的MAC地址后,就将数据发送到数据链路层传输。这时,客户端发送请求的阶段结束
7)服务器接收数据:接收端的服务器在链路层接收到数据包,再层层向上直到应用层。这过程中包括在运输层通过TCP协议将分段的数据包重新组成原来的HTTP请求报文。
8)服务器响应请求:服务接收到客户端发送的HTTP请求后,查找客户端请求的资源,并返回响应报文,响应报文中包括一个重要的信息——状态码。状态码由三位数字组成,其中比较常见的是200 OK表示请求成功。301表示永久重定向,即请求的资源已经永久转移到新的位置。在返回301状态码的同时,响应报文也会附带重定向的url,客户端接收到后将http请求的url做相应的改变再重新发送。404 not found 表示客户端请求的资源找不到。
9)服务器返回响应文件:请求成功后,服务器会返回相应的HTML文件。接下来就到了页面的渲染阶段了。
10) 页面渲染: 解析HTML以构建DOM树 –> 构建渲染树 –> 布局渲染树 –> 绘制渲染树。
关于页面渲染过程:
1)解析HTML代码,生成一棵DOM树
2)解析CSS文件
3)生成渲染树(受样式影响,包含不可见元素)
4)渲染树中的节点
9.ARP协议的工作原理
- 每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系。
- 主机(网络接口)新加入网络时(也可能只是mac地址发生变化,接口重启等), 会发送免费ARP报文把自己IP地址与Mac地址的映射关系广播给其他主机。
- 网络上的主机接收到免费ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中。
- 某个主机需要发送报文时,首先检查 ARP 列表中是否有对应 IP 地址的目的主机的 MAC 地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送 ARP 数据包,该数据包包括的内容有:源主机 IP 地址,源主机 MAC 地址,目的主机的 IP 地址等。
- 当本网络的所有主机收到该 ARP 数据包时:
(A)首先检查数据包中的 IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包。
(B)如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖。
(C) 然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。
6.源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。
10.Cookie和Session的区别
- cookie数据存放在客户的浏览器上,session数据放在服务器上。
- cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗、考虑到安全应当使用session。
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE。
- 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
- 所以建议是:将登陆信息等重要信息存放为SESSION。其他信息如果需要保留,可以放在COOKIE中
11.HTTP的缺点
HTTP主要有这些不足,列举如下:
(1)通信使用明文(不加密),内容可能会被窃听
(2)不验证通信方的身份,因此有可能遭遇伪装
(3)无法证明报文的完整性,所以有可能已遭篡改
11.https的加密原理
传送门:HTTPS工作原理_加密