<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js" type="text/javascript"></script>
<script>
$.get("http://example.com/", function(data) {
alert(data);
});
</script>
Run Code Online (Sandbox Code Playgroud)
它对该URL执行OPTIONS请求,然后从不使用任何内容调用回调.
当它不是跨域时,它工作正常.
不应该只是jQuery与一个<script>节点进行调用,然后在加载时进行回调吗?我明白我无法得到结果(因为它是跨域的),但那没关系; 我只是希望电话通过.这是一个错误,还是我做错了什么?
我读过以下内容:
超文本传输协议(HTTP)是网络的生命.每次传输文档或发出AJAX请求时都会使用它.但是,令人惊讶的是,在某些Web开发人员中,HTTP相对未知.
HTTP谓词构成了我们"统一接口"约束的主要部分,并为我们提供了与基于名词的资源相对应的动作.主要或最常用的HTTP谓词(或方法,因为它们被正确调用)是POST,GET,PUT和DELETE.
好吧,我们突然忘记了事情.
PUT并且DELETE,他们说.我只听说过POST和GET,从来没有见过类似的东西$_PUT或者$_DELETE在我曾经看到任何PHP代码经过.
这些方法(PUT)和(DELETE)是什么,如果可以在PHP中使用它们,我将如何解决这个问题.
注意:我知道这不是一个真正的问题但我总是抓住一个学习机会,如果我看到一个,并且非常想学习在PHP中使用这些方法,如果可能的话.
我想使用我的控制器使用Spring MVC拦截OPTIONS请求,但它被DispatcherServlet捕获.我该如何管理?
首先,我读过" 如何使用Spring MVC处理HTTP OPTIONS? "但答案似乎并不直接适用于Spring Boot.
看起来我应该这样做:
通过将其设置为
dispatchOptionsRequest来配置dispatcherServlettrue
但是如何做到这一点,因为我没有XML配置,或者DispatcherServlet我的代码中有任何类型的初始化器类(这个答案提到)?
在@RestController类中,我有一个这样的方法,目前不会被调用.
@RequestMapping(value = "/foo", method = RequestMethod.OPTIONS)
public ResponseEntity options(HttpServletResponse response) {
log.info("OPTIONS /foo called");
response.setHeader("Allow", "HEAD,GET,PUT,OPTIONS");
return new ResponseEntity(HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
Spring Boot 1.2.7.RELEASE; 一个简单的设置与Spring REST指南中的设置没有什么不同 .
我们目前正在使用HAProxy作为负载均衡器,它会定期向下游框发出请求,以确保它们使用OPTIONS请求存活:
选项/index.html HTTP/1.0
我正在使用缓存(使用ncache)将nginx设置为反向代理.出于某种原因,当OPTIONS请求进入时,nginx返回405:
192.168.1.10 - - [22/Oct/2008:16:36:21 -0700]"OPTIONS /index.html HTTP/1.0"405 325" - "" - "192.168.1.10
当直接点击下游网络服务器时,我得到了适当的200响应.我的问题是:如何让nginx将响应传递给HAProxy,或者,如何在nginx.conf中设置响应?
我在使用jquery将一些json数据发布到我在WCF服务上的rest方法时遇到了一些麻烦.
在WCF方面,这是操作合同:
[OperationContract]
[WebInvoke(Method = "POST",
BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "PostSomething")]
MyResult PostSomething(MyRequest request);
Run Code Online (Sandbox Code Playgroud)
双方MyResult并MyRequest标有所有必要DataContract和DataMember属性和服务暴露WebHttp端点.
在JQuery方面,这是我的函数调用:
var jsonStr = JSON.stringify(reqObj);
$.ajax({
type: "POST",
dataType: "json",
url: "http://localhost/MyService/PostSomething",
contentType: "application/json; charset=utf-8",
data: jsonStr,
success: function (html) {
alert(html);
}
});
Run Code Online (Sandbox Code Playgroud)
这个请求永远不会到达我的方法(我每次都得到一个405方法不允许),并查看Charles的请求如下所示:
OPTIONS /MyService/PostSomething HTTP/1.1
Host: localhost
Cache-Control: max-age=0
Access-Control-Request-Method: POST
Origin: null
Access-Control-Request-Headers: Content-Type, Accept
Accept: */*
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 …Run Code Online (Sandbox Code Playgroud) backbone.js当我尝试将模型保存到位于另一个主机/ URL上的restful Web服务时,我的应用程序抛出了HTTP OPTIONS not found错误.
根据我的研究,我从这篇文章中收集到:
请求将不断发送OPTIONS http请求标头,并且根本不会触发POST请求.
显然CORS的请求将"对用户数据产生副作用"将使您的浏览器"预检"带有OPTIONS请求标头的请求以检查批准,然后再实际发送您的预期HTTP请求方法.
我试图绕过这个:
Backbone.emulateHTTP = true;
我还允许在标题中允许所有CORS和CSRF选项.
header('Access-Control-Allow-Origin:*');
header("Access-Control-Allow-Headers:Origin,X-Requested-With,Content-Type,Accept"); header("Access-Control-Allow-Methods:GET,POST,OPTIONS");
当Backbone.emulateHTTP引入代码行时,应用程序崩溃了.
有没有办法在CodeIgniter RESTServer中响应OPTIONS请求,是否还有其他选择允许从谈话地点禁用此请求?
rest codeigniter backbone.js http-options-method codeigniter-restserver
我的Sencha Touch应用程序正在将表单发布到我的asp.net-mvc-3 WebService,但不是发送POST它的发送OPTIONS.
我在这里读了一个类似的线程,但我不知道如何处理OPTIONS我的代码中的方法.
我确实尝试将[AllowAjax]属性添加到我的Action中,但它似乎不存在于MVC3中.
选项/ GetInTouch/CommunicateCard HTTP/1.1
主机:webservice.example.com
参考资料:http://192.168.5.206/ Access-Control-Request-Method:POST
来源:http://192.168.5.206
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0)AppleWebKit/534.24(KHTML,与Gecko一样)Chrome/11.0.696.71 Safari/534.24
Access-Control-Request-Headers:X-Requested-With,Content-Type
Accept:/
Accept-Encoding: gzip,deflate,sdch
Accept-Language:en-US,en; q = 0.8
Accept-Charset:ISO-8859-1,utf-8; q = 0.7,*; q = 0.3
在我的ActionMethod中,我使用以下代码.
public JsonpResult CommunicateCard(CommunicateCard communicateCard)
{
// Instantiate a new instance of MailMessage
MailMessage mMailMessage = new MailMessage();
// removed for security/brevity
// Set the body of …Run Code Online (Sandbox Code Playgroud) 在我的环境中,我使用perlbal将请求重定向到nginx.如果启用了verify_backend.perbal会向nginx发送一个"OPTIONS*"请求,但是nginx会将其作为一个错误的请求进行响应.
根据RFC2616:
如果Request-URI是星号(" "),则OPTIONS请求通常应用于?服务器而不是特定资源.由于服务器的通信选项通常取决于资源,因此" "请求仅用作"ping"或"no-op"类型的方法; 除了允许客户端测试服务器的功能之外,它什么都不做.例如,这可以用于测试HTTP/1.1合规性(或缺乏)的代理.
我认为perlbal试图发送这种请求,但是nginx默认不能处理这个问题.
当我尝试发送请求"OPTIONS*HTTP/1.0"时,我总是得到"HTTP 400错误请求":
127.0.0.1 - - [18/Feb/2013:03:55:47 +0000]"OPTIONS*HTTP/1.0"400 172" - "" - "" - "
但它适用于没有星号请求的"OPTIONS/HTTP/1.0"选项:
127.0.0.1 - - [18/Feb/2013:04:03:56 +0000]"OPTIONS/HTTP/1.0"200 0" - "" - "" - "
如何配置nginx以使其响应http返回200而不是HTTP返回400?
我正在使用rails-api构建一个公共的json api.
我想回应OPTIONS HTTP方法以利用跨源资源共享.
我这样做:
headers['Access-Control-Allow-Methods'] = 'POST, PUT, DELETE, GET, OPTIONS'
Run Code Online (Sandbox Code Playgroud)
它可以工作,但有些URL不支持所有HTTP方法.在那些情况下,我撒谎.
我不想为每个URL配置Access-Control-Allow-Methods.
有没有办法根据我的路线响应Access-Control-Allow-Methods?
http ×4
jquery ×2
nginx ×2
rest ×2
spring-mvc ×2
ajax ×1
backbone.js ×1
bad-request ×1
codeigniter ×1
cors ×1
haproxy ×1
http-delete ×1
http-get ×1
http-put ×1
java ×1
php ×1
rails-api ×1
spring ×1
spring-boot ×1
wcf ×1