Tôi đang có trang web có một số trang kết nối HTTPS. Từ các trang HTTPS này, tôi phải sử dụng một yêu cầu HTTP Ajax để truy xuất một số lỗi như các trường trống. Nhưng thông báo lỗi này không đến. Có bất kỳ giải pháp cho nó hoặc tôi phải làm cho rằng AJAX yêu cầu để nộp trên kết nối HTTPS?Yêu cầu HTTP Ajax qua HTTPS Trang
Trả lời
Điều này là không thể do Same Origin Policy.
Bạn cũng sẽ cần chuyển yêu cầu Ajax sang https.
Ngay cả bản thảo làm việc của Chia sẻ nguồn gốc chéo cũng không thể thực hiện được: http://www.w3.org/TR/cors/#user-agent-security – Harmen
Cảm ơn bạn đã trả lời tất cả mọi người. Tôi đã thay đổi trang web của mình theo cùng một chính sách gốc. – cooldude
@NickSotiros Tại sao bạn không muốn nó an toàn? Không có nhược điểm nào và các yêu cầu HTTP trên một trang HTTPS có thể bị tấn công bởi một MITM để tiêm JS độc hại. – ceejayoz
Trong một số trường hợp, yêu cầu một chiều không có phản hồi có thể được kích hoạt đến máy chủ TCP, không có chứng chỉ SSL. Máy chủ TCP, trái ngược với máy chủ HTTP, sẽ bắt bạn yêu cầu. Tuy nhiên, sẽ không có quyền truy cập vào bất kỳ dữ liệu nào được gửi từ trình duyệt, bởi vì trình duyệt sẽ không gửi bất kỳ dữ liệu nào mà không có kiểm tra chứng chỉ tích cực. Và trong trường hợp đặc biệt, ngay cả một tín hiệu TCP trần mà không có bất kỳ dữ liệu nào cũng đủ để thực thi một số tác vụ. Ví dụ cho một thiết bị IoT trong mạng LAN để bắt đầu kết nối với một dịch vụ bên ngoài. Link
Đây là loại trình kích hoạt "Wake Up", hoạt động trên cổng không có bảo mật.
Trong trường hợp phản hồi là cần thiết, điều này có thể được triển khai bằng máy chủ https công cộng được bảo mật, có thể gửi dữ liệu cần thiết về trình duyệt bằng cách sử dụng ví dụ: Websockets.
Tuy nhiên, điều này có thể được thực hiện với các bước sau:
gửi một yêu cầu ajax https để trang web của bạn (cùng một tên miền)
jQuery.ajax({ 'url' : '//same_domain.com/ajax_receiver.php', 'type' : 'get', 'data' : {'foo' : 'bar'}, 'success' : function(response) { console.log('Successful request'); } }).fail(function(xhr, err) { console.error('Request error'); });
được yêu cầu ajax, cho ví dụ, bởi php, và làm cho một CURL nhận được yêu cầu đến bất kỳ trang web mong muốn thông qua http.
use linslin\yii2\curl; $curl = new curl\Curl(); $curl->get('http://example.com');
Nếu không có bất kỳ giải pháp phía máy chủ, Theres chỉ là một cách thức mà một trang an toàn có thể nhận được một cái gì đó từ một trang không an toàn/yêu cầu và đó là nghĩ postMessage và một popup
tôi đã nói bật lên cuz trang web không được phép trộn nội dung. Nhưng một popup không thực sự trộn lẫn. Nó có cửa sổ riêng nhưng vẫn có thể giao tiếp với trình mở bằng postMessage.
Vì vậy, bạn có thể mở một mới http-page với window.open(...)
và có mà đưa ra yêu cầu cho bạn (có nghĩa là nếu trang web đang sử dụng CORS cũng)
XDomain đến tâm trí khi tôi viết này nhưng đây là một cách tiếp cận hiện đại bằng cách sử dụng mới fetch api, lợi thế là streaming các tập tin lớn, nhược điểm là nó sẽ không làm việc trong tất cả các trình duyệt
Bạn đặt kịch bản proxy này trên bất kỳ trang http
onmessage = evt => {
const port = evt.ports[0]
fetch(...evt.data).then(res => {
// the response is not clonable
// so we make a new plain object
const obj = {
bodyUsed: false,
headers: [...res.headers],
ok: res.ok,
redirected: res.redurected,
status: res.status,
statusText: res.statusText,
type: res.type,
url: res.url
}
port.postMessage(obj)
// Pipe the request to the port (MessageChannel)
const reader = res.body.getReader()
const pump =() => reader.read()
.then(({value, done}) => done
? port.postMessage(done)
: (port.postMessage(value), pump())
)
// start the pipe
pump()
})
}
Sau đó, bạn mở một cửa sổ popup trong trang https (lưu ý rằng bạn chỉ có thể làm điều này trên một sự kiện tương tác người dùng hoặc nếu không nó sẽ bị chặn)
window.popup = window.open(http://.../proxy.html)
tạo chức năng hữu ích của bạn
function xfetch(...args) {
// tell the proxy to make the request
const ms = new MessageChannel
popup.postMessage(args, '*', [ms.port1])
// Resolves when the headers comes
return new Promise((rs, rj) => {
// First message will resolve the Response Object
ms.port2.onmessage = ({data}) => {
const stream = new ReadableStream({
start(controller) {
// Change the onmessage to pipe the remaning request
ms.port2.onmessage = evt => {
if (evt.data === true) // Done?
controller.close()
else // enqueue the buffer to the stream
controller.enqueue(evt.data)
}
}
})
// Construct a new response with the
// response headers and a stream
rs(new Response(stream, data))
}
})
}
Và thực hiện yêu cầu như bạn thường làm với lấy api
xfetch('http://httpbin.org/get')
.then(res => res.text())
.then(console.log)
từ javascript tôi đã cố gắng từ nhiều cách và tôi không thể.
Bạn cần một giải pháp phía máy chủ, ví dụ trên C# Tôi đã tạo bộ điều khiển gọi đến http, vi deserialize đối tượng và kết quả là khi tôi gọi từ javascript, tôi đang thực hiện yêu cầu từ https://domain vào miền htpps: // của tôi. Xin vui lòng xem C# mã của tôi:
[Authorize]
public class CurrencyServicesController : Controller
{
HttpClient client;
//GET: CurrencyServices/Consultar?url=valores?moedas=USD&alt=json
public async Task<dynamic> Consultar(string url)
{
client = new HttpClient();
client.BaseAddress = new Uri("http://api.promasters.net.br/cotacao/v1/");
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
System.Net.Http.HttpResponseMessage response = client.GetAsync(url).Result;
var FromURL = response.Content.ReadAsStringAsync().Result;
return JsonConvert.DeserializeObject(FromURL);
}
Và hãy để tôi chỉ cho bạn phía khách hàng của tôi (Javascript)
<script async>
$(document).ready(function (data) {
var TheUrl = '@Url.Action("Consultar", "CurrencyServices")?url=valores';
$.getJSON(TheUrl)
.done(function (data) {
$('#DolarQuotation').html(
'$ ' + data.valores.USD.valor.toFixed(2) + ','
);
$('#EuroQuotation').html(
'€ ' + data.valores.EUR.valor.toFixed(2) + ','
);
$('#ARGPesoQuotation').html(
'Ar$ ' + data.valores.ARS.valor.toFixed(2) + ''
);
});
});
Tôi mong rằng điều này giúp bạn! Chúc mừng
- 1. Yêu cầu HTTPS qua AJAX từ trang HTTP
- 2. Cookie HTTP và các yêu cầu Ajax qua HTTPS
- 3. Yêu cầu HTTPS HTTPS đến HTTP
- 4. Thay đổi HTTP bài yêu cầu HTTPS bài yêu cầu:
- 5. jQuery ajax sẽ không thực hiện các yêu cầu HTTPS
- 6. Yêu cầu AJAX chéo trang
- 7. Cách biết yêu cầu là http hoặc https trong node.js
- 8. Phản hồi đúng yêu cầu HEAD HTTP trên trang web chỉ có HTTPS
- 9. Yêu cầu HEAD Ajax qua Javascript/jQuery
- 10. PhoneGap có hỗ trợ các yêu cầu HTTPS ajax không?
- 11. Python urllib2> HTTP Proxy> HTTPS yêu cầu
- 12. HTTP 400: Lỗi yêu cầu không hợp lệ trong yêu cầu HTTPS ADFS
- 13. Đảm bảo yêu cầu AJAX qua GUID
- 14. yêu cầu http với powershell
- 15. Đường ray - Không chặn yêu cầu HTTP?
- 16. Yêu cầu HTTPS trong Ruby
- 17. Nhận tệp JS qua HTTPS từ trang HTTP
- 18. Yêu cầu ajax gửi qua mạng qua Phonegap-Javascript
- 19. HTTPS-> HTTP qua Fiddler
- 20. Yêu cầu jQuery Ajax bên trong Yêu cầu Ajax
- 21. JSP/Servlet Cách xác định xem yêu cầu HTTP đến từ yêu cầu ajax
- 22. Cách phân phối các yêu cầu HTTP qua thiên thạch
- 23. Yêu cầu DELETE HTTP
- 24. Yêu cầu HTTPS trong NodeJS
- 25. Yêu cầu HTTPS với Boost.Asio và OpenSSL
- 26. Đảm bảo yêu cầu ajax
- 27. jsTree - tải subnodes qua ajax theo yêu cầu
- 28. Đi qua Tuỳ chỉnh Headers yêu cầu Ajax trên Select2
- 29. Cách gửi nội dung html thông qua yêu cầu ajax?
- 30. Yêu cầu Https, xác thực trong Android
ajax sẽ chạy tốt trên https, bạn có thể đăng đoạn mã thực tế của mình không? – Manny
Âm thanh như SOP (http://en.wikipedia.org/wiki/Same_origin_policy): các lược đồ khác nhau, vì vậy nó là một nguồn gốc khác. –
Cảm ơn câu trả lời. Tôi đã thay đổi trang web của mình cho phù hợp. – cooldude