Предполагая, что ваше имя исполняемого файла является exec и определено имя переменной x, и вы хотите передать значение x в качестве входного файла для исполняемого файла. Затем сделайте следующее:
$ echo $x > stdin && ./exec < stdin
это выполнит задание
Если вы используете Node.js , попробуйте:
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
Дополнительная информация: CORS на ExpressJS
Если я правильно понял, вы делаете XMLHttpRequest в другой домен, чем ваша страница. Таким образом, браузер блокирует его, поскольку он обычно разрешает запрос в том же самом источнике по соображениям безопасности. Вам нужно сделать что-то другое, если вы хотите выполнить кросс-доменный запрос. Учебник о том, как достичь этого, - Использование CORS .
Когда вы используете почтальон, они не ограничены этой политикой. Цитируется из Cross-Origin XMLHttpRequest :
. Обычные веб-страницы могут использовать объект XMLHttpRequest для отправки и получения данных с удаленных серверов, но они 'ограничивается одной и той же политикой происхождения. Расширения не так ограничены. Расширение может разговаривать с удаленными серверами за пределами его происхождения, если оно сначала запрашивает разрешения перекрестного происхождения.
В Ajax есть междоменная проблема. Вы должны быть уверены, что получаете доступ к своим файлам на одном и том же пути http://
без www.
(или доступ из http://www.
и сообщение на тот же путь, в том числе www.
), который браузер считает другим доменом при доступе через www.
, поэтому вы видите, где проблема. Вы отправляете в другой домен, и браузер блокирует поток из-за ошибки происхождения.
Если API не размещен на том же хосте, который вы запрашиваете, поток заблокирован, и вам нужно будет найти другой способ связи с API.
Если вы НЕ хотите:
, и вы уверены, что на вашем сервере включен CORS (проверьте CORS здесь: http://www.test-cors.org/ )
Затем вам необходимо передать исходный параметр с вашим запросом. Это начало ДОЛЖНО соответствовать тому, что ваш браузер отправляет с вашим запросом.
Вы можете увидеть его в действии здесь: http://www.wikibackpacker.com/app/detail/Campgrounds/3591
Функциональность редактирования отправляет GET & amp; POST-запрос в другой домен для извлечения данных. Я устанавливаю параметр origin, который решает проблему.
tldr: добавьте параметр «происхождение» к вашим вызовам, которые должны быть параметром Origin, который отправляет ваш браузер (вы не можете обманывать исходный параметр)
t.post("https://wiki.wikinomad.com/api.php?origin=https://www.wikinomad.com", n, o).then(function(e) {...
. Если да, то не правда ли, что этот способ указания происхождения требует, чтобы PHP служил из «бэкэнда», закодирована для его поддержки, и этот ответ не будет работать иначе?
– CODE-REaD
15 February 2018 в 21:18
Поскольку $ .ajax ({type: "POST" - вызывает OPTIONS $ .post (- Calls POST
, оба являются разными почтовыми вызовами «POST» правильно, но когда мы называем это «OPTIONS»,
Для веб-служб c # - webapi
Пожалуйста, добавьте следующий код в свой файл web.config под тегом & lt; system.webServer & gt ;. Это будет работать
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
Пожалуйста, убедитесь, что вы не ошибаетесь в вызове ajax
jQuery
$.ajax({
url: 'http://mysite.microsoft.sample.xyz.com/api/mycall',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
type: "POST", /* or type:"GET" or type:"PUT" */
dataType: "json",
data: {
},
success: function (result) {
console.log(result);
},
error: function () {
console.log("error");
}
});
Угловая проблема 4: см. http: //www.hubfly .com / blog / solutions / how-to-fix-angular-4-api-call-issues /
Примечание: если вы ищете загрузку контента с стороннего веб-сайта, тогда это не будет помогите вам. Вы можете попробовать следующий код, но не JavaScript.
System.Net.WebClient wc = new System.Net.WebClient();
string str = wc.DownloadString("http://mysite.microsoft.sample.xyz.com/api/mycall");
*
используйте https://www.myotherdomain.com
– pechar
9 June 2017 в 08:30
Если вы вернетесь в JSON в ответ, попробуйте использовать JSONP (обратите внимание на P в конце) для разговора между доменами:
$.ajax({
type: "POST",
dataType: 'jsonp',
...... etc ......
Узнайте больше о работе с JSONP здесь :
Появление JSONP - по существу, совместный скриптовый скриптовый скрипт - открыло дверь для мощных mashups содержание. Многие известные сайты предоставляют услуги JSONP, позволяя вам получить доступ к их контенту через предопределенный API.
JSONP
, $ .ajax игнорирует type
, поэтому всегда GET
означает, что этот ответ всегда будет работать.
– noob
6 October 2016 в 03:56
dataType
в настройках запроса AJAX не будет работать.
– Rory McCrossan
7 September 2017 в 10:19
У меня возникла проблема с этим, когда я использовал AngularJS для доступа к моему API. Тот же запрос работал в SoapUI 5.0 и ColdFusion. У моего метода GET уже был заголовок Access-Control-Allow-Origin.
Я узнал, что AngularJS делает запрос пробных запросов. ColdFusion по умолчанию генерирует метод OPTIONS, но в нем не так много, эти заголовки специально. Ошибка возникла в ответ на этот вызов OPTIONS, а не на мой намеренный вызов GET. После того, как я добавил метод OPTIONS ниже в свой API, проблема была решена.
<cffunction name="optionsMethod" access="remote" output="false" returntype="any" httpmethod="OPTIONS" description="Method to respond to AngularJS trial call">
<cfheader name="Access-Control-Allow-Headers" value="Content-Type,x-requested-with,Authorization,Access-Control-Allow-Origin">
<cfheader name="Access-Control-Allow-Methods" value="GET,OPTIONS">
<cfheader name="Access-Control-Allow-Origin" value="*">
<cfheader name="Access-Control-Max-Age" value="360">
</cffunction>
Это очень просто решить, если вы используете PHP . Просто добавьте следующий скрипт в начале вашей страницы PHP, который обрабатывает запрос:
<?php header('Access-Control-Allow-Origin: *'); ?>
Внимание! Это содержит проблему безопасности для вашего файла PHP, которую он может вызывать злоумышленниками. вы должны использовать сеансы и файлы cookie для проверки подлинности, чтобы предотвратить ваш файл / службу от этой атаки. Ваш сервис уязвим для подделки запроса на межсайтовый доступ (CSRF).
Если вы используете Node-red , вы должны разрешить CORS в node-red/settings.js
, не комментируя следующие строки:
// The following property can be used to configure cross-origin resource sharing
// in the HTTP nodes.
// See https://github.com/troygoode/node-cors#configuration-options for
// details on its contents. The following is a basic permissive set of options:
httpNodeCors: {
origin: "*",
methods: "GET,PUT,POST,DELETE"
},
Это не исправление для производства или когда приложение должно быть показано клиенту, это полезно только в том случае, если разработка UI и Backend на разных серверах и в процессе производства они фактически находятся на одном сервере. Например: при разработке пользовательского интерфейса для любого приложения, если есть необходимость протестировать его локально, указывая на сервер бэкэнд, в этом случае это идеальное решение. Для производственного исправления заголовки CORS должны быть добавлены на серверный сервер, чтобы разрешить доступ к кросс-контенту.
Легкий способ - просто добавить расширение в google chrome чтобы разрешить доступ с помощью CORS.
Просто включите это расширение, когда вы хотите разрешить доступ к запросу заголовка «access-control-allow-origin».
Или
В Windows вставьте эта команда в окне запуска
chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
откроет новый браузер Chrome, который разрешит доступ к запросу заголовка «access-control-allow-origin».
Попробуйте XDomain ,
Сводка: Чистая альтернатива JavaScript / CORS для JavaScript. Не требуется настройка сервера - просто добавьте proxy.html в домене, с которым вы хотите общаться. Эта библиотека использует XHook для захвата всех XHR , поэтому XDomain должен работать совместно с любой библиотекой.
Я хочу, чтобы кто-то поделился этим сайтом со мной давно http://cors.io/ , он бы сэкономил массу времени по сравнению со строительством и полагался на мой собственный прокси. Однако, когда вы переходите к производству, ваш собственный прокси-сервер является лучшим выбором, поскольку вы все еще контролируете все аспекты ваших данных.
Все, что вам нужно:
https://cors.io/?http://HTTP_YOUR_LINK_HERE
This application is temporarily over its serving quota. Please try again later.
– Daniel Hickman
20 February 2016 в 08:52
У меня была следующая конфигурация, приводящая к той же ошибке при запросе ответов с сервера.
Серверная сторона: SparkJava - > предоставляет клиентскую часть REST-API: ExtJs6 -> обеспечивает рендеринг браузера
На стороне сервера мне пришлось добавить это к ответу:
Spark.get("/someRestCallToSpark", (req, res) -> {
res.header("Access-Control-Allow-Origin", "*"); //important, otherwise its not working
return "some text";
});
На стороне клиента мне пришлось добавить к запросу:
Ext.Ajax.request({
url: "http://localhost:4567/someRestCallToSpark",
useDefaultXhrHeader: false, //important, otherwise its not working
success: function(response, opts) {console.log("success")},
failure: function(response, opts) {console.log("failure")}
});
В моем случае я использовал приложение JEE7 JAX-RS, и следующие трюки отлично работали для меня:
@GET
@Path("{id}")
public Response getEventData(@PathParam("id") String id) throws FileNotFoundException {
InputStream inputStream = getClass().getClassLoader().getResourceAsStream("/eventdata/" + id + ".json");
JsonReader jsonReader = Json.createReader(inputStream);
return Response.ok(jsonReader.readObject()).header("Access-Control-Allow-Origin", "*").build();
}
На основе ответа shruti я создал ярлык браузера Chrome с необходимыми аргументами:
Я успешно смог решить (в моем случае для шрифтов) с помощью htaccess, но, очевидно, OP задает немного разные. Но вы можете использовать шаблон FileMatch и добавить любое расширение, чтобы он не выдавал ошибку cros.
<IfModule mod_headers.c>
<FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|font.css|css)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
Большинство этих ответов говорят пользователям, как добавить заголовки CORS на сервер, который они контролируют.
Однако, если вам нужны данные с сервера, который вы не контролируете на веб-странице, одним из решений является создание тег сценария на вашей странице, установите атрибут src в конечную точку api, у которой нет заголовков CORS, затем загрузите эти данные на страницу:
window.handleData = function(data) {
console.log(data)
};
var script = document.createElement('script');
script.setAttribute('src','https://some.api/without/cors/headers.com&callback=handleData');
document.body.appendChild(script);
На моем веб-сайте (на основе .NET) я только что добавил это:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
</system.webServer>
Большое спасибо этому видео .
Много раз это происходит со мной от javascript к моему php api, потому что одна из нескольких причин. Я забыл поставить <?php header('Access-Control-Allow-Origin: *'); ?
один. Это полезно для доступа к перекрестным доменам. Другая причина заключается в том, что в jQuery ajax-запросе я указываю конкретный тип данных и возвращаю другой тип данных, поэтому он выдает ошибку.
Последней и самой известной причиной этой ошибки является ошибка синтаксического анализа на запрашиваемой странице. Если вы нажмете URL-адрес этой страницы в своем браузере, более вероятно, вы увидите ошибку синтаксического анализа, и у вас будет номер строки для решения проблемы.
Надеюсь, это поможет кому-то. Мне потребовалось некоторое время, чтобы отладить это, и я бы хотел, чтобы у меня был контрольный список вещей для проверки.
Возможно, это немного сложнее, но вы можете использовать веб-сервер для маршрутизации запроса. С nodejs вы не имеете этой проблемы. Я не эксперт в узле js. Поэтому я не знаю, является ли это чистым кодом.
Но это работает для меня
Вот немного примера:
NODE JS
var rp = require('request-promise');
var express = require('express'),
app = express(),
port = process.env.PORT || 3000;
var options = {
method: 'POST',
uri: 'http://api.posttestserver.com/post',
body: {
some: 'payload'
},
json: true // Automatically stringifies the body to JSON
};
app.get('/', function (req, res) {
rp(options)
.then(function (parsedBody) {
res.send(parsedBody)
})
.catch(function (err) {
res.send(err)
});
});
app.listen(port);
JS
axios.get("http://localhost:3000/").then((res)=>{
console.log('================res====================');
console.log(res);
console.log('====================================');
})
Популярный вопрос - Еще одна вещь, на которую нужно смотреть, если вы читали это далеко, и ничего больше не помогло. Если у вас есть CDN, например Akamai, Limelight или подобное, вы можете проверить ключ кеша, который у вас есть для URI ресурса. Если он не содержит значение заголовка Origin, вы можете вернуть ответ в кешированный запрос по другому источнику. Мы просто потратили полдня на отладку. Конфигурация CDN была обновлена, чтобы включать только значение Origin для нескольких выбранных доменов, которые являются нашими, и установить для него значение null для всех остальных. Это похоже на работу и позволяет браузерам из наших известных доменов просматривать наши ресурсы. Конечно, все остальные ответы являются предпосылками для получения здесь, но если CDN является первым переходом из вашего браузера, это то, что нужно рассмотреть.
В нашем случае мы могли видеть, что некоторые запросы поступают к нашей службе, но не к тому объему, который отправлял сайт. Это указывало нам на CDN. Мы смогли вернуться и посмотреть, что исходный запрос был подан с помощью прямого запроса, а не части вызова AJAX браузера, и заголовок ответа Access-Control-Allow-Origin не был включен. По-видимому, CDN кэшировал это значение. Конфигурация конфигурации CDA Akamai, чтобы рассмотреть значение заголовка запроса Origin как часть совпадения, похоже, заставила его работать для нас.
Vary: Origin
, тот же эффект? [Д0] stackoverflow.com/questions/46063304/…
– sideshowbarker
7 September 2017 в 21:19
Для Opera (он работает так же, как Chrome), я запустил браузер с помощью этой команды:
opera --user-data-dir="~/Downloads/opera-session" --disable-web-security
Проблема решена! Теперь я могу работать с локальным HTML-файлом (на моем жестком диске) и вызывать запросы Ajax для удаленного источника в том же файле.
Примечание 1: Вы можете указать любую папку в вашем домашнем каталоге как -user-data-dir.
Примечание 2: Протестировано на Debian & nbsp; 8 (Jessie) / Opera 39
Когда вы начинаете нормально (без параметров выше), тот же запрос попадает в блок кода ошибки.
[EnableCors(origins: "http://websitelink.com", headers: "*", methods: "*")]
, но он не работает. Любая идея? forums.asp.net/p/2117965/… / g0]
– Si8
24 March 2017 в 15:12
В запрошенном ресурсе нет заголовка «Access-Control-Allow-Origin». Поэтому исходный адрес https://sx.xyz.com 'не разрешен.
Я столкнулся с аналогичной проблемой с Exchange Domain Exchange в ответе Ajax как ошибка не определено. Но ответ в заголовке был кодом состояния: 200 OK
Failed to load https://www.Domain.in/index.php?route=api/synchronization/checkapikey:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'https://sx.xyz.in' is therefore not allowed access.
Решение для его обхода: в моем случае это было вызов функции checkapikey () через Ajax в другой домен и получение ответа с данные, на которые был сделан вызов:
if (($this->request->server['REQUEST_METHOD'] == 'POST') && isset($this->request->server['HTTP_ORIGIN'])) {
$this->response->addHeader('Access-Control-Allow-Origin: ' . $this->request->server['HTTP_ORIGIN']);
$this->response->addHeader('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
$this->response->addHeader('Access-Control-Max-Age: 1000');
$this->response->addHeader('Access-Control-Allow-Credentials: true');
$this->response->addHeader('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');
$headers = getallheaders();
...
}
[EnableCors(origins: "http://websitelink.com", headers: "*", methods: "*")]
, но он не работает. Любая идея? forums.asp.net/p/2117965/… / g0]
– Si8
24 March 2017 в 15:12
"Access-Control-Allow-Origin", "*"
, см. security.stackexchange.com/a/45677 . tldr: Спецификация W3 действительно рекомендует: ресурс, который является общедоступным, без проверок контроля доступа, всегда может безопасно возвращать заголовок Access-Control-Allow-Origin, чье значение имеет значение «*» i> – CODE-REaD 15 February 2018 в 17:45