这篇文章比较了IE7,firefox, chrome对http返回码303的处理。
http响应码
http响应码的分布从1xx ~ 5xx, 比较熟悉的有200(OK), 500 (Internal Server Error), 503 (Service Unavailable)等。
3xx系列的响应码表示“重定向” (Redirection), 这里特别分析303 (See Other),303的rfc2616说明有几点值得我们注意:
- 服务器在返回303的同时,应该(SHOULD)返回一个不同的URI,并放到Location字段中。
- 客户端收到303后,可以使用这个URI获取新的资源(必须使用GET获取新资源)
- 303的响应不能被缓存,但是Get到的新资源是可以被缓存的
如何模拟服务器发送303响应码
使用tomcat可以比较方便的模拟发送不同的响应码,主要代码如下
public class TestServlet extends HttpServlet {
@Override
public void doGet(final HttpServletRequest request, final HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
response.setHeader("Location", "/test/test2");
response.setStatus(303);
}
}
通过链接 http://localhost:8080/test/test1可以访问这个servlet。
各浏览器对303的处理方式:
共同点:三个浏览器在收到服务器303的响应后,都选择了立刻重定向到新的URI,在firefox使用firebug可以看处理的流程。
正常的事情人人都会做,下面主要搞点不正常的事情,看看三款浏览器的表现。
不正常事件一: 服务端返回303响应码,但是不返回Location(客户端没有URI可以重定向)
服务器端的代码如下,注释设置Location的语句即可
public class TestServlet extends HttpServlet {
@Override
public void doGet(final HttpServletRequest request, final HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
// response.setHeader("Location", "/test/test2");
response.setStatus(303);
}
}
IE7 显示的结果是常见的错误窗口,称之为IE的“通用错误窗口”,大家非常熟悉,部分截屏如下:
firefox和chrome则显示的http://localhost:8080/test/test1的内容。
换句话说,在没有给出Location的情况下,这两款浏览器返回的是原来页面返回的内容。
思考: 哪种返回更合理?
试想一种情况, 服务器端实现了一种机制, 对返回303的错误代码提供了一段"文本描述",同时“忘记”了设置了Location字段 (虽然根据http协议这是必须的)。 此时firefox和chrome即使不能进行本来应该进行的重定向,也可以显示服务器发回来的这段文本,具有提示作用(至少客户端知道自己网是通的吧),而IE的错误窗口就让人不知所云了。
不正常情况二: 循环重定向
这个时候又分两种情况
方法一,自己定向到自己,服务器端代码如下:
public class TestServlet extends HttpServlet {
@Override
public void doGet(final HttpServletRequest request, final HttpServletResponse response) {
response.setContentType("text/html;charset=UTF-8");
response.setHeader("Location", "/test/test1");
response.setStatus(303);
}
}
也就是说,使用链接http://localhost:8080/test/test1访问servlet,servlet返回一个URI,这个URI又指向http://localhost:8080/test/test1。
firefox和chrome都能检测到这个问题,firefox在重试了21次后检测到了这个问题,部分请求过程如下:
令人吃惊的结果又一次发生在IE上,IE居然进入了死循环,孜孜不倦的访问相同的链接,反映在浏览器上就是不断进行刷新。
思考: 有必要理会这种情况吗?
太有必要了,试想有人做了这样一个恶意网站,并诱导你去点击,如果不幸用的是IE, 由于不停刷新,你的浏览器可能崩溃。
方法二,定向到另外一个URI,从另外一个URI再定向回来
firefox和chrome也同样能够发现这种错误,IE7这次没犯上面的错误,但是错误窗口仍然是前面的“通用错误窗口”。
感慨: IE的developer太幸福了,处理错误只要祭出的大窗口就行了,爽啊。
总结:
firefox和chrome很好的完成了任务,特别要说的是chrome,非常好的一款软件,非常好。
而IE表现则让人很失望,从开始上网时就使用IE,这么多年了,还有这么多问题,说啥好呢。
- 大小: 12.6 KB
- 大小: 7.8 KB
- 大小: 28.8 KB
分享到:
相关推荐
"易了千明编程助手.exe"可能是一款集成了浏览器兼容性测试功能的软件,它可以帮助开发者快速检测网页在不同浏览器环境下的表现,找出样式、脚本等问题,并给出相应的修复建议。它可能包括以下功能: - **模拟多...
在互联网时代,不同的用户可能使用不同类型的浏览器进行浏览,因此,确保网页在各个主流浏览器上的正常显示和功能运行是开发者的首要任务。世界之窗浏览器以其对多种网页标准的良好支持,成为测试网页兼容性的理想...
8. **跨平台兼容性**:简易浏览器可能需要在多种操作系统上运行,如Windows、MacOS、Linux等。因此,开发者可能使用跨平台的开发框架,如Qt或Electron,来实现多平台支持。 9. **扩展性和可定制性**:虽然名为...
在IT领域,HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,它定义了客户端(如浏览器)和服务器之间数据交换的标准格式和交互方式。本项目以"HTTP浏览器"为主题,提供了C++语言编写的源代码,旨在...
为了确保网站在不同浏览器上的表现一致性,开发者通常需要做以下几件事: 1. **研究浏览器默认样式**:了解每个浏览器如何处理HTML元素的默认样式,例如,有的浏览器可能默认会给`<p>`标签添加下边距,有的则没有。...
标题中的“PC端Chrome浏览器扩展程序 模拟手机浏览器”是指一种特定的Chrome浏览器插件,它能够让用户在个人电脑(PC)上使用Chrome浏览器时,模拟成移动设备的浏览器环境,以访问那些只对手机浏览器开放的网站或...
- JavaScript框架如React、Vue、Angular在不同浏览器上的表现可能有差异,需要关注官方文档的兼容性声明。 - 浏览器插件(如Flash)在某些浏览器中可能已被淘汰,如Chrome已不再支持Flash。 7. **移动设备兼容性*...
标题中的“电脑浏览器变手机浏览器方法”指的是将电脑上的网页浏览体验模拟成手机浏览器的体验,这通常通过特定的浏览器插件或扩展实现。这样的工具可以让用户在电脑上以接近移动设备的方式查看和操作网站,方便进行...
在跨平台支持方面,糖果浏览器可能有Windows、MacOS、Android和iOS等多个版本,满足不同用户的需求。这意味着无论用户使用何种设备,都能享受到一致的浏览体验。 此外,糖果浏览器可能还注重性能优化,降低内存占用...
`CSS 兼容问题.doc`可能讨论了CSS在不同浏览器上的表现差异,如盒模型、渐变、动画、 Flexbox 或 Grid布局等。为确保兼容性,开发者需要了解并应用CSS前缀,如 `-webkit-`, `-moz-`, `-ms-` 和 `-o-`,以及使用工具...
每个标签页可能在不同的线程上运行,以避免一个页面的加载阻塞其他页面的响应。 4. **事件驱动编程**: 使用`WebBrowser`控件时,需要监听和处理各种事件,如`DocumentCompleted`(页面加载完成)、`Navigating`...
6. **响应式设计**:使用媒体查询(Media Queries)和流式布局,确保网站在不同设备和浏览器上都能良好显示。 7. **代码 linting 和格式化**:ESLint 对 JavaScript 代码进行检查,Prettier 对代码进行格式化,有助...
在CSS(层叠样式表)领域,跨浏览器兼容性是一个重要的课题,因为它涉及到网页在不同浏览器上的一致性展示。每个浏览器对CSS的理解和实现可能存在差异,这可能导致样式在Firefox、Chrome、Safari、Edge以及Internet ...
浏览器测试页面是一个重要的工具,用于确保网页在不同的浏览器和设备上都能正常显示和运行。它涵盖了多种技术,包括HTML、CSS、JavaScript以及浏览器兼容性测试。以下是对这一主题的详细阐述: 1. HTML(HyperText ...
1. 安装完成后,Postman图标会在浏览器右上角显示。点击图标启动Postman,首次使用可能需要进行一些基本设置,如创建工作空间、导入集合等。 2. Postman支持多种HTTP请求类型,包括GET、POST、PUT、DELETE等。在...
网页自适应设计是一种重要的网页开发技术,它使得网站在各种不同的设备、屏幕尺寸和浏览器上都能呈现出良好的用户体验。随着移动设备的普及,用户可能通过桌面电脑、笔记本、平板电脑或智能手机访问网页,因此,网页...
在Web开发中,为了确保日期选择控件在不同浏览器中的表现一致,开发者通常会利用JavaScript库或框架,如jQuery UI的Datepicker、Bootstrap的DateTimePicker或Moment.js等。这些工具不仅提供丰富的样式和功能,还处理...
7. **跨平台兼容**:由于DJnative-SWT和SWT的设计,虽然使用了本地浏览器引擎,但整个应用仍能在不同平台上运行,只需确保对应平台支持WebKit。 通过这个示例,开发者不仅可以学习如何在Java Swing应用中嵌入浏览器...
此外,"触摸屏界面优化案例q.pdf"可能提供了关于如何优化触摸屏界面以适应用户交互的建议和最佳实践,比如调整控件大小、布局和响应速度,确保在不同尺寸和分辨率的触摸屏上都能良好显示和操作。 "项目合作.txt...
JavaScript可以配合CSS媒体查询实现响应式布局,确保在不同设备上都有良好的显示效果。 综上所述,"图片浏览器——JS"是一个结合HTML、CSS和JavaScript技术实现的图片展示应用,通过动态加载和控制图片,为用户提供...