基于浏览器的http普通请求与ajax请求
来源:互联网 发布:java接口对于耦合实例 编辑:程序博客网 时间:2024/05/21 14:58
发起一个http请求,可以通过浏览器,也可以通过程序去发起。通过程序去发起http请求(比如java中HttpURLConnection),只要是http层的东西都是能够伪造的,当然大部分还是伪造header头字段。而通过浏览器去发起的http请求(包括ajax请求),一些常用的header字段(比如:referer,User-Agent等)是浏览器帮我们设定的,在网页里面一般我们是没法直接去重置他们的。不过可以通过一些方法间接去重置这些header字段,我了解的主要有如下两种方法:
1.以chrom浏览器为例,通过chrom的插件过滤目的网址,然后对访问这些网址的http请求重置header。参考插件: https://github.com/chenyoufu/modify-http-headers
2.通过代理软件fiddler,重置原始请求的header字段
基于浏览器的http请求分为普通请求和ajax请求,普通请求都是同步执行的,ajax请求可以同步也可以异步(默认异步)。当这两种请求到达服务端时候,我们可以通过x-requested-with这个header字段加以区分。如果是普通请求没有这个header,取到为null。如果是ajax请求,取到是XMLHttpRequest。
因为ajax请求header字段是可以设置的,我们能否重置这个header,伪装成普通请求呢?答案是没法彻底重置的。如果我们自己设置了x-requested-with这个字段,浏览器还是会去再设置一遍这个值。chrom和ie的做法是直接追加,即服务端打印的结果是:自定义的值,XMLHttpRequest。而火狐是直接打印:XMLHttpRequest。
另外如果我们在ajax请求中自行设置referer这个header也是没有效果的,浏览器会直接覆盖你所设置的值。
-----------------------------------------------------------------------------------------------------------------------------------------------------
在一次做非常复杂的ajax应用时,如果一个会话已经超时,但是此时再通过ajax请求,那么ajax返回的则是一个登陆页面的html,那这下就惨了,页面上而已就乱了,那么,能否在java端,如拦截器里判断客户的的请求是否是ajax请求呢,经过查询,能.
普通请求与ajax请求的报文头不一样,通过如下
- String requestType = request.getHeader("X-Requested-With");
如果requestType能拿到值,并且值为XMLHttpRequest,表示客户端的请求为异步请求,那自然是ajax请求了,反之如果为null,则是普通的请求
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AJAX请求和普通HTTP请求区别
两者本质别:
AJAX通xmlHttpRequest象请求服务器服务器接受请求返数据实现刷新交互
普通http请求通httpRequest象请求服务器接受请求返数据需要页面刷新
AJAX请求
普通请求
AJAX请求头会多一个x-requested-with参数,值为XMLHttpRequest
String requestType = request.getHeader("X-Requested-With");
以此为判断依据
- 基于浏览器的http普通请求与ajax请求
- 基于浏览器的http普通请求与ajax请求
- 普通浏览器GET请求与Ajax的GET请求的区别
- AJAX请求和普通HTTP请求区别
- Ajax异步请求头部信息与普通请求的不同
- Ext下,ajax请求和普通http请求,session超时转到登录页面的解决方案
- Ext下,ajax请求和普通http请求,session超时转到登录页面的解决方案
- 使用struts2处理普通http请求和ajax请求的对比
- ajax请求,和普通的http url请求,有什么不一样?
- Ajax——浏览器发送的http请求
- XMLHTTPRequest/Ajax请求 和普通请求的区别
- 得到请求的类型 ajax和普通请求
- JavaScript的Ajax数据请求与浏览器兼容
- 一个简单的HTTP请求与应答基于socket
- C# 发起普通http请求
- Struts2 拦截器处理普通Http请求和Ajax请求时拦截配置
- Struts2 拦截器处理普通Http请求和Ajax请求时拦截配置
- Struts2 拦截器处理普通Http请求和Ajax请求时拦截配置
- Access restriction: The type ‘BASE64Decoder’ is not API (restriction on required library ‘D:\java\jd
- LVM管理
- 基础集合的原理
- LeetCode [11. Container With Most Water]
- 第一章 OpenStack概述
- 基于浏览器的http普通请求与ajax请求
- 欢迎使用CSDN-markdown编辑器
- HQL数据查询基础
- opensamba.sh
- 8-ClassLoader
- 第五周项目1
- 1045. 快速排序(25)
- Spring概述
- 淘宝商品详情平台化思考与实践