`
robertliudeqiang
  • 浏览: 123120 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

http响应码303在不同浏览器上的表现 (原创)

    博客分类:
  • web
阅读更多
这篇文章比较了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
2
0
分享到:
评论

相关推荐

    解决__让网页适应不同的浏览器和分辨率

    标题中的“解决__让...通过以上这些技术和策略,我们可以创建一个不仅在不同分辨率下表现良好,而且能在各种浏览器上兼容的网页。随着设备和浏览器的不断发展,持续关注最新的Web开发趋势和技术更新也是至关重要的。

    Video播放器兼容各大浏览器

    3. **样式统一**:由于浏览器的差异,Video播放器的默认样式可能在各个浏览器中表现不一。开发者需要使用CSS来重置或定制这些样式,以实现跨浏览器的一致性。例如,控制条、播放/暂停按钮、音量滑块等都需要统一设计...

    事件模型在各浏览器中存在差异

    在IT领域,尤其是在Web开发中,事件模型是一个关键的概念,用于处理用户与网页交互的响应。W3C DOM 2 Events 规范定义了事件模型,使得任何支持DOM的节点,如HTML元素,都可以成为EventTarget,即可以接收并处理事件...

    HTTP 浏览器

    在IT领域,HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,它定义了客户端(如浏览器)和服务器之间数据交换的标准格式和交互方式。本项目以"HTTP浏览器"为主题,提供了C++语言编写的源代码,旨在...

    各浏览器默认的css

    为了确保网站在不同浏览器上的表现一致性,开发者通常需要做以下几件事: 1. **研究浏览器默认样式**:了解每个浏览器如何处理HTML元素的默认样式,例如,有的浏览器可能默认会给`<p>`标签添加下边距,有的则没有。...

    个浏览器对css属性的不同支持

    然而,不同的浏览器对于CSS属性的支持程度并不完全相同,这可能导致在不同浏览器上展示的效果存在差异。了解这些差异对于创建兼容多浏览器的网页至关重要。 **一、浏览器兼容性问题** 1. **版本差异**:不同浏览器...

    电脑浏览器变手机浏览器方法

    标题中的“电脑浏览器变手机浏览器方法”指的是将电脑上的网页浏览体验模拟成手机浏览器的体验,这通常通过特定的浏览器插件或扩展实现。这样的工具可以让用户在电脑上以接近移动设备的方式查看和操作网站,方便进行...

    c#版多标签页浏览器

    每个标签页可能在不同的线程上运行,以避免一个页面的加载阻塞其他页面的响应。 4. **事件驱动编程**: 使用`WebBrowser`控件时,需要监听和处理各种事件,如`DocumentCompleted`(页面加载完成)、`Navigating`...

    Httpwatch浏览器插件。请求和响应

    Httpwatch浏览器插件。请求和响应

    跨浏览器解决方案

    6. **响应式设计**:使用媒体查询(Media Queries)和流式布局,确保网站在不同设备和浏览器上都能良好显示。 7. **代码 linting 和格式化**:ESLint 对 JavaScript 代码进行检查,Prettier 对代码进行格式化,有助...

    网页自适应不同浏览器和分辨

    网页自适应设计是一种重要的网页开发技术,它使得网站在各种不同的设备、屏幕尺寸和浏览器上都能呈现出良好的用户体验。随着移动设备的普及,用户可能通过桌面电脑、笔记本、平板电脑或智能手机访问网页,因此,网页...

    搜狗浏览器2.0,据说速度最快的浏览器

    描述中提到用户对搜狗浏览器2.0的观察:“速度不错”,这表明该浏览器在实际使用中表现出了较快的页面加载和响应速度。同时,用户对其内核表示疑惑,“怎么看都是用的ie内核”,这可能是因为搜狗浏览器在某些功能或...

    Httpwatch浏览器插件。请求和响应11

    9. **比较与报告**:工具提供对比功能,可以比较不同条件下的请求和响应,例如不同浏览器、网络环境或优化措施后的效果。同时,生成的分析报告方便团队共享和讨论。 10. **集成开发环境**:HttpWatch可以与Visual ...

    竹轩wap浏览器--电脑上wap网

    4. **模拟器功能**:通过模拟不同类型的WAP设备,开发者可以测试其应用在各种环境下的表现,确保跨设备兼容性。 5. **用户体验优化**:由于WAP网页通常设计为小屏幕显示,竹轩WAP浏览器可能会提供放大、缩小、全屏...

    Java-Swing嵌入浏览器(本地浏览器和webkit浏览器-火狐内核)

    7. **跨平台兼容**:由于DJnative-SWT和SWT的设计,虽然使用了本地浏览器引擎,但整个应用仍能在不同平台上运行,只需确保对应平台支持WebKit。 通过这个示例,开发者不仅可以学习如何在Java Swing应用中嵌入浏览器...

    微信判断浏览器自动弹出遮罩层【完整代码】.zip

    7. **响应式设计**:由于遮罩层和弹窗需要在不同尺寸的设备上看起来良好并功能正常,所以需要考虑响应式设计。CSS媒体查询可以帮助调整样式以适应不同屏幕尺寸。 8. **兼容性测试**:在实际应用中,需要确保这个...

    重定向chrome浏览器插件ray

    这在测试环境中非常有用,可以将请求导向本地服务器或者模拟不同的响应,无需真实访问远程服务器。 2. **网络代理设置**:它可以设置为全局代理或者按域名规则进行代理,这样可以将特定网站的流量通过指定的服务器...

    易语言浏览器易语言浏览器

    浏览器作为互联网的入口,其工作原理主要包括以下几个部分:解析URL、发送HTTP请求、接收HTTP响应、渲染网页内容、处理JavaScript等。"易语言浏览器"可能是使用易语言实现这些功能的实例,开发者可能利用易语言的...

    Chrome浏览器上方便查看 json的插件 JSONVue v0.1.17.0

    让开发者在 Chrome 浏览器上能非常方便直观地查看 json 响应结果。一般国内都没法使用 Chrome 浏览器直接在线下载安装插件,可以通过下载这个然后在 Chrome 浏览器 中点击扩展应用程序,钩选开发者模板,直接将此 ...

Global site tag (gtag.js) - Google Analytics