我试图了解这个系统是如何在幕后工作的。该系统是REST
基于这是相当标准的,我不明白客户做了什么OPTIONS
在每次 API 调用之前调用,并以该格式返回 XML 内容。它使用 Jersey Java。
OPTIONS
的回应DELETE
method
Access-Control-Request-Method: DELETE
在标题中传递
<?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://example.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>
问题:
A. 客户致电是标准还是行业惯例OPTIONS
首先,在进行实际调用之前处理和分析响应并确定 API、参数等?早些时候,我只是查看文档并相应地在客户端(JavaScript)中编写我的 REST 调用。
B. 该调用是由浏览器自动进行的(预检)还是在客户端中编程?
要了解发生了什么,您需要了解CORS(跨源资源共享) https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS。 OPTIONS 请求是飞行前request(由浏览器发出,响应客户端尝试发出跨源 ajax 请求),这是向服务器发出的初始请求,用于检查是否允许该客户端向服务器发出请求。飞行前请求发送服务器可以理解的特定标头,并且服务器将使用不同的标头进行响应。例如,客户端可能会发送
Origin: http://foo.example
Access-Control-Request-Method: DELETE
有了这两个请求头,浏览器期望的相应响应头就有了两个。请求标头基本上询问“是否允许此来源”和“是否允许此方法”。服务器应响应
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
上面是响应头,表示允许来源,并且允许那些方法。如果您没有看到这些标头,则意味着您的服务器上没有配置 CORS。如果浏览器没有看到这些响应标头,它将不会发出实际的请求。为了配置 CORS,通常使用简单的过滤器。有些容器,例如 Tomcat 和 Jetty,有一个可以配置的简单过滤器实现,或者您也可以创建自己的过滤器实现,例如 https://stackoverflow.com/a/28067653/2587435.
请注意,上述场景通常仅适用于浏览器XmlHTTPRequest
请求,如上面的链接中所述。
XML 是什么,是WADL https://en.wikipedia.org/wiki/Web_Application_Description_Language。您收到此消息的唯一原因是 Jersey 默认启用了自己的 WADL 功能。 WADL 不是强制性的,但 Jersey 有它,并且它被配置为响应 OPTIONS 请求。如果您禁用 WADL(这是可能的),您将不会获得 XML,而只会收到 405 不允许响应,这意味着该端点不允许使用 OPTIONS 方法。 WADL 并不是 CORS 协议的标准。这只是 Jersey 的 WADL 功能的副作用。WADL 和 CORS 彼此无关。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)