`
liyonghui160com
  • 浏览: 775518 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ajax请求中设置特殊的RequestHeader

    博客分类:
  • java
阅读更多

 

 

.ajax请求,没有跨域,设置http header头部

$.ajax({

    type: "post",

    url:"http://abc.cc/qrcode3/index.php/home/index/testpost",

    dataType: "json"

    data: {"key":"value"},

    // headers : {'Authorization':'Basic bmVvd2F5Oe4lb3dheQ=='},

    beforeSend: function(xhr) {

        xhr.setRequestHeader("Authorization", "Basic bmVvd2F5Oe4lb3dheQ==");

    },

    success: function(data){ alert(data); },

    error: function(data){ alert("error"); } ,

});

设置header头部有两种方法:
1.headers : {‘Authorization’:’Basic bmVvd2F5Oe4lb3dheQ==’}

多个头部用逗号‘,’分隔开
2.定义beforeSend方法
beforeSend: function(xhr) {
xhr.setRequestHeader(“Authorization”, “Basic bmVvd2F5Oe4lb3dheQ==”);
}


.ajax跨域请求,没有设置http header,

$.ajax({

    type: "post",

    url:"http://abc.cc/qrcode3/index.php/home/index/testpost",

    dataType: "jsonp"

    data: {"key":"value"},

    // headers : {'Authorization':'Basic bmVvd2F5Oe4lb3dheQ=='},

    success: function(data){ alert(data); },

    error: function(data){ alert("error"); } ,

});

服务器端代码:

public function testpost() {

    $data = $_GET['key']?$_GET['key']:"123456";

    $callback = $_GET['callback'];

    if(!preg_match("/^[0-9a-zA-Z_.]+$/",$callback)){

exit('参数错误!');

    }

    echo $callback.'('.json_encode($data).')';

    exit;

}

跨域ajax访问,使用jsonp,返回数据格式如:abc({'key':'value','key2':'value2'}),形如一个函数调用,参数为一个json数据格式

.ajax跨域请求,设置header头部的解决办法

跨域无法直接设置header,如果跨域了还要设置http头,可以使用以下方法。

jquery实现代码如下:

$(".get_data").click(function() {

    var key = $("#user").val() + ":" + $("#pass").val();

    //base64编码

    var authKey = base64encode(key);

    $.ajax({

        type: 'GET',

        dataType: 'json',

        url: "http://abc.cc/qrcode3/home/index/testajax",

        headers: {'Authorization': 'Basic '+authKey,"lpy":"lpy"},

        success: function(data) {

            alert(data.msg+"--"+data.user);

        },

        error:function(data){

            alert("error");

        }

    });

});

 

php实现代码如下:

public function testajax() {

    // 指定允许其他域名访问  

    header('Access-Control-Allow-Origin:http://abc.cn');  

    // 响应类型  

    header('Access-Control-Allow-Methods:POST,GET');  

    // 响应头设置,允许设置Authorization和lpy这两个http头

header('Access-Control-Allow-Headers:Authorization,lpy');

 

    //获取所有的http请求头

    $header = apache_request_headers();

$data['lpy'] = $header['lpy'];

//获取authorization中的用户名和密码,并判断

    $data['user'] = $_SERVER['PHP_AUTH_USER'];

    $data['pass'] = $_SERVER['PHP_AUTH_PW'];

    if($data['user'] == "neoway" && $data['pass'] == "neoway"){

        $data['msg'] = "ok";

    }else{

        $data['msg'] = "errorjsonp";

    }

echo json_encode($data);

}

总结:
ajax跨域是不能设置http header的,为了能够设置header,需要在服务器php代码中添加header(‘Access-Control-Allow-Origin:http://abc.cn’); 允许http://abc.cn访问服务器abc.cc,再通过设置header(‘Access-Control-Allow-Headers:Authorization,lpy’);把需要设置的http header属性添加进去,在jquery代码中通过header来设置响应的属性值,在http的请求头中就可以看到 Authorizationlpy的请求头,服务器php端通过$header = apache_request_headers()获取http header的数组,继而可以获取到lpy的请求头的值。

分享到:
评论

相关推荐

    如何在ajax请求中设置特殊的RequestHeader

    如何在ajax请求中设置特殊的RequestHeader示例

    ajax添加header整理

    通过上述分析可以看出,无论是直接在`$.ajax()`的配置对象中通过`headers`属性设置Header,还是通过`beforeSend`回调函数动态设置Header,都能够有效地为AJAX请求添加所需的头部信息。开发者应根据实际需求选择最...

    ajax跨域请求demo.zip

    前端通常使用JavaScript库如jQuery来实现Ajax请求。jQuery的`$.ajax()`方法是进行异步请求的主要工具。在这个示例中,它可能包含以下关键配置: 1. `type`: 指定请求类型,通常是'GET'或'POST'。 2. `url`: 需要...

    ajax跨越请求

    在实际项目中,前端开发者通常会使用库或框架(如jQuery、axios、fetch等)来处理Ajax请求,这些库通常已经内置了处理跨域的逻辑。在后端,开发人员需要配置服务器响应头以支持CORS,例如在Node.js中使用`cors`...

    ajax跨域请求

    在Web开发中,由于浏览器的同源策略限制,AJAX请求通常只能向同源服务器发送请求。然而,在实际应用中,跨域请求的需求非常常见。本篇文章将通过一个具体的示例(JSP页面+后台实例)来详细介绍如何实现AJAX跨域请求...

    Ajax中get与post请求详解

    Ajax 中 get 与 post 请求的详细解释 Ajax 技术中 get 与 post 两种请求方式是许多开发者经常遇到的疑问,以下将详细解释两者的区别,并提供实例代码。 一、get 与 post 的基本区别 1. 参数传递方式:get 请求将...

    ajax 缓存 问题 requestheader

    不过在上述问题中,是通过JavaScript的AJAX请求直接设置了请求头,而不是在服务器端设置。 总结来说,处理AJAX缓存问题的关键在于正确设置HTTP请求头,以确保浏览器始终获取最新的服务器数据。在Prototype库中,...

    vue项目使用axios发送请求让ajax请求头部携带cookie的方法

    总结来说,通过在Vue项目的全局配置中设置axios的`withCredentials`属性为`true`,我们可以确保在发送Ajax请求时携带cookie,从而实现身份验证和其他基于cookie的会话管理。这是一个基本的登录权限验证解决方案,但...

    Ajax请求在数据量大的时候出现超时的解决方法

    1. **调整Ajax请求的超时时间**:这是最直接的方法,如在ExtJS中,可以通过设置`timeout`属性来延长请求的等待时间。例如,将超时时间设置为180000毫秒(即3分钟),如: ```javascript Ext.Ajax.request({ url: ...

    Ajax跨域请求COOKIE无法带上的完美解决办法

    在互联网应用中,当用户需要从一个域名(域A)的Web页面发起一个Ajax请求到另一个不同域(域B)的服务器时,就会发生跨域请求。出于安全考虑,浏览器同源策略默认禁止这种跨域Ajax请求携带cookies,这种限制会阻止一...

    Java后台判断ajax请求及处理过程详解

    为了解决这个问题,我们需要在过滤器或拦截器中区分普通页面请求和AJAX请求,并分别处理。对于AJAX请求,不进行页面重定向,而是通过HTTP响应返回特定的状态或信息,让前端根据这个信息做出相应的处理,如提示用户...

    JAVA的AJAX跨域访问

    然而,AJAX请求的一个常见问题就是跨域访问限制。浏览器出于安全考虑,实施了同源策略,这导致了来自不同域名、端口或协议的请求无法相互访问。本文将深入探讨在Java环境下,如何解决JSP中的AJAX跨域访问问题。 ###...

    thinkphp ajax实例

    1. **路由配置**:在ThinkPHP中,我们需要为Ajax请求设置专门的路由规则,以便服务器正确识别并处理这些请求。在`config/route.php`文件中,可以定义如下的路由规则: ```php Route::post('ajax/:controller/:...

    php下的原生ajax请求用法实例分析

    在PHP中,使用原生AJAX请求主要涉及客户端JavaScript和服务器端PHP的交互。AJAX(异步JavaScript和XML)是一种技术,它允许网页在不重新加载整个页面的情况下与服务器进行通信。这通常通过XMLHttpRequest对象实现,...

    json+AJAX例子

    然后,通过send()方法发送请求,如果请求是POST,还需要在open()之后设置requestHeader。 在描述中提到的两个页面,一个是向JSP(JavaServer Pages)提交数据,另一个是向Action(通常是Struts或Spring MVC中的控制...

    JQury实现Ajax跨域访问

    1. **预检请求(Preflight Request)**:对于非简单请求(如POST、PUT、DELETE,或者设置了自定义HTTP头),CORS会先发送一个`OPTIONS`请求,确认服务器允许后再进行实际请求。这可能导致额外的延迟。 2. **同源策略...

    js 使用ajax设置和获取自定义header信息的方法小结

    在JavaScript中,Ajax技术常用于实现页面的异步数据交互,而设置和获取自定义header信息则是Ajax请求中一个重要的功能。以下是对该主题的详细解释: ### 1. 设置自定义Header信息 #### 1.1 使用`beforeSend`回调...

Global site tag (gtag.js) - Google Analytics