Могу ли я изменить заголовки HTTP-запроса, отправленного браузером?

Я смотрю на спокойный дизайн и хотел бы использовать методы HTTP (POST, GET, ...) и HTTP заголовки в максимально возможной степени. Я уже узнал, что методы HTTPPUT а такжеDELETE не поддерживаются из браузера.

Теперь я хочу получить разные представления одного и того же ресурса и хотел бы сделать это, изменивAccept заголовок запроса. В зависимости от этогоAccept заголовок, сервер может обслуживать другое представление на одном и том же ресурсе.

Проблема в том, что я не нашел способ указать браузеру изменить этот заголовок.

<a..> тег имеетатрибут типа, который может иметь тип MIME, выглядел как хороший кандидат, но заголовок по-прежнему был браузером по умолчанию (в Firefox его можно изменить вabout:config сnetwork.http.accept.default ключ).

 Sridhar Sarnobat20 окт. 2016 г., 01:35
Это расширение работает довольно хорошо для меня:chrome.google.com/webstore/detail/modify-headers-for-google/...
 Sridhar Sarnobat19 окт. 2016 г., 02:27
Я слышу тебя. Было бы здорово жестко закодировать некоторые заголовки, а на вкладке браузера просто перейти по URL-адресам, чтобы проверить свой код. Я не хочу полноценного отдельного интерфейса, такого как приложение Chrome Postman.

Ответы на вопрос(5)

Используйте немного JavaScript!

xmlhttp=new XMLHttpRequest();
xmlhttp.open('PUT',http://www.mydomain.org/documents/standards/browsers/supportlist)
xmlhttp.send("page content goes here");
 JeroenWyseur17 дек. 2008 г., 16:46
На заметку, спецификация (w3.org/TR/2006/WD-XMLHttpRequest-20060405/#dfn-open) ничего не говорит о PUT и DELETE, см. редакционную заметку. Кроме того, в этом случае нет подтверждения того, что является хорошим интерфейсом с адаптацией, но в противном случае - нет.
 JeroenWyseur17 дек. 2008 г., 16:45
Спасибо за быстрый ответ, но вопрос заключается в изменении заголовков по умолчанию, отправляемых в HTTP-запросе. В частности, заголовок Accept.

ModHeader расширение для Google Chrome, также является хорошим вариантом. Вы можете просто установить нужные заголовки и просто ввести URL-адрес в браузере, он автоматически извлечет заголовки из расширения, когда вы нажмете на URL. Единственное, что он будет отправлять заголовки для каждого URL, который вы нажмете, поэтому вы должны отключить или удалить его после использования.

Решение Вопроса

что это возможно сделать так, как вы пытаетесь это сделать.

Указание принятого формата данных обычно выполняется путем добавления расширения к имени ресурса. Итак, если у вас есть такой ресурс, как

/resources/resource

а такжеGET /resources/resource возвращает его представление HTML, чтобы указать, что вы хотите вместо него представление XML, вы можете использовать следующий шаблон:

/resources/resource.xml

Затем вы должны выполнить принятую магию определения типа контента на стороне сервера.

Или используйте Javascript, как предлагает Джеймс.

 mb1417 июн. 2012 г., 17:20
-1 см. Ответ Shonzilla

полнение к Firefox, которое позволяет вам изменять заголовки принятия (фактически, любые заголовки запроса) для запросов. Работает отлично.

https://addons.mozilla.org/en-US/firefox/addon/967/

 Nhan16 мая 2018 г., 02:49
 MasterJoe228 дек. 2017 г., 01:47
Крис, что, если в расширении есть ошибка, или расширение не работает с версией браузера, которую вы хотите, или если разработчики просто прекратили обновление расширений? Я вижу, что это происходит для большинства, если не для всех расширений Firefox, которые позволяют добавлять / изменять заголовки запросов. Дополнения могут быть простыми и продуктивными, но не будут работать, если есть проблемы с расширениями.
 lathomas6406 мар. 2017 г., 17:30
спасибо это именно то что мне нужно.

ного представления в URI.

Если это возможно, URI должнытолько использоваться для адресации ресурсов ине для туннелирования HTTP методов / глаголов. В конце концов, конкретные бизнес-действия (редактирование, блокировка и т. Д.) Могут быть встроены в URI, если только создание (POST) или обновление (PUT) не служат цели:

POST http://shonzilla.com/orders/08/165;edit

В случае запроса определенного представления в URI вам нужно будет нарушить ваш дизайн URI, в конечном итоге сделав его более уродливым, смешав два разных понятия REST в одном месте (то есть URI) и усложнив обработку запросов на стороне сервера. Что предлагает Милан, и многие делают то же самое, в т.ч. Flickr, именно это.

Вместо этого более RESTful подход будетиспользуя отдельное место для кодирования предпочтительного представления используяAccept Заголовок HTTP, который используется для согласования контента, когда клиент сообщает серверу, какие типы контента он может обрабатывать / обрабатывать, а сервер пытается выполнить запрос клиента. Этот подход является частьюСтандарт HTTP 1.1, программное обеспечение, совместимое и поддерживаемое веб-браузерами.

Сравните это:

GET /orders/08/165.xml HTTP/1.1
or
GET /orders/08/165&format=xml HTTP/1.1

к этому:

GET /orders/08/165 HTTP/1.1
Accept: application/xml

Из веб-браузера вы можете запросить любой тип контента, используяsetRequestHeader методXMLHttpRequest объект. Например:

function getOrder(year, yearlyOrderId, contentType) {
 var client = new XMLHttpRequest();
 client.open("GET", "/order/" + year + "/" + yearlyOrderId);
 client.setRequestHeader("Accept", contentType);
 client.send(orderDetails);
}

Подводя итог: адрес, то есть URI ресурса должен быть независим от его представления иXMLHttpRequest.setRequestHeader Метод позволяет запросить любое представление, используяAccept HTTP заголовок.

Ура!
Shonzilla

 ps_ttf10 мая 2016 г., 18:12
Этот ответ почти убедил меня, но позже я увиделэтот ответ на похожую тему, и я склонен согласиться с последним. Во многих (или в большинстве случаев) информация о формате действительно является частью идентификатора ресурса и может (или должна) быть включена в URI, чтобы избежать неожиданных результатов после совместного использования такого URI между различными клиентами. В этих случаях заголовок Accepts должен играть второстепенную роль. Важно различать эти случаи.
 Jeroen02 мар. 2014 г., 01:03
Недостатком является то, что невозможно (гипер) связать напрямую, чтобы сказатьXML ресурс. Для некоторых приложений это может быть необходимо. Например, в OpenCPU графику можно получить вPNG, PDF или жеSVG формат. Однако было бы невозможно внедритьPNG изображение на странице HTML, еслиAccept заголовок необходим для поиска.
 Lie Ryan22 апр. 2014 г., 21:39
@Jeroen: если браузер поддерживает SVG лучше, чем PNG, он должен отправить заголовок Accept с SVG, взвешенным выше, чем PNG, и ответить SVG. Для браузеров, которые не поддерживают SVG, их заголовок Accept не будет содержать application / svg + xml, поэтому сервер отправит обратно PNG. Если по какой-то причине вы считаете, что версия PNG имеет более высокую точность воспроизведения, чем версия PDF / SVG (например, фотография с векторной трассировкой), то сервер должен установить более высокий вес для версии PNG, чтобы он возвращался, если браузер поддерживает все три одинаково. Вот как должно работать согласование контента.

Ваш ответ на вопрос