选项在 REST API 调用之前调用元数据
Options call for meta before REST API call
我想了解这个系统是如何在幕后工作的。该系统是基于 REST
的,这是非常标准的,我没有得到客户端在每次 API 调用之前进行 OPTIONS
调用并且 xml 内容以格式返回.它正在使用 Jersey Java.
OPTIONS
DELETE
方法的响应
Access-Control-Request-Method: DELETE
在 headers
中传递
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="http://wadl.dev.java.net/2009/02">
<doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 2.8 2014-04-29 01:25:26"/>
<grammars/>
<resources base=“http://domain.com”>
<resource path=“data/gasdfasdg/entity”>
<method id="deleteEntity" name="DELETE">
<request>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:string"/>
</request>
<response>
<representation mediaType="application/json"/>
</response>
</method>
<method id="getOneEntitysMetadata" name="GET">
<request>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="q" style="query" type="xs:string"/>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="x-dps-compute-content-size" style="header" type="xs:boolean"/>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:string"/>
</request>
<response>
<representation mediaType="application/json"/>
</response>
</method>
<method id="createOrUpdateEntity" name="PUT">
<request>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:string"/>
</request>
<response>
<representation mediaType="application/json"/>
</response>
</method>
</resource>
</resources>
</application>
问题:
一个。客户端首先调用 OPTIONS
、处理和分析响应并确定 API、参数等是标准还是行业惯例,然后再进行实际调用?早些时候,我一直在查看文档并相应地在客户端 (javascript) 中编写我的 REST 调用。
乙。此调用是由浏览器自动进行的(预检)还是在客户端中进行了编程?
要了解发生了什么,您需要了解 CORS (cross origin resource sharing)。 OPTIONS 请求是 pre-flight 请求(由浏览器发出,以响应客户端尝试发出跨源 ajax 请求),这是一个对服务器的初始请求,以检查是否允许该客户端向服务器发出请求。 pre-flight 请求发送服务器理解的特定 headers,服务器将以不同的 headers 响应。例如,客户端可能会发送
Origin: http://foo.example
Access-Control-Request-Method: DELETE
对于这两个请求headers,浏览器期望有两个相应的响应headers。请求 headers 基本上是在询问 "is this origin allowed" 和 "is this method allowed"。服务器应响应
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
以上是回复headers,说来源是允许的,那些方法是允许的。如果您没有看到那些 headers,则表示您的服务器上没有配置 CORS。如果浏览器没有看到那些响应 headers,它不会发出实际的请求。要配置 CORS,通常会使用一个简单的过滤器。一些容器,比如 Tomcat 和 Jetty,有一个简单的过滤器实现,你可以配置,或者你可以自己动手,for example.
注意以上场景通常只针对浏览器和XmlHTTPRequest
请求,如上文link.
XML 就是 WADL。你得到这个的唯一原因是因为 Jersey 默认启用了它自己的 WADL 功能。 WADL 不是强制性的,但 Jersey 有它,并且它被配置为响应 OPTIONS 请求。如果您禁用 WADL(这是可能的),而不是获得 XML,您只会得到 405 Not Allowed 响应,这意味着该端点不允许使用 OPTIONS 方法。 WADL 不是关于 CORS 协议的标准。这只是 Jersey 的 WADL 功能的副作用。 WADL和CORS没有任何关系
我想了解这个系统是如何在幕后工作的。该系统是基于 REST
的,这是非常标准的,我没有得到客户端在每次 API 调用之前进行 OPTIONS
调用并且 xml 内容以格式返回.它正在使用 Jersey Java.
OPTIONS
DELETE
方法的响应
Access-Control-Request-Method: DELETE
在 headers
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="http://wadl.dev.java.net/2009/02">
<doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 2.8 2014-04-29 01:25:26"/>
<grammars/>
<resources base=“http://domain.com”>
<resource path=“data/gasdfasdg/entity”>
<method id="deleteEntity" name="DELETE">
<request>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:string"/>
</request>
<response>
<representation mediaType="application/json"/>
</response>
</method>
<method id="getOneEntitysMetadata" name="GET">
<request>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="q" style="query" type="xs:string"/>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="x-dps-compute-content-size" style="header" type="xs:boolean"/>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:string"/>
</request>
<response>
<representation mediaType="application/json"/>
</response>
</method>
<method id="createOrUpdateEntity" name="PUT">
<request>
<param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:string"/>
</request>
<response>
<representation mediaType="application/json"/>
</response>
</method>
</resource>
</resources>
</application>
问题:
一个。客户端首先调用 OPTIONS
、处理和分析响应并确定 API、参数等是标准还是行业惯例,然后再进行实际调用?早些时候,我一直在查看文档并相应地在客户端 (javascript) 中编写我的 REST 调用。
乙。此调用是由浏览器自动进行的(预检)还是在客户端中进行了编程?
要了解发生了什么,您需要了解 CORS (cross origin resource sharing)。 OPTIONS 请求是 pre-flight 请求(由浏览器发出,以响应客户端尝试发出跨源 ajax 请求),这是一个对服务器的初始请求,以检查是否允许该客户端向服务器发出请求。 pre-flight 请求发送服务器理解的特定 headers,服务器将以不同的 headers 响应。例如,客户端可能会发送
Origin: http://foo.example
Access-Control-Request-Method: DELETE
对于这两个请求headers,浏览器期望有两个相应的响应headers。请求 headers 基本上是在询问 "is this origin allowed" 和 "is this method allowed"。服务器应响应
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
以上是回复headers,说来源是允许的,那些方法是允许的。如果您没有看到那些 headers,则表示您的服务器上没有配置 CORS。如果浏览器没有看到那些响应 headers,它不会发出实际的请求。要配置 CORS,通常会使用一个简单的过滤器。一些容器,比如 Tomcat 和 Jetty,有一个简单的过滤器实现,你可以配置,或者你可以自己动手,for example.
注意以上场景通常只针对浏览器和XmlHTTPRequest
请求,如上文link.
XML 就是 WADL。你得到这个的唯一原因是因为 Jersey 默认启用了它自己的 WADL 功能。 WADL 不是强制性的,但 Jersey 有它,并且它被配置为响应 OPTIONS 请求。如果您禁用 WADL(这是可能的),而不是获得 XML,您只会得到 405 Not Allowed 响应,这意味着该端点不允许使用 OPTIONS 方法。 WADL 不是关于 CORS 协议的标准。这只是 Jersey 的 WADL 功能的副作用。 WADL和CORS没有任何关系