服务器与网页之间异步,在服务器端判断request来自Ajax请求(异步)还是传统请求(同步)...

在一次做非常复杂的ajax应用时,如果一个会话已经超时,但是此时再通过ajax请求,那么ajax返回的则是一个登陆页面的html,那这下就惨了,页面上而已就乱了,那么,能否在Java端,如拦截器里判断客户的的请求是否是ajax请求呢,经过查询,能.

普通请求与ajax请求的报文头不一样,通过如下

String requestType = request.getHeader("X-Requested-With");

如果requestType能拿到值,并且值为XMLHttpRequest,表示客户端的请求为异步请求,那自然是ajax请求了,反之如果为null,则是普通的请求

在服务器端判断request来自Ajax请求(异步)还是传统请求(同步):

两种请求在请求的Header不同,Ajax 异步请求比传统的同步请求多了一个头参数

1、传统同步请求参数

accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

accept-charset  gb2312,utf-8;q=0.7,*;q=0.7

accept-encoding  gzip,deflate

accept-language  zh-cn,zh;q=0.5

cache-control  max-age=0

connection  keep-alive

cookie  JSESSIONID=1A3BED3F593EA9747C9FDA16D309AF6B

host  192.168.101.72:8080

keep-alive  300

referer  http://192.168.101.72:8080/htfsweb/spring_security_login

user-agent  Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.15) Gecko/2009101601 Firefox/3.0.15 (.NET CLR 3.5.30729)

2、Ajax 异步请求方式

accept  */*

accept-language  zh-cn

referer  http://192.168.101.72:8080/scm/?token=3b194bff23bf6acecea5661ac8e14c51

x-requested-with  XMLHttpRequest

content-type  application/x-www-form-urlencoded,text/JavaScript

accept-encoding  gzip, deflate

user-agent  Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; QQDownload 598; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; CIBA; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.1)

host  192.168.101.72:8080

content-length  233

connection  Keep-Alive

cache-control  no-cache

cookie  CSS=undefined; JSESSIONID=1B9AC25036290F7FB6823CCE1A24E541

可以看到 Ajax 请求多了个 x-requested-with ,可以利用它,request.getHeader("x-requested-with"); 为 null,则为传统同步请求,为 XMLHttpRequest,则为 Ajax 异步请求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/442775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA Tomcat Catalina Log出现乱码

将tomcat – 》conf --》logging.properties 这五处UTF-8改为GBK, IDEA的编码还是UTF-8不用动,问题解决

我的世界有宠物系统的服务器,我的世界1.6.4宠物战争服务器客户端

这是我的世界1.6.4宠物战争服务器客户端,是一个加入了武器械丶宠物丶刀剑技能等等MOD的服务器客户端。欢迎感兴趣的玩家们下载体验!服务器介绍本服是新战争服本服特点:刺激的副本:宠物陪你战斗:3D武器械玩不腻&#xf…

基于IO流读取的 完成 用户登录,注册,修改,查看所有用户,删除功能

Controller import java.util.Scanner;/*** 视图层* 完成用户登录,注册,修改,删除功能*/ public class Controller {/*** 字符输入*/private static Scanner scanner new Scanner(System.in);/*** 业务处理层*/private static Service servi…

* 完成随机点名案例;学生姓名都提前写在文件中;:每次敲回车,随机显示一个学生姓名,每人最多显示一次,所有人都显示完了就结束程序;

import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.Scanner;/*** 完成随机点名案例;学生姓名都提前写在文件中;:…

IO流读取文件用户信息根据年龄排序后,写到文件

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.util.*;/*** IO流读取文件用户信息根据年龄排序后,写到文件*/ public class Operate1 {public static void main(String[] arg…

IO流配置文件,键值对Properties 的读取

import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Properties;/*** IO流配置文件,键值对Properties 的读取*/ public class Demo1 {private static final File file new File("ope…

使用对象操作流程,读写文件

import java.io.*;/*** 使用对象操作流程,读写文件*/ public class Demo1 {private static final File file new File("operate/src/operate419/demo/demo2/user.txt");static {if (file.exists() || !file.canRead()) {try {System.out.println("&…

jdk11 后用的指定编码格式,读取文件

import java.io.FileReader; import java.io.IOException; import java.nio.charset.Charset;/*** jdk11 后用的指定编码格式,读取文件*/ public class Demo2 {public static void main(String[] args) throws IOException {FileReader fileReader new FileReader(…

转换流指定编码读写文件

import java.io.*;/*** 转换流指定编码读写文件*/ public class Demo1 {public static void main(String[] args) throws IOException {FileInputStream fileInputStream new FileInputStream("C:\\Users\\Administrator\\Desktop\\coverage-error.log");InputStrea…

IO流的读写拷贝

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;/*** IO流的读写拷贝*/ public class Demo1 {public static void main(String[] args) throws IOException {//在D盘建一个文件夹,&#xff0c…

IDEA启动Tomcat AJP连接器配置secretRequired=“true“,但是属性secret确实空或者空字符串,这样的组合是无效的解决办法

修改Tomcat安装目录》conf》server.xml 配置文件 Connector标签里: 加上 secret"TOMCAT_AJP_SECRET6567" “或者”加上secretRequired"" 这两个配置文件,只需要加一个,或者都加也可以

IO流递归拷贝一个文件夹里面的所有文件,到另一个文件夹。如果重复不拷贝,可续拷

import java.io.*;/*** IO流递归拷贝一个文件夹里面的所有文件,到另一个文件夹。如果重复不拷贝,可续拷* author silence*/ public class IoCopy {private static int count 0;/*** 需要拷贝的起始地“文件夹路径”*/private static final File START …

线程池创建

import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit;/***线程池创建*/ public class Demo1 {public static void main(String[] args) {ThreadP…

多线程和单线程 打印数字到100000 的速度对比

import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** author silence 多线程和单线程 打印数字到100000 的速度对比 */ public class Dem…

* IO流递归拷贝一个文件夹 按源文件夹格式拷贝

import java.io.*;/*** IO流递归拷贝一个文件夹 按源文件夹格式拷贝** author silence*/ public class IoCopy2 {private static int count 0;/*** 需要拷贝的起始地“文件夹路径”*/private static final File START new File("C:\\Users\\Administrator\\Desktop\\作…

图片查找

import java.io.*; import java.math.BigInteger; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.security.MessageDigest; import java.util.HashMap; import java.util.Properties;/*** 读取一个图片MD5,和文件夹里的所有…

Callable创建多线程

import java.util.concurrent.Callable;/*** author silence* Callable创建多线程* 创件一个类&#xff0c;实现 Callable 《》 这里填返回值类型* 重写call 方法。*/ public class MyCallable implements Callable<String> {Overridepublic String call() throws Exce…

继承Thread 创建多线程的简单实现

/*** 继承Thread 创建多线程的简单实现* author silence*/ public class MyThread extends Thread {Overridepublic void run() {for (int i 0; i < 100; i) {//打印当前线程对象名称System.out.print(getName() "----");System.out.println(i);}} } /** auth…

实现Runnable 创建多线程的简单实现

/*** 实现Runnable 创建多线程的简单实现** author silence*/ public class MyRunnable implements Runnable {Overridepublic void run() {for (int i 0; i < 100; i) {//打印当前线程名System.out.print(Thread.currentThread().getName() " ");System.out.p…

lambda表达式创建一条最简单的线程

/*** author silence*/ public class Demo1 {public static void main(String[] args) {new Thread(() -> {//打印线程名for (int i 0; i < 100; i) {System.out.println(Thread.currentThread().getName() " " i);}}).start();new Thread(() -> {//…