Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从web服务提供航班前请求服务_Javascript_Ajax_Google Chrome_Same Origin Policy_Cors - Fatal编程技术网

Javascript 如何从web服务提供航班前请求服务

Javascript 如何从web服务提供航班前请求服务,javascript,ajax,google-chrome,same-origin-policy,cors,Javascript,Ajax,Google Chrome,Same Origin Policy,Cors,我有一个通过GET工作的web服务。要访问此web服务,需要传递一些自定义头 当我尝试使用GET方法从javascript代码访问web服务时,请求方法将更改为OPTIONS。(域不同) 我阅读了一些文章,发现带有自定义头的请求将被预先过滤,在这种情况下,在实际方法调用之前,将向服务器发出带有OPTIONS方法的请求 但是我的问题是在选项调用之后,实际方法(即GET)没有被调用 OPTIONS调用将返回401状态 我怀疑这是因为我的web服务只支持GET。我怎样才能解决这个问题? 请帮忙。 (我

我有一个通过
GET
工作的web服务。要访问此web服务,需要传递一些自定义头

当我尝试使用
GET
方法从javascript代码访问web服务时,请求方法将更改为
OPTIONS
。(域不同)

我阅读了一些文章,发现带有自定义头的请求将被预先过滤,在这种情况下,在实际方法调用之前,将向服务器发出带有OPTIONS方法的请求

但是我的问题是在
选项
调用之后,实际方法(即
GET
)没有被调用

OPTIONS
调用将返回401状态

我怀疑这是因为我的web服务只支持
GET
。我怎样才能解决这个问题? 请帮忙。 (我的代码与IE配合良好,但与其他浏览器(如Chrome)不配合)

需要检查两件事(不知道您的服务器端语言/技术是什么):

  • 您是否将
    选项
    作为有效方法包含在
    访问控制允许方法中
    ?例如:

    Access-Control-Allow-Methods: GET, OPTIONS
    
  • 请求发送的自定义头是否被返回到浏览器中? 例如:

  • 远程服务器必须在任何安全、符合标准的浏览器(即不是较早版本的ie)允许非源响应通过之前,返回这两个(当然是第二个)

    因此,如果希望在HTTP服务器级别实现此功能并保持web服务的可移植性,可以尝试以下方法:

    我们假设您的web服务URL为
    http://example.org/service
    并且服务路径是
    /srv/www/service

    如果您正在运行Apache2.0,那么附加头的语法是
    add
    ,在2.2上,使用
    set

    因此,您可以修改
    /srv/www/service/.htaccess

     Header set Access-Control-Allow-Methods "GET, OPTIONS"
     Header set Access-Control-Allow-Headers "X-MY_CUSTOM_HEADER1,X-MY_CUSTOM_HEADER2"
     Header set Access-Control-Allow-Origin "*"
    
    当然,需要打开
    mod_headers
    Apache模块才能使上述功能正常工作。另外,将allow origin设置为通配符是有风险的,如果您发送
    访问控制允许凭据:true
    头(在这种情况下不能使用通配符),则实际上会导致请求失败。此外,使用Apache的
    setenif
    mod,您可以微调htaccess文件,使其仅在适当的时候返回头,而不是返回到该目录的所有请求。

    需要检查两件事(不知道您的服务器端语言/技术是什么):

  • 您是否将
    选项
    作为有效方法包含在
    访问控制允许方法中
    ?例如:

    Access-Control-Allow-Methods: GET, OPTIONS
    
  • 请求发送的自定义头是否被返回到浏览器中? 例如:

  • 远程服务器必须在任何安全、符合标准的浏览器(即不是较早版本的ie)允许非源响应通过之前,返回这两个(当然是第二个)

    因此,如果希望在HTTP服务器级别实现此功能并保持web服务的可移植性,可以尝试以下方法:

    我们假设您的web服务URL为
    http://example.org/service
    并且服务路径是
    /srv/www/service

    如果您正在运行Apache2.0,那么附加头的语法是
    add
    ,在2.2上,使用
    set

    因此,您可以修改
    /srv/www/service/.htaccess

     Header set Access-Control-Allow-Methods "GET, OPTIONS"
     Header set Access-Control-Allow-Headers "X-MY_CUSTOM_HEADER1,X-MY_CUSTOM_HEADER2"
     Header set Access-Control-Allow-Origin "*"
    

    当然,需要打开
    mod_headers
    Apache模块才能使上述功能正常工作。另外,将allow origin设置为通配符是有风险的,如果您发送
    访问控制允许凭据:true
    头(在这种情况下不能使用通配符),则实际上会导致请求失败。此外,使用Apache的
    setenif
    mod,您可以微调htaccess文件,使其仅在适当的时候返回标题,而不是返回到该目录的所有请求。

    根据您的示例,我更关心的是IE是否允许该请求。我必须在chrome或其他浏览器上进行操作。因为最后我必须使用智能手机浏览器来完成任务。在这种情况下,您应该确认移动浏览器支持
    CORS
    。这里有一个很好的列表:根据你的例子,我更关心的是IE是否允许这个请求。我必须通过chrome或其他浏览器来完成这些工作。因为最后我必须使用智能手机浏览器来完成任务。在这种情况下,您应该确认移动浏览器支持
    CORS
    。这里有一个很好的列表:但我有一个cxf web服务。你是说我必须允许这些方法使用选项和GET一起工作?@GET@products({“application/json”})@Path(“/getData”)public CustomDTO getData(){…}web服务应该不重要。您是否使用Apache作为实际的HTTP服务器(在提供web服务之前管理HTTP头)?如果是这样,您应该能够修改(在
    .htaccess
    文件中,我想)请求的处理和响应方式。因此,web服务代码不会有任何更改。必须将web服务器配置为处理飞行前请求。我说的对吗?我正在使用Tomcat6.0和ApacheCXF引擎来创建web服务。我如何为飞行前选项请求提供服务?但我有一个cxf web服务。你是说我必须允许这些方法使用选项和GET一起工作?@GET@products({“application/json”})@Path(“/getData”)public CustomDTO getData(){…}web服务应该不重要。您是否使用Apache作为实际的HTTP服务器(在提供web服务之前管理HTTP头)?如果是这样,您应该能够修改(在
    .htaccess
    文件中,我想)请求的处理和响应方式。因此,web服务代码不会有任何更改。必须将web服务器配置为处理