#javascript #jquery #ajax #wordpress #cors
#javascript #jquery #ajax #wordpress #cors
Вопрос:
Я пытаюсь получить доступ к REST API на базе Woocommerce WordPress, используя Javascript, и мне удается сделать это для запросов GET, которые не требуют специальных заголовков. Тем не менее, при добавлении заголовка Content-Type
to application/json
я продолжаю получать предполетные OPTIONS
запросы, на которые отвечают 401, несмотря на получение всех правильных заголовков ответа, которые разрешают все заголовки.
(В случае, если я отправляю с text/plain
Content-Type
, я получаю ответ 400 с "Content, title, and excerpt are empty"
, поскольку он не может быть проанализирован без application/json
, так что это не проблема с авторизацией, это также требуется в документах).
Пример запроса :
OPTIONS /wp-json/wc/v1/products?oauth_consumer_key=ck_fXXXXX HTTP/1.1
Host: XXXXXXX.com
Connection: keep-alive
Cache-Control: max-age=0
Access-Control-Request-Method: POST
Origin: http://localhost:81
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
Access-Control-Request-Headers: content-type
Accept: */*
Referer: http://localhost:81/wc_test.html
Accept-Encoding: gzip, deflate, sdch
Accept-Language: he-IL,he;q=0.8,en-US;q=0.6,en;q=0.4
И следующий ответ :
HTTP/1.1 401 Unauthorized
Date: Sat, 22 Oct 2016 20:24:24 GMT
Server: Apache/2.4.23
X-Powered-By: PHP/5.4.45
Vary: Cookie,Accept-Encoding,User-Agent
X-UA-Compatible: IE=edge,chrome=1
X-Robots-Tag: noindex
Link: <http://XXXXXXXX.com/wp-json/>; rel="https://api.w.org/"
X-Content-Type-Options: nosniff
Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages
Access-Control-Allow-Headers: *
Access-Control-Allow-Origin: http://localhost:81
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE
Access-Control-Allow-Credentials: true
Content-Encoding: gzip
Access-Control-Max-Age: 3600
Content-Length: 156
Keep-Alive: timeout=5
Connection: Keep-Alive
Content-Type: application/json; charset=UTF-8
Безуспешно пытался добавить специально Content-Type
и не *
разрешать заголовки, с Access-Control-Max-Age
или без, и т.д. И т.п.
Это происходит специально для этого application/json
, если бы я изменил его на text/plain
, он работает идеально.
В чем может быть проблема? В соответствии с запросами это выглядит совершенно нормально.
Комментарии:
1. Попробуйте отправить запрос с некоторыми действительными учетными данными. Заголовок добавления и авторизации. Например
Authorization: Basic aHR0cHdhdGNoOmY=
. Другим вариантом было бы использование учетных данных в URL:https://user:password@www.example.com/wp-json/wc/v1/products?oauth_consumer_key=ck_fXXXXX
2. @victor175 Мне не нужна базовая аутентификация, хотя при отправке запросов GET все в порядке, OAuth устраняет необходимость авторизации в этом процессе.
3. На сервере вы можете запретить или ограничить различные типы запросов, включая GET. Итак, очевидно, что у вас также есть проблема с авторизацией, если вы получаете 401. Итак, вам нужно каким-то образом авторизоваться.
4. @victor175 Я получаю 401 независимо от авторизации, в случае, если я отправляю его текстовым / обычным способом, я получаю ответ 400 с «Содержимое, заголовок и выдержка пусты», поскольку он, по-видимому, не может быть проанализирован без заголовка Content-Type.