HTTP-запрос (Hypertext Transfer Protocol request) – это запрос, который отправляется браузером на сайт для выполнения определенного действия после обработки запроса сервером. HTTP-запрос содержит различные элементы, включая метод запроса, URL-адрес ресурса, который нужно получить или изменить, заголовки запроса и, при необходимости, тело запроса. Наиболее часто используемые методы запроса в HTTP включают GET (получение ресурса), POST (отправка данных для обработки на сервере), PUT (обновление ресурса), DELETE (удаление ресурса) и другие.
Пример HTTP-запроса:
GET /example/path HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:100.0) Gecko/20100101 Firefox/100.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*)) { document.addEventListener("mousemove", resizeIframe, false); } }, false); document.addEventListener("mouseup", function(){ if (isIframeActive()) { document.removeEventListener("mousemove", resizeIframe, false); } }, false); barEl.onclick = function (e) { var target = e.target, block = findAncestor(target, blockClass); if (block && !block.classList.contains(titleClass) && !block.classList.contains(ignoreClickClass) && e.which !== 2 && !e.ctrlKey ) { while (target !== this) { if (target.href) { removeActiveBlocksCls(); block.classList.add(blockActiveClass); showIframe(target.href); } target = target.parentNode; } e.preventDefault(); } }; toggleEl.onclick = togglePosition; } function findAncestor(el, cls) { while ((el = el.parentElement) && !el.classList.contains(cls)) ; return el; } function renderAjaxRequests() { var requestCounter = document.getElementsByClassName('yii-debug-toolbar__ajax_counter'); if (!requestCounter.length) { return; } var ajaxToolbarPanel = document.querySelector('.yii-debug-toolbar__ajax'); var tbodies = document.getElementsByClassName('yii-debug-toolbar__ajax_requests'); var state = 'ok'; if (tbodies.length) { var tbody = tbodies[0]; var rows = document.createDocumentFragment(); if (requestStack.length) { var firstItem = requestStack.length > 20 ? requestStack.length - 20 : 0; for (var i = firstItem; i < requestStack.length; i++) { var request = requestStack[i]; var row = document.createElement('tr'); rows.appendChild(row); var methodCell = document.createElement('td'); methodCell.innerHTML = request.method; row.appendChild(methodCell); var statusCodeCell = document.createElement('td'); var statusCode = document.createElement('span'); if (request.statusCode < 300) { statusCode.setAttribute('class', 'yii-debug-toolbar__ajax_request_status yii-debug-toolbar__label_success'); } else if (request.statusCode < 400) { statusCode.setAttribute('class', 'yii-debug-toolbar__ajax_request_status yii-debug-toolbar__label_warning'); } else { statusCode.setAttribute('class', 'yii-debug-toolbar__ajax_request_status yii-debug-toolbar__label_error'); } statusCode.textContent = request.statusCode || '-'; statusCodeCell.appendChild(statusCode); row.appendChild(statusCodeCell); var pathCell = document.createElement('td'); pathCell.className = 'yii-debug-toolbar__ajax_request_url'; pathCell.innerHTML = request.url; pathCell.setAttribute('title', request.url); row.appendChild(pathCell); var durationCell = document.createElement('td'); durationCell.className = 'yii-debug-toolbar__ajax_request_duration'; if (request.duration) { durationCell.innerText = request.duration + " ms"; } else { durationCell.innerText = '-'; } row.appendChild(durationCell); row.appendChild(document.createTextNode(' ')); var profilerCell = document.createElement('td'); if (request.profilerUrl) { var profilerLink = document.createElement('a'); profilerLink.setAttribute('href', request.profilerUrl); profilerLink.innerText = request.profile; profilerCell.appendChild(profilerLink); } else { profilerCell.innerText = 'n/a'; } row.appendChild(profilerCell); if (request.error) { if (state !== "loading" && i > requestStack.length - 4) { state = 'error'; } } else if (request.loading) { state = 'loading' } row.className = 'yii-debug-toolbar__ajax_request'; } while (tbody.firstChild) { tbody.removeChild(tbody.firstChild); } tbody.appendChild(rows); } ajaxToolbarPanel.style.display = 'block'; } requestCounter[0].innerText = requestStack.length; var className = 'yii-debug-toolbar__label yii-debug-toolbar__ajax_counter'; if (state === 'ok') { className += ' yii-debug-toolbar__label_success'; } else if (state === 'error') { className += ' yii-debug-toolbar__label_error'; } requestCounter[0].className = className; } function shouldTrackRequest(requestUrl) { if (!toolbarEl) { return false; } var a = document.createElement('a'); a.href = requestUrl; var skipAjaxRequestUrls = JSON.parse(toolbarEl.getAttribute('data-skip-urls')); if (Array.isArray(skipAjaxRequestUrls) && skipAjaxRequestUrls.length && skipAjaxRequestUrls.includes(requestUrl)) { return false; } return a.host === location.host; } var proxied = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function (method, url, async, user, pass) { var self = this; if (shouldTrackRequest(url)) { var stackElement = { loading: true, error: false, url: url, method: method, start: new Date() }; requestStack.push(stackElement); this.addEventListener('readystatechange', function () { if (self.readyState === 4) { stackElement.duration = self.getResponseHeader('X-Debug-Duration') || new Date() - stackElement.start; stackElement.loading = false; stackElement.statusCode = self.status; stackElement.error = self.status < 200 || self.status >= 400; stackElement.profile = self.getResponseHeader('X-Debug-Tag'); stackElement.profilerUrl = self.getResponseHeader('X-Debug-Link'); renderAjaxRequests(); } }, false); renderAjaxRequests(); } proxied.apply(this, Array.prototype.slice.call(arguments)); }; if (window.fetch) { var originalFetch = window.fetch; window.fetch = function (input, init) { var method; var url; if (typeof input === 'string') { method = (init && init.method) || 'GET'; url = input; } else if (window.URL && input instanceof URL) { method = (init && init.method) || 'GET'; url = input.href; } else if (window.Request && input instanceof Request) { method = input.method; url = input.url; } var promise = originalFetch(input, init); if (shouldTrackRequest(url)) { var stackElement = { loading: true, error: false, url: url, method: method, start: new Date() }; requestStack.push(stackElement); promise.then(function (response) { stackElement.duration = response.headers.get('X-Debug-Duration') || new Date() - stackElement.start; stackElement.loading = false; stackElement.statusCode = response.status; stackElement.error = response.status < 200 || response.status >= 400; stackElement.profile = response.headers.get('X-Debug-Tag'); stackElement.profilerUrl = response.headers.get('X-Debug-Link'); renderAjaxRequests(); return response; }).catch(function (error) { stackElement.loading = false; stackElement.error = true; renderAjaxRequests(); throw error; }); renderAjaxRequests(); } return promise; }; } })();