问题:在ie浏览器中点击访问相对URL时,地址栏中的路径与预期路径不符致使404错误?javascript
URL的组成:html
- 协议:http:// https:// ftp:// 在"HTTP"后面的“//”为分隔符
- 域名:网址,也可使用IP地址做为域名使用
- 端口:跟在域名后面的是端口,域名和端口之间使用“:”做为分隔符,若是省略端口将采用默认端口
- 虚拟目录:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。
- 文件名:从域名后的最后一个“/”开始到“?”为止,是文件名部分,若是没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,若是没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。文件名部分也不是一个URL必须的部分,若是省略该部分,则使用默认的文件名
- 参数:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。参数能够容许有多个参数,参数与参数之间用“&”做为分隔符。
- 锚:从“#”开始到最后,都是锚部分。
浏览器是如何解析绝对路径和相对路径的: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");