Удаленный сервер возвратил ошибку 405 недопустимый метод

Когда на сайт пытается попасть человек, а вместо искомого контента натыкается на ошибку, то важно выяснить, что это за ошибка и почему она посмела явиться в столь неподходящий (а это любой) момент.

Благо у нас есть замечательные коды 4хх и 5хх, хоть и не так подробно, как хотелось бы, но рассказывающие о том, почему возникла ошибка. Ну а мы, зная эту информацию, можем попытаться ошибку исправить. 

В этом материале речь пойдет об ошибке 405 Method Not Allowed. В деталях опишу проблему и расскажу, как ее побороть.

Что означает код ошибки сервера 405?

Код 405 Method Not Allowed говорит нам о том, что сервер получил определенный запрос с заданным HTTP-методом, смог его распознать, но не дает добро на его реализацию. То есть пользователь не получит доступ к контенту, который запросил.

В отличие от 404, 405 уточняет, что запрашиваемая страница существует и функционирует. Только вот стоит изменить используемый в HTTP-запросе метод. Иначе ничего не выйдет. 

Ошибка 405

Комьюнити теперь в Телеграм

Подпишитесь и будьте в курсе последних IT-новостей

Подписаться

Из-за чего я вижу эту ошибку?

Есть 9 HTTP-методов, которые используются браузерами для общения с серверами. Из них два задействуются чаще остальных. Это метод GET для запроса информации с ресурса и метод POST для передачи какой-нибудь информации на ресурс. Два метода покрывают почти все существующие сценарии взаимодействия клиента и сервера от запроса статьи до отправки логина и пароля на сайт. Так как они выполняют разные задачи, для сервера нет никакой нужды принимать GET для авторизации на сайте или POST для загрузки данных. Если же клиент так делает и отправляет некорректный запрос (не с тем методом, который должен быть), то сервер ответит ему ошибкой. То же произойдет, если ресурс будет настроен так, что не сможет принимать специфичный набор запросов, не попадающих в «стандарт». Такие дела.

Как исправить 405 Method Not Allowed?

Ок, небольшой ликбез провел, теперь расскажу о том, что можно предпринять, чтобы исправить обнаруженную ошибку и вернуть посетителям доступ к сайту. 

Что может сделать пользователь?

Ошибка Method Not Allowed под номером 4хх вроде бы говорит о вине клиента. Но несмотря на это, пользователь мало что может сделать, чтобы устранить проблему. В его компетенции только убедиться в том, что он не допустил ошибку в базовых вещах, и попробовать повторить те же действия в надежде на успех.

Заново открыть ту же страницу

Иногда 405 Method Not Allowed может исчезнуть после перезагрузки страницы. Так что перед тем как принимать сложные решения и жаловаться на владельцев сайта, нажмите F5 или Cmd + R раза два. 

Проверить, правильно ли он ввел URL-адрес

Несложная задача, но полезная. Как и в случае с кучей других ошибок, 405 может явиться из-за банальной опечатки или лишнего символа. К тому же многие серверы защищены таким образом, чтобы напрочь блокировать доступ к несуществующим страницам или каким-либо подуровням (в которые человек может пытаться залезть неслучайно). 

Так что пользователю стоит заглянуть в адресную строку браузера и убедиться в корректности введенной ссылки. Если что-то нет так, то лучше открыть главную страницу сайта и искать нужную информацию там, а не пытаться попасть на нее, вводя адрес вручную. 

Что может сделать владелец сайта?

Как это часто бывает, у сервера гораздо больше способов исправить клиентскую ошибку. Тут реально целый ворох решений: от удаления подозрительных компонентов из CMS до редактирования конфигурационных файлов. 

Проверить настройки сервера

Тут будут инструкции для владельцев сайтов на базе Apache и Nginx в Timeweb. Понятно, что есть другие варианты конфигураций, но эти два — чуть ли стандарт, использующийся повсеместно. А информация, касающаяся конкретно Timeweb, заденет только расположение файлов и работу с панелью управления хостинга. Остальные моменты универсальны. 

Инструкция для пользователей Apache

Наша задача состоит в том, чтобы в файле .htaccess найти записи, которые могут провоцировать появление ошибки 405. А потом их закомментировать или удалить. Чтобы это сделать:

  • Открываем панель управления Timeweb.
  • Ищем внутри вкладку «Файловая система» и переходим на нее.
  • Открываем файл .htaccess.
  • Внутри .htaccess ищем директивы Rewrite… (обычно это RewriteEngine, RewriteCond и RewriteRule).

Эти директивы помогают в настройке переадресации и некоторых других аспектах поведения сервера. Например, чтобы заставить сервер отправлять клиенту ошибку на каждый запрос GET, можно ввести такой код:

RewriteEngine on 
RewriteCond %{REQUEST_URI} ^/ru/services/?.$ 
RewriteCond %{REQUEST_METHOD} =GET 
RewriteRule ^(.)$ http://timeweb/ru/new$1 [R=405,L]

За появление ошибки отвечает запись [R=405,L]. То есть в настройках указано, как себя будет вести сервер при определенном запросе. Надо найти все такие директивы и закомментировать их, поставив # перед записью.

Инструкция для пользователей Nginx

Здесь нужно сделать примерно то же. Разница в том, как выглядит файл с настройками и в его расположении. 

  • Ищем файл nginx.conf по пути /usr/local/nginx/conf или /usr/local/etc/nginx.
  • Открываем его любым текстовым редактором.
  • Находим код, включающий в себя упоминание ошибки 405.

В Nginx код выглядит немного сложнее. Например, запрос метода для ссылки https://moysait.com/ru/services/create будет выглядеть так:

server { listen 80; listen 443 ssl;

server_name moysait.com;

location /users/create { if ($request_method = POST) { return 405 https://moysait.com/services/create$request_uri; } } }

Делаем ту же процедуру. Останавливаемся везде, где находим директиву с ошибкой 405. Анализируем ее (вдруг, она тут случайно). И при необходимости комментируем или удаляем.

Исправить проблемы, связанные с PHP-скриптами

Ошибки могут возникнуть при попытке импортировать или экспортировать слишком объемную базу данных. На хостинге может быть установлено ограничение в полминуты, запрещающее использовать один PHP-скрипт дольше этого времени. Поэтому, если процесс затянется, сервер может отозваться ошибкой 405.

Обойти ограничение можно тремя путями:

  • Попробовать экспортировать БД через phpMyAdmin.
  • Разбить файл БД на несколько мелких частей, передача каждого из которых займет меньше 30 секунд.
  • Использовать для передачи БД Cron-задачу. На них сервер выделяет больше времени.

Еще специалисты рекомендуют удалить статические файлы с разрешением, которые Nginx обрабатывать не должен. Это делается через панель управления хостингом в соответствующем разделе файлового менеджера.

Исправить эксклюзивные для Nginx ошибки

Как мы уже выяснили выше, ошибка может возникнуть при попытке использовать неподходящий метод. Вот как можно исправить это в случае с Nginx-сервером.

Первый вариант — убедить сервер в том, что вместо кода 405 надо отправлять код 200, и это вполне нормально:

server { 
   listen 80; 
   server_name localhost;
location / { 
   root html; 
   index index.html index.htm; } 
error_page 404 /404.html; 
  error_page 403 /403.html; 
error_page 405 =200 $uri;



}

Для тех, у кого Nginx-сервер — это proxy, понадобится вот такой код:

error_page 405 =200 @405; 

location @405 { root /htdocs; proxy_pass http://localhost:8080; }

Аналогичная ошибка возникает при работе с модулем FastCGI. Из-за него сервер неправильно считывает запросы с методом POST, поэтому необходимо делить параметры и адрес скрипта вот так:

location ~.php(.*) {
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_split_path_info ^(.+.php)(.*)$;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
 include /etc/nginx/fastcgi_params;
}

Далее речь пойдет об общих методах диагностики и исправления ошибок. На крайний случай, если конкретные решения не помогли.

Проанализировать все недавние изменения в коде

Если недавно что-то поменяли, а после этого все сломалось, то надо это «поменяли» рассмотреть подробнее. Провести ручной дебаггинг, если можно это так назвать. Наверняка где-то затесалась несерьезная, но обидная ошибка. 

Удалить сторонние дополнения для CMS

Если вы используете условный WordPress, то разного рода ошибки могут подкрасться оттуда, где их не ждешь. Например, после установки нового расширения. 

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

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

Главное, не забудьте сделать резервную копию CMS перед тем, как что-то удалять и менять. И продолжайте делать бэкапы после, чтобы всегда можно было восстановить рабочую версию сайта.

Откатиться на более старую версию CMS

Бывает так, что сама CMS несет в себе баги и ошибки. Ну или криво установилась. В таком случае можно восстановиться из старой резервной копии и откатиться на одну или несколько версий в прошлое. Когда все работало без ошибок.

Проверить новые записи в базе данных

Расширения могут вносить изменения в базу данных сайта. Иногда не очень полезные. Надо проверить, не появилось ли после установки свежего дополнения каких-либо непрошенных изменений в базе данных. Может, появились подозрительные записи, которых не должно быть. Лучше подвергнуть анализу всю БД от начала до конца (если другие методы исправления ошибки 405 не помогли, конечно).

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

First thing is to know the exact URL for your REST Service. Since you have specified http://localhost:2517/Service1/Create now just try to open the same URL from IE and you should get method not allowed as your Create Method is defined for WebInvoke and IE does a WebGet.

Now make sure that you have the SampleItem in your client app defined in the same namespace on your server or make sure that the xml string you are building has the appropriate namespace for the service to identify that the xml string of sample object can be deserialized back to the object on server.

I have the SampleItem defined on my server as shown below:

namespace SampleApp
{
    public class SampleItem
    {
        public int Id { get; set; }
        public string StringValue { get; set; }            
    }    
}

The xml string corresponding to my SampleItem is as below:

<SampleItem xmlns="http://schemas.datacontract.org/2004/07/SampleApp" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Id>6</Id><StringValue>from client testing</StringValue></SampleItem>

Now i use the below method to perform a POST to the REST service :

private string UseHttpWebApproach<T>(string serviceUrl, string resourceUrl, string method, T requestBody)
        {
            string responseMessage = null;
            var request = WebRequest.Create(string.Concat(serviceUrl, resourceUrl)) as HttpWebRequest;
            if (request != null)
            {
                request.ContentType = "application/xml";
                request.Method = method;
            }

            //var objContent = HttpContentExtensions.CreateDataContract(requestBody);
            if(method == "POST" && requestBody != null)
            {
                byte[] requestBodyBytes = ToByteArrayUsingDataContractSer(requestBody);
                request.ContentLength = requestBodyBytes.Length;
                using (Stream postStream = request.GetRequestStream())
                    postStream.Write(requestBodyBytes, 0, requestBodyBytes.Length);                    
            }

            if (request != null)
            {
                var response = request.GetResponse() as HttpWebResponse;
                if(response.StatusCode == HttpStatusCode.OK)
                {
                    Stream responseStream = response.GetResponseStream();
                    if (responseStream != null)
                    {
                        var reader = new StreamReader(responseStream);

                        responseMessage = reader.ReadToEnd();                        
                    }
                }
                else
                {
                    responseMessage = response.StatusDescription;
                }
            }
            return responseMessage;
        }

private static byte[] ToByteArrayUsingDataContractSer<T>(T requestBody)
        {
            byte[] bytes = null;
            var serializer1 = new DataContractSerializer(typeof(T));            
            var ms1 = new MemoryStream();            
            serializer1.WriteObject(ms1, requestBody);
            ms1.Position = 0;
            var reader = new StreamReader(ms1);
            bytes = ms1.ToArray();
            return bytes;
        }

Now i call the above method as shown:

SampleItem objSample = new SampleItem();
objSample.Id = 7;
objSample.StringValue = "from client testing";
string serviceBaseUrl = "http://localhost:2517/Service1";
string resourceUrl = "/Create";
string method="POST";

UseHttpWebApproach<SampleItem>(serviceBaseUrl, resourceUrl, method, objSample);

I have the SampleItem object defined in the client side as well. If you want to build the xml string on the client and pass then you can use the below method:

private string UseHttpWebApproach(string serviceUrl, string resourceUrl, string method, string xmlRequestBody)
            {
                string responseMessage = null;
                var request = WebRequest.Create(string.Concat(serviceUrl, resourceUrl)) as HttpWebRequest;
                if (request != null)
                {
                    request.ContentType = "application/xml";
                    request.Method = method;
                }

                //var objContent = HttpContentExtensions.CreateDataContract(requestBody);
                if(method == "POST" && requestBody != null)
                {
                    byte[] requestBodyBytes = ASCIIEncoding.UTF8.GetBytes(xmlRequestBody.ToString());
                    request.ContentLength = requestBodyBytes.Length;
                    using (Stream postStream = request.GetRequestStream())
                        postStream.Write(requestBodyBytes, 0, requestBodyBytes.Length);                    
                }

                if (request != null)
                {
                    var response = request.GetResponse() as HttpWebResponse;
                    if(response.StatusCode == HttpStatusCode.OK)
                    {
                        Stream responseStream = response.GetResponseStream();
                        if (responseStream != null)
                        {
                            var reader = new StreamReader(responseStream);

                            responseMessage = reader.ReadToEnd();                        
                        }
                    }
                    else
                    {
                        responseMessage = response.StatusDescription;
                    }
                }
                return responseMessage;
            }

And the call to the above method would be as shown below:

string sample = "<SampleItem xmlns="http://schemas.datacontract.org/2004/07/XmlRestService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Id>6</Id><StringValue>from client testing</StringValue></SampleItem>";   
string serviceBaseUrl = "http://localhost:2517/Service1";
string resourceUrl = "/Create";
string method="POST";             
UseHttpWebApproach<string>(serviceBaseUrl, resourceUrl, method, sample);

NOTE: Just make sure that your URL is correct

Nicrom

6 / 6 / 2

Регистрация: 07.11.2012

Сообщений: 95

1

.NET 4.x

31.07.2018, 15:39. Показов 2811. Ответов 5

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Добрый день.

Может кто подсказать в чём проблема, написал простенькое консольное приложение для получения html кода web страницы сайта. В ответ получаю 405 ошибку, вот код метода вызова:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
static string getResponse(string uri)
        {
            try
            {
                WebProxy proxy = new WebProxy("****");
                CredentialCache credentials = new CredentialCache();
                credentials.Add(new System.Uri("****:****"), "Basic", new NetworkCredential("****", "****"));
                proxy.Credentials = credentials;
 
                //HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
                WebRequest request = WebRequest.Create(uri);
                request.Method = "GET";
                request.Proxy = proxy;
                request.ContentType = @"charset=""utf-8""";
                WebResponse response = request.GetResponse();
                //HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream resStream = response.GetResponseStream();
                
                StringBuilder sb = new StringBuilder();
                byte[] buf = new byte[8192];
                int count = 0;
                do
                {
                    count = resStream.Read(buf, 0, buf.Length);
                    if (count != 0)
                    {
                        sb.Append(Encoding.Default.GetString(buf, 0, count));
                    }
                }
                while (count > 0);
                return sb.ToString();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return string.Empty;
            }
        }

Пробовал обращаться к различным сайтам и везде получаю одно и тоже:
«Удаленный сервер возвратил ошибку: (405) Недопустимый метод.»
Странно, что через любой браузер спокойно захожу на сайты, а вот через приложение не удаётся, хотя 405 ошибка выдаётся когда на сервере сайта заблокирован метод, при помощи которого производится вызов (В данном случаи «GET»).

В чём может быть проблема и какие есть идеи?



0



1114 / 828 / 258

Регистрация: 30.04.2009

Сообщений: 3,459

03.08.2018, 13:38

2

Цитата
Сообщение от Nicrom
Посмотреть сообщение

В чём может быть проблема и какие есть идеи?

А в чем собственно вопрос?
В сообщении же все написано: Удаленный сервер возвратил ошибку: (405) Недопустимый метод.
https://developer.mozilla.org/… Status/405

The HyperText Transfer Protocol (HTTP) 405 Method Not Allowed response status code indicates that the request method is known by the server but is not supported by the target resource.

The server MUST generate an Allow header field in a 405 response containing a list of the target resource’s currently supported methods.

Очевидно, сервер не разрешает делать «GET» запрос по этому url.
Согласно спецификации HTTP протокола, в таком случае сервер ДОЛЖЕН добавить к ответу header «Allow», содержащий список поддерживаемых методов для этого url.
Посмотрите значение это хедера в ответе и укажите для request.Method соответствующий разрешенный метод.



0



144 / 144 / 35

Регистрация: 04.06.2011

Сообщений: 575

03.08.2018, 14:06

3

Как правило в теле get запроса должны быть заголовки (Accept, User-Agent, Cookie и т.д.) у вас их нет возможно дело в этом



0



6 / 6 / 2

Регистрация: 07.11.2012

Сообщений: 95

03.08.2018, 14:47

 [ТС]

4

Цитата
Сообщение от nicolas2008
Посмотреть сообщение

А в чем собственно вопрос?

Вопрос, почему через браузеры я без проблем попадаю на страницы, а через приложение нет.

Цитата
Сообщение от Andrew_qb
Посмотреть сообщение

Как правило в теле get запроса должны быть заголовки (Accept, User-Agent, Cookie и т.д.) у вас их нет возможно дело в этом

Позже попробую отловить полный пакет отправляемый браузером, может получиться выявить недостающие параметры.



0



1114 / 828 / 258

Регистрация: 30.04.2009

Сообщений: 3,459

03.08.2018, 16:18

5

Цитата
Сообщение от Nicrom
Посмотреть сообщение

Вопрос, почему через браузеры я без проблем попадаю на страницы, а через приложение нет.

Либо код 405 означает то о чем я написал, либо сервер намеренно ограничивает запросы не из браузера, но посылает код 405 т.к. разработчики ничего умнее не придумали.
Если второе, то вам надо посмотреть какие заголовки посылает браузер и добавить такие же к вашему запросу.



0



187 / 100 / 19

Регистрация: 15.09.2011

Сообщений: 801

09.08.2018, 07:12

6

Nicrom, для отладки WEB запросов используйте Fiddler. В нём можно попробовать достучаться до того сервера через композитора, куда вам требуется и посмотреть начинку запроса. По аналогии наполните начинку у себя в запросе.
https://www.telerik.com/fiddler
Также вы можете указать проксиком именно сам инструмент отладки. Успехов.



0



After reading different answers against the same thread i tried almost all the options mentioned in their discussions however i am still getting error:

Error No1: The remote server returned an error: (404) Not Found. OR

Error No2:The remote server returned an error: (405) Method Not Allowed.

Below is my code:

var httpWebRequest = (HttpWebRequest)WebRequest.Create("URL?Paramter1=pc&user=u1&password=p1");
httpWebRequest.ContentType = "application/json; charset=utf-8";
httpWebRequest.Method = "POST";
httpWebRequest.Accept = "application/json";
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

I receive error on the last line i.e.

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();

If i use httpWebRequest.Method="GET" i receive the error number 1 as mentioned above and if i use httpWebRequest.Method="Post" i receive the error number 2.

jelhan's user avatar

jelhan

6,1091 gold badge19 silver badges35 bronze badges

asked Apr 22, 2014 at 8:08

amw's user avatar

15

I too face this issue. Root cause of this error is may be mistook endpoint address in web config file..

This is my mistaken web config

<services>
  <service behaviorConfiguration="mexBehavior" name="sample.sample">
    <endpoint address="http://xxx.xxx.x.xxx:9335" binding="basicHttpBinding" contract="sample.Isamplebase" />
    <host>
      <baseAddresses>
        <add baseAddress="http://xxx.xxx.x.xxx:9335" />
      </baseAddresses>
    </host>
  </service>
</services>

It should be like this

<services>
  <service behaviorConfiguration="mexBehavior" name="sample.sample">
    <endpoint address="http://xxx.xxx.x.xxx:9335/sample.svc" binding="basicHttpBinding" contract="sample.Isamplebase" />
    <host>
      <baseAddresses>
        <add baseAddress="http://xxx.xxx.x.xxx:9335" />
      </baseAddresses>
    </host>
  </service>
</services>

Now its working fine… Best is yours.. Good Luck.

answered Oct 14, 2015 at 9:29

Madhu Mca's user avatar

Use:

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, UriTemplate = "abcxx")]

At your service page where you declare your method, type POST in upper case. I think you are typing in lowercase.

Unihedron's user avatar

Unihedron

10.9k13 gold badges62 silver badges72 bronze badges

answered Nov 22, 2014 at 6:34

Alam Usmani's user avatar

My bet is that either Paramter1 or username or password are incorrect — in other words the user you were trying to use doid not exist.

The server returns 404 Not Found, not because you didn’t hit the right API method, but because the object you are asking for doesn’t exist.

answered Oct 24, 2016 at 23:09

tymtam's user avatar

tymtamtymtam

31.1k7 gold badges84 silver badges125 bronze badges

Looking at your code, you create your URL and pass data as url form encoded, but then you set the content type as application/json. I’d think you either:

  1. Meant to use application/x-www-form-urlencoded as the content type

or

  1. Meant to not send the data in the URL, and instead need to set a JSON body for your POST

answered Apr 26, 2019 at 22:20

mprivat's user avatar

mprivatmprivat

21.5k4 gold badges54 silver badges64 bronze badges

I also faced this issue. In my case the reason was in incorrect (incomplete) URL.

I called

60033/COMPANY_NAME/api/Company/MOM/v1.0/companies(5a56e3ea-cd63-ec11-b6ea-6045bd874170)/

But you can’t do a POST on the general companies-URL.

I should use URL different headers, depends on my purpose

60033/COMPANY_NAME/api/Company/MOM/v1.0/companies(5a56e3ea-cd63-ec11-b6ea-6045bd874170)/receiptHeaders

When I fixed URL errors are gone

answered Aug 9, 2022 at 12:34

Alexandra Sh's user avatar

First thing is to know the exact URL for your REST Service. Since you have specified http://localhost:2517/Service1/Create now just try to open the same URL from IE and you should get method not allowed as your Create Method is defined for WebInvoke and IE does a WebGet.

Now make sure that you have the SampleItem in your client app defined in the same namespace on your server or make sure that the xml string you are building has the appropriate namespace for the service to identify that the xml string of sample object can be deserialized back to the object on server.

I have the SampleItem defined on my server as shown below:

namespace SampleApp
{
    public class SampleItem
    {
        public int Id { get; set; }
        public string StringValue { get; set; }            
    }    
}

The xml string corresponding to my SampleItem is as below:

<SampleItem xmlns="http://schemas.datacontract.org/2004/07/SampleApp" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Id>6</Id><StringValue>from client testing</StringValue></SampleItem>

Now i use the below method to perform a POST to the REST service :

private string UseHttpWebApproach<T>(string serviceUrl, string resourceUrl, string method, T requestBody)
        {
            string responseMessage = null;
            var request = WebRequest.Create(string.Concat(serviceUrl, resourceUrl)) as HttpWebRequest;
            if (request != null)
            {
                request.ContentType = "application/xml";
                request.Method = method;
            }

            //var objContent = HttpContentExtensions.CreateDataContract(requestBody);
            if(method == "POST" && requestBody != null)
            {
                byte[] requestBodyBytes = ToByteArrayUsingDataContractSer(requestBody);
                request.ContentLength = requestBodyBytes.Length;
                using (Stream postStream = request.GetRequestStream())
                    postStream.Write(requestBodyBytes, 0, requestBodyBytes.Length);                    
            }

            if (request != null)
            {
                var response = request.GetResponse() as HttpWebResponse;
                if(response.StatusCode == HttpStatusCode.OK)
                {
                    Stream responseStream = response.GetResponseStream();
                    if (responseStream != null)
                    {
                        var reader = new StreamReader(responseStream);

                        responseMessage = reader.ReadToEnd();                        
                    }
                }
                else
                {
                    responseMessage = response.StatusDescription;
                }
            }
            return responseMessage;
        }

private static byte[] ToByteArrayUsingDataContractSer<T>(T requestBody)
        {
            byte[] bytes = null;
            var serializer1 = new DataContractSerializer(typeof(T));            
            var ms1 = new MemoryStream();            
            serializer1.WriteObject(ms1, requestBody);
            ms1.Position = 0;
            var reader = new StreamReader(ms1);
            bytes = ms1.ToArray();
            return bytes;
        }

Now i call the above method as shown:

SampleItem objSample = new SampleItem();
objSample.Id = 7;
objSample.StringValue = "from client testing";
string serviceBaseUrl = "http://localhost:2517/Service1";
string resourceUrl = "/Create";
string method="POST";

UseHttpWebApproach<SampleItem>(serviceBaseUrl, resourceUrl, method, objSample);

I have the SampleItem object defined in the client side as well. If you want to build the xml string on the client and pass then you can use the below method:

private string UseHttpWebApproach(string serviceUrl, string resourceUrl, string method, string xmlRequestBody)
            {
                string responseMessage = null;
                var request = WebRequest.Create(string.Concat(serviceUrl, resourceUrl)) as HttpWebRequest;
                if (request != null)
                {
                    request.ContentType = "application/xml";
                    request.Method = method;
                }

                //var objContent = HttpContentExtensions.CreateDataContract(requestBody);
                if(method == "POST" && requestBody != null)
                {
                    byte[] requestBodyBytes = ASCIIEncoding.UTF8.GetBytes(xmlRequestBody.ToString());
                    request.ContentLength = requestBodyBytes.Length;
                    using (Stream postStream = request.GetRequestStream())
                        postStream.Write(requestBodyBytes, 0, requestBodyBytes.Length);                    
                }

                if (request != null)
                {
                    var response = request.GetResponse() as HttpWebResponse;
                    if(response.StatusCode == HttpStatusCode.OK)
                    {
                        Stream responseStream = response.GetResponseStream();
                        if (responseStream != null)
                        {
                            var reader = new StreamReader(responseStream);

                            responseMessage = reader.ReadToEnd();                        
                        }
                    }
                    else
                    {
                        responseMessage = response.StatusDescription;
                    }
                }
                return responseMessage;
            }

And the call to the above method would be as shown below:

string sample = "<SampleItem xmlns="http://schemas.datacontract.org/2004/07/XmlRestService" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><Id>6</Id><StringValue>from client testing</StringValue></SampleItem>";   
string serviceBaseUrl = "http://localhost:2517/Service1";
string resourceUrl = "/Create";
string method="POST";             
UseHttpWebApproach<string>(serviceBaseUrl, resourceUrl, method, sample);

NOTE: Just make sure that your URL is correct

Ошибка HTTP 405 указывает на то, что сервер отклонил конкретный метод HTTP, используемый веб-браузером. Узнайте, почему он может появиться на вашем сайте и как быстро исправить его, не нанося ущерба вашей репутации в интернете.

Нет ничего более неприятного для потребителя, который ищет мгновенного удовлетворения, чтобы наткнуться на ошибку на вашем сайте. Если вместо того, чтобы найти нужную им информацию, они наткнутся на страницу с надписью “ошибка”, скорее всего, подавляющее большинство потребителей покинут ваш сайт.

Но помимо того, что потребители быстро уходят, вы также можете испытать разрушительные последствия для ваших коэффициентов конверсии. Не говоря уже о том, что поисковые системы также обращают внимание на показатели отказов. Ошибка, которая может появиться на вашем сайте и вызвать разочарование у потребителей — это Ошибка HTTP 405.

К сожалению, эта ошибка похожа на что-то мистическое. Она говорит вам, что что-то пошло не так, но не дает более подробного объяснения.

Хорошая новость заключается в том, что с помощью небольшого исследования и усилий с вашего сайта вы можете быстро определить суть проблемы и исправить ее, прежде чем заметите падение активности и продаж.

В этой статье мы поговорим о том, что такое Ошибка HTTP 405, почему она может появиться на вашем сайте, а также о том, как ее исправить. Давайте начнем!

HTTP 405 – это код состояния ответа HTTP. Существует пять видов кодов состояния HTTP-ответа. Все они сообщают пользователю, был ли успешно выполнен определенный HTTP-запрос. Пять основных кодов состояния включают в себя:

1xx коды состояния: Информационные запросы                                                                                                                          2xx коды состояния: Успешные запросы                                                                                                                                          3xx коды состояния: Перенаправление                                                                                                                                            4xx коды состояния: Ошибки клиента                                                                                                                                                  5xx коды состояния: Ошибки сервера

Сообщение об Ошибке 405 Method Not Allowed – это ошибка клиента, которая указывает на то, что проблема заключается в чем-то на стороне клиента.

Ошибка HTTP 405 указывает на то, что веб-браузер запросил доступ к одной из ваших страниц, и ваш веб-сервер распознал этот запрос. Однако сервер отклонил конкретный метод HTTP, который он использует. В результате ваш веб-браузер не может получить доступ к запрошенной веб-странице. Когда это произойдет, ваши посетители увидят веб-страницу с ошибкой.

Варианты имен Ошибок HTTP 405

Различные веб-серверы, операционные системы и браузеры отображают ошибку по-разному. Важно отметить, что причина проблемы также может меняться от одного сервера к другому.

Наиболее распространенные способы появления Ошибки HTTP 405 для потребителей включают в себя:

  • HTTP Ошибка 405 – Метод Не Дозволен
  • HTTP Метод Не Дозволен
  • 405 Не Дозволено
  • Метод Не Дозволен
  • HTTP Ошибка 405

Независимо от того, как появляется ошибка, будь то Ошибка HTTP 405 или Метод Не Дозволен, проблема одна и та же, и это то, что ее трудно исправить. Вы знаете, что что-то не так, но понятия не имеете, что это может быть. Вам предстоит найти суть проблемы и устранить ее до того, как она нанесет непоправимый ущерб.

Проверьте URL-адрес

Первое, что вам нужно сделать, когда вы видите Ошибку 405 на своем сайте – это проверить, правильно ли вы ввели URL-адрес.

Внимательно посмотрите на URL-адрес и убедитесь, что он содержит все правильные буквы.URL-адрес содержит какие-либо специальные символы, убедитесь, что они вставлены правильно.

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

Откат последних обновлений

Большая часть веб-сайтов размещается на таких CMS, как WordPress или Wix. Вы можете обнаружить, что недавнее обновление системы может быть основной причиной проблемы.

Попробуйте подумать, когда вы впервые заметили Ошибку 405 на своем сайте. Это было сразу после того, как вы обновили CMS? Если это так, то подумайте о том, чтобы вернуться к предыдущей версии.

Удаление новых расширений, модулей или плагинов

Расширения и плагины могут быть полезны для улучшения возможностей вашего сайта, но они также могут нанести серьезный ущерб.

Некоторые расширения могут полностью контролировать вашу систему и вносить изменения в любой код, включая PHP, CSS, HTML, JavaScript и вашу базу данных. В этом случае рекомендуется удалить все новые расширения, которые вы недавно добавили в свою систему.

Если вам нужна помощь в удалении расширения, просто сделайте быстрый поиск в Google, чтобы найти официальную документацию для этого процесса.

Дважды проверьте изменения в своей базе данных

Иногда, даже если вы удалите расширение, изменения, внесенные этим расширением в систему, не могут быть полностью возвращены.

Есть некоторые расширения, особенно на CMS WordPress, которые имеют карт-бланш внутри приложения, который включает в себя полный доступ к базе данных. Расширение может изменять записи базы данных, которые не принадлежат самому расширению, а создаются и управляются другими расширениями. Когда это происходит, расширение может не знать, как вернуть изменения в записи базы данных, что приводит к тому, что расширение игнорирует такие вещи во время удаления.

Лучшее, что вы можете сделать в таком случае – это открыть базу данных и вручную просмотреть таблицы и записи, которые могли быть изменены расширением. Или вы можете провести быстрое исследование и попытаться найти людей, которые столкнулись с той же проблемой, чтобы увидеть, как они справились с этой проблемой.

Проверьте файлы конфигурации для вашего веб-сервера

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

Ваше приложение работает либо на веб-серверах Apache, либо на веб-серверах nginx.

Если вы используете Apache, вам необходимо проверить как файл конфигурации сервера apache, так и файл конфигурации сервера apache файл .htaccess. После того, как вы найдете файл .htaccess, откройте его в текстовом редакторе и найдите строки, использующие указания RewriteXXX. В случае, если вы столкнетесь с какими-либо странными указаниями RewriteCond или RewriteRule, попробуйте временно сделать замечание, используя префикс символа #. Перезагрузите веб-сервер и посмотрите, устранена ли проблема.

Если вы используете nginx, вам нужно проверить nginx.conf файл. Файл находится в одном из нескольких общих каталогов: /usr/local/nginx/conf, /etc/nginx или /usr/local/etc/nginx. Как только вы найдете файл, откройте его в текстовом редакторе и выполните поиск указании, использующих флаг кода ответа 405. Сделайте замечания на любые аномалии, а затем перезагрузите сервер, чтобы увидеть, была ли проблема решена.

Проверьте журналы приложений

Журналы приложений содержат историю вашего веб-сайта, в том числе информацию о том, какие страницы были запрошены, к каким серверам он подключался и многое другое.

Открытие журналов приложений может указать вам правильное направление, в котором может возникнуть ошибка.

Расположение журналов приложений зависит от типа используемого сервера. Как только вы их найдете, запустите поиск Ошибок 405. Надеюсь, вы определите, что является основной причиной проблемы.

Отладка кода приложения или скриптов

Если вы перепробовали все вышеперечисленное и ничего не получилось, возможно, пришло время посмотреть, не является ли причиной ошибки проблема в каком-то пользовательском коде вашего приложения.

Вы можете поставить диагноз, вручную отладив приложение и проанализировав журналы приложений и серверов.

Сделайте копию приложения на локальную машину разработки и выполните пошаговую отладку. Вам удастся воссоздать точный сценарий, в котором произошел 405 Метод Не Дозволен, и просмотреть код приложения, когда что-то пойдет не так.

Заключение

Надеемся что наша подробная запись о кодах состояния HTTP, будет полезная для вас. Помните что регулярный контроль и техническое обслуживание помогут сохранить ваш сайт безупречным, а его владельца-беззаботным.

Понравилось то, что вы прочитали?

Подписывайтесь на нашу рассылку и получайте ежедневные обновления о новых учебниках, статьях, курсах и о многом другом! 

Просто введите ваш адрес электронной почты, чтобы подписаться.

(Без спамов; ежемесячно два письма; отписаться от рассылки можно в любое время)

.

В этой статье мы объясним, что такое ошибка 405 и как она может проявляться. А также расскажем, как исправить эту ошибку, возникающую на WordPress-сайте.

  • Что означает ошибка 405 Method Not Allowed
    • Google Chrome
    • Safari
    • Firefox
    • Microsoft Edge
  • Вариации ошибки 405
  • Как исправить ошибку 405 Method Not Allowed на WordPress-сайте
    • Проверьте, правильно ли вы ввели URL-адрес
    • Откат недавно установленных обновлений WordPress
    • Удалите новые плагины и темы оформления
    • Проверить любые непреднамеренные изменения в базе данных
    • Проверка конфигурации сервера
    • Просмотрите журналы сервера
    • Отладка кода приложения или скриптов
    • Что делать, если ни одно из этих решений не помогло
  • Заключение

Ошибка 405 Method Not Allowed возникает, когда браузер запросил доступ к одной из страниц сайта, но веб-сервер отклонил определенный в запросе HTTP-метод. Получается, что браузер не может получить доступ к запрашиваемой странице. Вместо интересующего пользователей конвента они увидят страницу с ошибкой.

Google Chrome

Ошибка 405 Not Allowed в Chrome

Safari

Ошибка 405 Not Allowed в Safari

Firefox

Ошибка 405 Not Allowed в Firefox

Microsoft Edge

Ошибка 405 Not Allowed в Microsoft Edge

Ошибку 405 не следует путать с кодом ответа 404 Not Found. Он означает, что запрошенный URL-адрес не найден или введен неправильно. Сообщение об ошибке 405 подтверждает, что запрашиваемая страница, но для выполнения запроса использовался неподдерживаемый HTTP-метод.

Это код ответа HTTP указывает, что метод запроса известен серверу, но не поддерживается целевым ресурсом.

Вот некоторые варианты отображения ошибки:

  • 405 Not Allowed;
  • Method Not Allowed;
  • HTTP 405 Error;
  • HTTP Error 405 – Method Not Allowed;
  • HTTP 405 Method Not Allowed.

Самой распространенной причиной возникновения ошибки 405 является неправильный URL-адрес. Большинство веб-серверов блокируют доступ пользователей к несуществующим страницам сайта.

Если вы обновили WordPress незадолго до того, как стало появляться сообщение об ошибке 405 Method Not Allowed, то именно обновление может являться причиной возникновения проблем. Это также относится к любым плагинам и темам оформления, которые вы недавно обновили.

Самый простой способ откатить обновления WordPress – использовать специальный плагин. Самый эффективный из них – WP Downgrade. Он в значительной степени автоматизирует процесс обновления.

Плагины и темы оформления могут создавать проблемы. Это связано с тем, что добавление любой функциональности на сайт влияет на его работу. Ошибка 405 быть связана с плагином или темой оформления, которую вы используете. А также если конкретное расширение конфликтует с другой частью CMS.

Удаления определенных плагинов или тем оформления может устранить ошибку 405 Method Not Allowed. Для этого перейдите в раздел «Плагины» панели администрирования WordPress.

Удалите новые плагины и темы оформления

Страница плагинов в WordPress

После удаления каждого плагина не забудьте проверять, устранена ли возникшая ошибка. Этот процесс позволит вам точно определить, какой плагин вызывает проблему.

Удалите новые плагины и темы оформления - 2

Как деактивировать плагин в WordPress

После проверки плагинов можно приступить к деактивации (удалению) используемой темы.

Рассмотренный выше способ не гарантирует, что изменения, внесенные расширениями, будут полностью отменены. Это особенно актуально для WordPress-плагинов. Многие из них могут изменять записи в базе данных, которые влияют на работоспособность WordPress.

Если вы уверены, что плагин или тема оформления являются причиной возникновения ошибки 405 Method Not Allowed, проверка используемой базы данных полностью решит проблему. Для этого необходимо открыть базу данных сайта и вручную просмотреть таблицы и записи, измененные расширением.

Ваш сайт, скорее всего, работает на сервере, который использует Apache или Nginx. На их основе базируется более 80% всех серверов. Проверка файлов конфигурации сервера на наличие неподдерживаемых инструкций поможет решить причину возникновения ошибки 405.

Например, если веб-сервер работает под управлением Apache, то конфигурационный файл .htaccess располагается в корневом каталоге сайта. В него можно попасть, перейдя по следующему пути:

Таким образом, файл .htaccess будет располагаться по адресу:

/home/public_html/.htaccess

Откройте файл .htaccess в текстовом редакторе и найдите строки, которые используют директивы Rewrite. Они являются частью модуля mod_rewrite в Apache и определяют текстовый шаблон, который будет сопоставляться со всеми введенными URL-адресами. Если посетитель сайта запрашивает URL-адрес, подходящий под правило RewriteRule, оно перенаправит посетителя соответствующим образом.

Вот простой пример правила RewriteRule, которое сопоставляет все входящие запросы и отвечает кодом ошибки 405 Method Not Allowed

Проверка конфигурации сервера

Пример правила RewriteRule

В конце записи правила есть флаг R = 405. Поэтому полученный код ответа будет 405. Если вы обнаружите другие «странные» директивы Rewrite в файле .htaccess, попробуйте временно закомментировать их, используя префикс #. После этого перезапустите веб-сервер, чтобы увидеть, решило ли данное изменение возникшую проблему.

Почти каждое веб-приложение хранит журналы на стороне сервера. Они содержат полную историю операций, совершенных приложением.

Журналы сервера немного отличаются. Они часто предоставляют подробную информацию о состоянии всех подключенных служб или даже только самого сервера.

Чтобы просмотреть логи сервера, вам нужно подключиться к вашему сайту через протокол защищенной передачи файлов (SFTP). В корневом каталоге найдите папку logs. В ней находятся журналы доступа и журналы ошибок WordPress:

  • Access.log;
  • Error.log.

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

Если ни один из предыдущих методов не помог, тогда проблема связана с пользовательским кодом. Для ее решения нужно провести отладку кода.

Для этого нужно скопировать весь сайт на промежуточный сайт. После этого можно будет провести пошаговую процедуру отладки.

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

К счастью, в большинстве случаев ошибку 405 Method Not Allowed можно легко исправить с помощью быстрой отладки.

На чтение 5 мин. Просмотров 485 Опубликовано 16.04.2021

Ошибка 405 Method Not Allowed – это код состояния ответа HTTP , сигнализирующий о том, что сервер отклонил метод для запрошенного ресурса, несмотря на получение и признавая это. Хотя технически это сообщение об ошибке клиента (код состояния HTTP 4xx), ошибка вызвана проблемой на стороне сервера.

В отличие от большинства других кодов ответа HTTP в категории 4xx (на стороне клиента), ошибка 405 Method Not Allowed считается быть проблемой на стороне сервера. Ниже вы найдете подробную информацию о том, почему вы видите эту ошибку и почему за нее, вероятно, несет ответственность оператор веб-сайта.

В зависимости от сервера, обрабатывающего запрос, HTTP-сообщение 405, которое вы увидите, может отличаться. Вот некоторые из наиболее распространенных фраз:

  • Метод 405 запрещен
  • Статус HTTP 405 – HTTP-метод GET не поддерживается этим URL-адресом
  • 405 – HTTP-глагол, используемый для доступа к этой странице, запрещен.
  • 405 Not Allowed
  • Метод запрещен
  • Ошибка: метод 405 запрещен
  • Ошибка HTTP 405
  • Метод HTTP 405 запрещен
  • Ошибка HTTP 405 – Метод запрещен.

Примечание . Имейте в виду, что веб-администраторы могут настраивать серверную и клиентскую части -сторонние ошибки. В зависимости от сайта, который вы посещаете, вы можете увидеть дополнительные графические элементы поверх ответа с кодом состояния.

Содержание

  1. Проблема на стороне сервера
  2. Что вызывает ошибку HTTP 405?
  3. Диагностика ошибки 405: недопустимый метод
  4. Как исправить ошибку 405 Method Not Allowed

Проблема на стороне сервера

Наиболее распространенные коды ошибок HTTP используются совместно 4xx Client error и 5xx Ошибки сервера . Ошибка 405 Method Not Allowed является особенной в том смысле, что, хотя предполагается, что это проблема на стороне клиента, ошибка тем или иным образом вызвана исключительно проблемой на стороне сервера.

В большинстве случаев сервер неправильно настроен и неправильно обрабатывает запросы – это приводит к ошибке 405 Method Not Allowed и другим проблемам с маршрутизацией трафика. Но даже если веб-сервер является сетевым объектом, возвращающим ошибку в виде кода ответа HTTP клиенту, мы не можем однозначно исключить, что запрос клиента каким-то образом не вызывает проблемы.

Подобно большинству других кодов ошибок ответа о состоянии, ошибку 405 Method Not Allowed сложно идентифицировать и исправить.. Учитывая сложные отношения между клиентом, веб-сервером, веб-приложением и дополнительными веб-службами, определение причины этой конкретной ошибки может быть проблемой даже для лучших веб-инженеров.

Что вызывает ошибку HTTP 405?

По сути, ошибка 05 Method Not Allowed подтверждает, что запрашиваемый клиентом ресурс действителен и существует, но клиент использовал недопустимый метод HTTP. Чтобы представить эту информацию в перспективе: Протокол передачи гипертекста (HTTP) имеет набор методов, которые указывают возможные действия, которые могут быть выполнены на веб-сервере, с которым осуществляется связь. Вот список со всеми возможными действиями:

  • GET – получить информацию, связанную с определенным ресурсом URL.
  • HEAD – получить информацию заголовка, связанную с ресурсом URL.
  • POST – отправка данных на этот веб-сервер.
  • PUT – замена существующих данных для определенного URL-адреса с новыми данными, которые в настоящее время передаются клиентом.
  • DELETE – удалить данные из указанного URL-адреса.
  • CONNECT – установил туннель к серверу, как определено целевым ресурсом.
  • OPTIONS – описывает параметры связи для указанному целевому ресурсу.
  • TRACE: Этот метод запускает проверку обратной связи на пути к целевому ресурсу.
  • PATCH: применяет частичные изменения к ресурсу.

Примечание : Из всех 9 методов GET, HEAD, POST, PUT и DELETE гораздо более распространены, чем другие.

В зависимости от цели веб-сервера, администратор настроит его, чтобы разрешить одни методы и отклонить другие. Например, – если рассматриваемый веб-сайт вообще не содержит интерактивного контента, нет смысла разрешать метод POST на веб-сервере. Если этот метод не разрешен и клиент связывается с сервером с запросом POST, будет отображена ошибка 405 Method Not Allowed , информирующая браузер о том, что этот метод не разрешен.

Диагностика ошибки 405: недопустимый метод

Как мы установили выше, ошибка 405 Method Not Allowed указывает, что пользователь запросил (с сервера) допустимый ресурс с недопустимым методом HTTP. Именно поэтому технически ошибка лежит на стороне клиента – с точки зрения сервера, клиент просто сделал неправильный запрос.. Вот некоторые из наиболее распространенных сценариев, которые вызывают ошибку 405 Method Not Allowed :

  • Ошибка возникает из-за неправильной настройки веб-сервера или программных компонентов, которым поручено выполнять действие с соответствующим ресурсом URL.
  • Администратор веб-сайта наложил запрет на Метод HTTP, который используется пользовательским агентом – обычно это делается из соображений безопасности.
  • Ошибка возникает из ресурса URL – для этого требуется метод, который не разрешен веб-сервером.
  • Метод HTTP не разрешен хостинг-провайдером, используемым администратором веб-сайта. Это обычное явление для метода POST – метод блокируется некоторыми провайдерами хостинга при доступе к HTML-документам из соображений безопасности.

Как исправить ошибку 405 Method Not Allowed

Если вы столкнулись с ошибкой 405 Method Not Allowed на определенном веб-сайте, вряд ли что-нибудь существенное, что вы можете с этим поделать. Но поскольку наиболее частой причиной ошибки является неправильный URL-адрес, вы можете дважды проверить его или посетить корневой каталог веб-проекта и вручную перейти к этому конкретному ресурсу.

В настоящее время большинство веб-сайтов серверы надежно защищены, чтобы предотвратить доступ с неправильных URL-адресов. Проблема может возникнуть из-за того, что вы пытаетесь получить доступ к частной странице, предназначенной для пользователей с расширенной авторизацией. Не пытайтесь исправить общие ошибки 4xx, такие как обновление страницы, перезапуск сети или отключение прокси-сервера – они не будут работать с ошибкой 405 Method Not Allowed .

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

Понравилась статья? Поделить с друзьями:
  • Удаление ошибок шевроле нива
  • Удаленный сервер возвратил ошибку 404 не найден
  • Удаление ошибок форд фокус 3
  • Удаленный сервер возвратил ошибку 404 запрещено
  • Удаление ошибок оперативной памяти