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
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
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服务器配置为处理