use*_*195 6 javascript java rest options jersey
我试图了解这个系统是如何工作的.该系统是REST基于非常标准的,我没有得到客户端OPTIONS在每次API调用之前进行调用,并以格式返回xml内容.它正在使用Jersey Java.
OPTIONS该DELETE方法的响应
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://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>
Run Code Online (Sandbox Code Playgroud)
问题:
A. OPTIONS在进行实际呼叫之前,客户首先呼叫,处理和分析响应并确定API,参数等是标准还是行业惯例?之前我一直只是在客户端(javascript)中查看文档和编程我的REST调用.
B.此浏览器是自动(预检)还是在客户端编程?
Pau*_*tha 14
要了解正在发生的事情,您需要了解CORS(跨源资源共享).OPTIONS请求是飞行前请求(由浏览器做出,以响应客户端尝试发出交叉原始的ajax请求),这是对服务器的初始请求,以检查是否允许该客户端发出请求到服务器.飞行前请求发送服务器理解的特定标头,服务器将使用不同的标头响应.例如,客户端可能会发送
Origin: http://foo.example
Access-Control-Request-Method: DELETE
Run Code Online (Sandbox Code Playgroud)
使用这两个请求标头,浏览器需要两个相应的响应标头.请求标头基本上是在询问"是否允许此来源"和"允许此方法".服务器应该响应
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Run Code Online (Sandbox Code Playgroud)
以上是响应头,表示允许原点,并允许这些方法.如果您没有看到这些标头,则表示您没有在服务器上配置CORS.如果浏览器没有看到这些响应标头,则它不会发出实际请求.要配置CORS,通常使用简单的过滤器.有些容器,比如Tomcat和Jetty,有一个简单的过滤器实现,你可以配置,或者你可以自己动手,例如.
请注意,上述方案通常仅适用于浏览器和XmlHTTPRequest请求,如上面的链接所述.
XML是什么,就是WADL.你得到这个的唯一原因是因为泽西岛默认启用了自己的WADL功能.WADL不是强制性的,但Jersey有它,并且它被配置为响应OPTIONS请求.如果您禁用了WADL(这是可能的),而不是获取XML,您将获得405 Not Allowed响应,这意味着该端点不允许使用OPTIONS方法.WADL与CORS协议无关.这只是Jersey的WADL功能的副作用.WADL和CORS彼此无关.
| 归档时间: |
|
| 查看次数: |
6873 次 |
| 最近记录: |