基于浏览器的http普通请求与ajax请求

来源:互联网 发布:sql win7 64位下载 编辑:程序博客网 时间:2024/05/18 00:57

发起一个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也是没有效果的,浏览器会直接覆盖你所设置的值。

0 0
原创粉丝点击