跨源资源共享是一种允许网页将XMLHttpRequests发送到另一个域(来自维基百科)的机制,这非常重要(来自我:).
在过去的几天里,我一直在调整CORS,我想我对一切运作方式都有很好的理解.
所以我的问题不是关于CORS /预检如何工作,而是关于将预检作为新请求类型的原因.我没有看到任何理由为什么服务器A需要向服务器B发送预检(PR)以确定是否接受真实请求(RR) - B当然可以接受/拒绝RR而不用任何先前的公关.
经过相当多的搜索,我在www.w3.org(7.1.5)上找到了这条信息:
为了保护资源免受在此规范存在之前不能源自某些用户代理的跨源请求,进行预检请求以确保资源知道此规范.
我发现这是最难理解的句子.我的解释(应该更好地称之为'最佳猜测')是关于保护服务器B免受来自服务器C的不知道规范的请求.
有人可以解释一个场景/显示PR + RR解决的问题比单独的RR更好吗?
出于开发目的,我需要在我的机器上的Safari(在Windows上)禁用同源策略.
在Chrome中,可以通过使用标志启动来完成此操作--disable-web-security.Safari中是否有等效的标志或隐藏设置?
我正在尝试为我的angular2应用添加基本身份验证.
public login() {
// Set basic auth headers
this.defaultHeaders.set('Authorization', 'Basic ' + btoa(this.username + ':' + this.password));
console.log('username', this.username)
console.log('password', this.password)
console.log(this.defaultHeaders)
// rest is copy paste from monbanquetapiservice
const path = this.basePath + '/api/v1/development/order';
let req = this.http.get(path, { headers: this.defaultHeaders });
req.subscribe(
_ => { },
err => this.onError(err)
);
}
Run Code Online (Sandbox Code Playgroud)
我期望看到的是带有Authorization我放置的标题的GET请求.
但我看到的首先是带有此标题的OPTIONS:
OPTIONS /api/v1/development/order HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用jQuery将XML发布到Web服务.我收到的回复是我没想到的:
"名称不能以'%'字符开头,十六进制值为0x25.第1行,第65位."
码
$(function() {
var xmlStr = '<?xml version="1.0" encoding="utf-8" ?><TransactionSetup xmlns="obsfucated"><Credentials><AccountID>1043155</AccountID><AccountToken>obsfucated</AccountToken><AcceptorID>obsfucated</AcceptorID></Credentials><Application><ApplicationID>obsfucated</ApplicationID><ApplicationVersion>1.0</ApplicationVersion><ApplicationName>Test</ApplicationName></Application><Terminal><TerminalID>01</TerminalID><CardholderPresentCode>2</CardholderPresentCode><CardInputCode>5</CardInputCode><TerminalCapabilityCode>3</TerminalCapabilityCode><TerminalEnvironmentCode>2</TerminalEnvironmentCode><CardPresentCode>2</CardPresentCode><MotoECICode>1</MotoECICode><CVVPresenceCode>1</CVVPresenceCode></Terminal><Transaction><TransactionAmount>SPI_CartTotalFinal</TransactionAmount></Transaction><TransactionSetup><TransactionSetupMethod>1</TransactionSetupMethod><Embedded>1</Embedded><AutoReturn>1</AutoReturn><ReturnURL>Obsfucated</ReturnURL><CustomCss>body{margin-left:50px;font-family:arial;font-size:large;border:none;}</CustomCss></TransactionSetup></TransactionSetup>',
guid;
$.ajax({
type: 'POST',
url: 'webserviceurl',
contentType: "text/xml",
dataType: "xml",
data: {
Action: $('#Action').val(),
IsAjax: $('#IsAjax').val(),
xml: xmlStr,
},
success: function(response) {
guid = response;
console.log('success' + guid);
},
error: function (jqXHR, tranStatus, errorThrown) {
console.log(
'Status: ' + jqXHR.status + ' ' + jqXHR.statusText + '. ' +
'Response: ' + jqXHR.responseText
);
}
});
Run Code Online (Sandbox Code Playgroud)
更新 - 发布数据
<TransactionSetup xmlns="https://www.obsfucated.com"%3E%20%3CCredentials%3E%20%3CAccountID%3E1223135%3C/AccountID%3E%20%3CAccountToken%3EA9A22221CBE222ED0E287D6F34B0222E0F928E4DDF6C37B945CE05F78054DF95966FC201%3C/AccountToken%3E%20%3CAcceptorID%322228907%3C/AcceptorID%3E%20%3C/Credentials%3E%20%3CApplication%3E%20%3CApplicationID%3E8003%3C/ApplicationID%3E%20%3CApplicationVersion%3E1.0%3C/ApplicationVersion%3E%20%3CApplicationName%3EHostedPayments.CSharp%3C/ApplicationName%3E%20%3C/Application%3E%20%3CTerminal%3E%20%3CTerminalID%3E01%3C/TerminalID%3E%20%3CCardholderPresentCode%3E2%3C/CardholderPresentCode%3E%20%3CCardInputCode%3E5%3C/CardInputCode%3E%20%3CTerminalCapabilityCode%3E3%3C/TerminalCapabilityCode%3E%20%3CTerminalEnvironmentCode%3E2%3C/TerminalEnvironmentCode%3E%20%3CCardPresentCode%3E2%3C/CardPresentCode%3E%20%3CMotoECICode%3E1%3C/MotoECICode%3E%20%3CCVVPresenceCode%3E1%3C/CVVPresenceCode%3E%20%3C/Terminal%3E%20%3CTransaction%3E%20%3CTransactionAmount%3E0.20%3C/TransactionAmount%3E%20%3C/Transaction%3E%20%3CTransactionSetup%3E%20%3CTransactionSetupMethod%3E1%3C/TransactionSetupMethod%3E%20%3CEmbedded%3E1%3C/Embedded%3E%20%3CAutoReturn%3E1%3C/AutoReturn%3E%20%3CReturnURL%3Ehttp://shop.masterssupply.net/webcattest/WebCatPageServer.exe%3C/ReturnURL%3E%20%3CCustomCss%3E%20.tdHeader%20{%20%20%20%20%20background-color:%20%23F8F8F8;%20%20%20%20%20padding:%205px;%20%20%20%20%20font-weight:%20bold;%20}%20.tdLabel%20{%20%20%20%20%20font-weight:%20bold;%20%20%20%20%20text-align:%20right;%20%20%20%20%20padding-right:%2010px;%20%20%20%20%20padding-left:%2010px;%20%20%20%20%20padding-top:%2010px;%20%20%20%20%20padding-bottom:%2010px;%20}%20.tdField%20{%20%20%20%20%20padding-right:%2010px;%20%20%20%20%20padding-left:%2010px;%20%20%20%20%20padding-top:%2010px;%20%20%20%20%20padding-bottom:%2010px;%20}%20.content%20{%20%20%20%20%20padding-left:%2010px;%20%20%20%20%20padding-top:%205px;%20%20%20%20%20padding-bottom:%205px;%20%20%20%20%20border-left-style:%20none;%20%20%20%20%20border-left-width:%20none;%20%20%20%20%20border-left-color:%20none;%20%20%20%20%20border-right-style:%20none;%20%20%20%20%20border-right-width:%20none;%20%20%20%20%20border-right-color:%20none;%20}%20.tdTransactionButtons%20{%20%20%20%20%20text-align:%20left;%20%20%20%20%20padding-top:%205px;%20%20%20%20%20height:%2035px;%20%20%20%20%20border-top-style:%20none;%20%20%20%20%20border-top-width:%20none;%20%20%20%20%20border-top-color:%20none;%20%20%20%20%20vertical-align:%20middle;%20}%20body%20{%20%20%20%20%20margin-left:%20none;%20%20%20%20%20font-family:%20arial;%20%20%20%20%20font-size:%2012px;%20%20%20%20%20border:%20none;%20}%20.buttonEmbedded:link%20{%20%20%20%20%20font-size:%2013px;%20%20%20%20%20font-weight:%20bold;%20%20%20%20%20padding-right:%2010px;%20%20%20%20%20padding-left:%2010px;%20%20%20%20%20padding-top:%204px;%20%20%20%20%20padding-bottom:%204px;%20%20%20%20%20border:%204px%20solid%20%23ce701a;%20%20%20%20%20color:%20%23ffffff;%20%20%20%20%20background-color:%20%23ce701a;%20%20%20%20%20text-decoration:%20none;%20%20%20%20%20border-top-style:%20solid;%20%20%20%20%20border-top-width:%201px;%20%20%20%20%20border-top-color:%20%23ce701a;%20%20%20%20%20border-right-color:%20%23ce701a;%20%20%20%20%20border-left-color:%20%23ce701a;%20%20%20%20%20border-bottom-color:%20%23ce701a;%20}%20.buttonCancel{%20%20%20%20%20border:%201px%20solid%20%23444;%20%20%20%20%20font-weight:%20bold;%20%20%20%20%20color:%20%23fff;%20%20%20%20%20border:%201px%20solid%20%23444;%20%20%20%20%20background-color:%20%237c7c7c;%20%20%20%20%20box-shadow:%20none;%20%20%20%20%20border-radius:%200px;%20%20%20%20%20padding:%206px%2012px;%20%20%20%20%20font-size:%2014px;%20%20%20%20%20line-height:%204.428571;%20%20%20%20%20text-decoration:%20none;%20%20%20%20%20padding-right:%2010px;%20%20%20%20%20padding-left:%2010px;%20%20%20%20%20padding-top:%204px;%20%20%20%20%20padding-bottom:%204px;%20%20%20%20%20border-top-style:%20solid;%20%20%20%20%20border-top-width:%201px;%20%20%20%20%20border-top-color:%20%23838383;%20%20%20%20%20border-right-color:%20%23838383;%20%20%20%20%20border-left-color:%20%23838383;%20%20%20%20%20border-bottom-color:%20%23838383;%20}%20.buttonCancel:link%20{%20%20%20%20%20color:%20%23fff;%20}%20.buttonCancel:visited%20{%20%20%20%20%20color:%20%23fff;%20}%20%3C/CustomCss%3E%20%3C/TransactionSetup%3E%20%3C/TransactionSetup%3E%20
Run Code Online (Sandbox Code Playgroud)
如您所见,数据是url编码的.我认为这是问题所在,但我不知道如何解决它.任何指导都会有所帮助.谢谢!
我在ReactJS + Redux项目中设置了MongoDB/Webpack/NodeJS Express.
我正在从redux中的动作创建者那里进行API调用,并且到达API服务器并获得成功的状态,但数据永远不会被保存,即使在终端中检查也不会创建数据库,mongo -> dbs并且它不显示practicedb我命名的数据库它作为.
可能是什么问题?我错过了什么吗?
任何指导或见解将不胜感激.谢谢
这是我为API设置的:
import axios from 'axios';
import { browserHistory } from 'react-router';
import cookie from 'react-cookie';
import { AUTH_USER, AUTH_ERROR } from './types';
const API_URL = 'http://localhost:3000/api';
export function errorHandler(dispatch, error, type) {
let errorMessage = (error.data.error) ? error.data.error : error.data;
// NOT AUTHENTICATED ERROR
if(error.status === 401) {
errorMessage = 'You are not authorized to do this.';
}
dispatch({
type: type,
payload: errorMessage
});
}
export function …Run Code Online (Sandbox Code Playgroud) 尝试从Amazon S3服务器加载图像(将crossorigin设置为匿名)后,我们仍然遇到可怕的错误:
XMLHttpRequest cannot load
http://resource-url No
'Access-Control-Allow-Origin' header is present on the requested resource. Origin
'http://server-url' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)
我们已经尝试了几种CORS配置,例如
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)
以及Amazon的默认CORS配置。仍然,同样的错误。
其他一些注意事项:
curl -XGET -H 'Origin: anonymous' http://resource-url 返回看起来像是图像,从 ?PNG我尽力了,因此,不胜感激。非常感谢!
我已经在spring boot应用程序上开发了rest API。API仅接受GET和POST,但在使用OPTIONS方法请求时,API会响应200状态(而不是405)。我用谷歌搜索了这个问题,但是没有一个解决方案是基于springboot的。
响应:
Allow: OPTIONS, TRACE, GET, HEAD, POST
Public: OPTIONS, TRACE, GET, HEAD, POST
Run Code Online (Sandbox Code Playgroud)
需要禁用OPTIONS方法。
我已经实现了一个Cors政策点网核心应用:在Startup.cs下面ConfigureServices我添加了以下CORS政策
services.AddCors(options =>{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
Run Code Online (Sandbox Code Playgroud)
在添加CORS策略后,我遇到一个奇怪的问题,在每次POST调用时,都会进行两次调用:第一次调用返回204,其他调用返回200状态代码的数据.
我有一个云功能,可以验证客户端表单提交的输入.我正在使用Cloud Functions for Firebase https触发器与cors表达中间件.
Firebase功能
const functions = require('firebase-functions');
const express = require('express');
const cors = require('cors')({origin: true});
const validateImageForm = require('./library/validate-image-form');
exports.apiValidateImageForm = functions.https.onRequest((req, res) => {
cors(req, res, () => {
validateImageForm(req.body.formInputs, req.body.imageStatus).then((data) => {
res.status(200).send(data);
});
});
});
Run Code Online (Sandbox Code Playgroud)
客户呼叫功能
const validateImageFormFetchOptions = {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
method: 'POST',
body: JSON.stringify({
formInputs: formInputs
})
}
fetch('https://project-url.cloudfunctions.net/apiValidateImageForm', validateImageFormFetchOptions)
.then(response => response.json())
.then(serverErrors => {console.log(serverErrors)});
Run Code Online (Sandbox Code Playgroud)
问题
当我使用获取请求从我的客户端调用此函数时,我在函数日志中看到两个apiValidateImageForm触发器.第一个是状态204,我认为这来自检查原点的cors预检请求.最终请求是状态200.当我获取apiValidateImageForm函数时,我只想要一个函数触发器.我担心随着时间的推移,输出状态204的预检请求会为我的项目配额添加不必要的函数调用.
题
是否可以阻止firebase触发预检请求的函数调用?如果没有,那么有没有办法阻止预检请求并成功将数据传递给函数.
cors ×5
javascript ×5
ajax ×2
http ×2
.net-core ×1
amazon-s3 ×1
angular ×1
asp.net-core ×1
cross-domain ×1
firebase ×1
html5 ×1
java ×1
jquery ×1
mongodb ×1
node.js ×1
post ×1
preflight ×1
reactjs ×1
redux-thunk ×1
safari ×1
spring-boot ×1
url-encoding ×1