IE与Chrome对相对URL解析的区别

问题:在ie浏览器中点击访问相对URL时,地址栏中的路径与预期路径不符致使404错误?javascript

URL的组成html

  1. 协议:http:// https:// ftp:// 在"HTTP"后面的“//”为分隔符
  2. 域名:网址,也可使用IP地址做为域名使用
  3. 端口:跟在域名后面的是端口,域名和端口之间使用“:”做为分隔符,若是省略端口将采用默认端口
  4. 虚拟目录:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。
  5. 文件名:从域名后的最后一个“/”开始到“?”为止,是文件名部分,若是没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,若是没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。文件名部分也不是一个URL必须的部分,若是省略该部分,则使用默认的文件名
  6. 参数:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。参数能够容许有多个参数,参数与参数之间用“&”做为分隔符。
  7. 锚:从“#”开始到最后,都是锚部分。

 

 浏览器是如何解析绝对路径和相对路径的java

在网页源代码中出现的url路径有多是如下几种状况, 浏览器分别做不一样的处理:web

1) 绝对路径, 好比: http://www.vinceruan.info/front/cross-domain-process-cookie-session/, 浏览器对此url不作任何的处理.浏览器

2)绝对路径, 相似:www.vinceruan.info/java/optimize-website/, 浏览器仅仅是在url前面补上http://服务器

3)相对路径:/database/row-format-myisam/, 浏览器会在url前面补上host, 变成: http://www.vinceruan.info/database/row-format-myisam/cookie

4)相对路径: http-cache/,  前面不带/ ,此时浏览器作两种处理, 
若是你在网页中明确给出了base标签, 那么获得的url是 base url + http-cache/, 
若是没有给出base标签,那么浏览器试图本身解析获得base url, 解析方法是根据当前url的最后一个/以前的内容返回做为base url.
 由于当前路径是:http://www.vinceruan.info/front/how-browser-parse-url-relative-absolute/,
 浏览器分析获得的base url 是:http://www.vinceruan.info/front/how-browser-parse-url-relative-absolute, 
 所以最后拿到的url 是http://www.vinceruan.info/front/how-browser-parse-url-relative-absolute/http-cache/, 
 这显然是不正确的, 之因此出错是由于本站作了seo优化, 网页url优化成目录url了,所以应该在网页中显示提供base标签.session

解决办法:相对路径前加/dom

js获取访问路径 location.pathname优化

//假设当前页面的 URL 是:http://www.xxx.com/test/test.shtml
//获取:/test/test.shtml
var path=location.pathname;

//设置
location.pathname = "/test/test.shtml";


function getContextPath() {
    var pathName = document.location.pathname;
    var index = pathName.substr(1).indexOf("/");
    var result = pathName.substr(0,index+1);
    return result;
  }
var path = getContextPath();

window.location.href = path+"/com/forumAction_list.do";

 

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,通常会带上Referer,告诉服务器我是从哪一个页面连接过来的,服务器籍此能够得到一些信息用于处理。好比从我主页上连接到一个朋友那里,他的服务器就可以从HTTP Referer中统计出天天有多少用户点击我主页上的连接访问他的网站。 在JSP中获取REFERER的方式是:request.getHeader("REFERER");

相关文章
相关标签/搜索