Метод запроса - OPTIONS вместо post (существующая запись StackExchange не помогает) - PullRequest
5 голосов
/ 22 октября 2011

Прежде чем вы скажете, что есть еще один пост ( jQuery $ .ajax (), $ .post отправляет "OPTIONS" как REQUEST_METHOD в Firefox ), да, это совсем не помогает, поэтому ..

Я использую последнюю версию Chrome dev, и когда я пытаюсь отправить файл в API службы удаленного конвертера видео, это работает (все в coffeescript). Давайте назовем этот код 1:

  json_string = getNewSignedParams()

  xhr = new XMLHttpRequest
  xhr.open('POST', some_url, true)
  xhr.setRequestHeader("Cache-Control", "no-cache")
  xhr.setRequestHeader("Content-Type", "application/octet-stream")
  xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest")
  xhr.setRequestHeader("X-File-Name", some_file.name || some_file.fileName)
  xhr.setRequestHeader("X-Query-Params", json_string)

  xhr.send some_file

Выше возвращает 200 и просто работает. Но у меня есть jQuery на странице, поэтому я подумал, что буду использовать его, поэтому у меня есть версия jQuery, как это. И давайте назовем этот код 2:

  $.ajax
    url:  some_url
    type: 'post'
    data: some_file
    processData: false 
    beforeSend: (xhr) ->
      xhr.setRequestHeader("Cache-Control", "no-cache")
      xhr.setRequestHeader("Content-Type", "application/octet-stream")
      xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest")
      xhr.setRequestHeader("X-File-Name", some_file.name || some_file.fileName)
      xhr.setRequestHeader("X-Query-Params", json_string)
    success: ->
      console.log 'success'

Я получаю эти 400 (неверный запрос), говоря, что Origin http://127.0.0.1:3000 не разрешен Access-Control-Allow-Origin.

Но получите это, если я раскомментирую код 1 и закомментирую код 2, обновлю страницу и загрузлю файл, что будет успешно, и закомментирую код 1 и код раскомментирования 2 и обновлю страницу и загрузить файл, СЕЙЧАС код 2 не сгенерирует ошибку 400 Bad request !!

Но если я закрою весь браузер и загрузлю страницу, использующую код 2, загрузка файла выдаст мне ошибку 400, независимо от того, сколько раз я пытаюсь это сделать. Тогда, если я сделаю то, что описывает предыдущий абзац, код 2 будет работать!

И еще одна вещь, журнал Network в консоли Chrome говорит, что запросы, которые я делаю с кодом 2, имеют «OPTIONS» в качестве метода запроса. Принимая во внимание, что в коде 1, метод запроса "POST"

Кто-нибудь знает, что здесь происходит?

1 Ответ

2 голосов
/ 10 декабря 2011

Похоже, это проблема межсайтового скриптинга: проблема может быть в URL. URL, вероятно, находится на другом хосте, чем скрипт, который делает запрос. Браузеры не допускают этого по соображениям безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...