Diskuze: Cors problem při ajax requestu na web service
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.


skilledt:14.6.2019 10:43
Ještě dodám, že v případě že si otevřu tu kýženou webovou aplikaci v chromu s --disable-web-security parametrem, tak request proběhne bez problémů.
Dobry browser se brani CORSem. Cili, spravne ti to fungovat nesmi.
Nove vymysleli, ze kdyz kdyz tam pridas hash, tak by to mohlo stahnout.
https://developer.mozilla.org/…ce_Integrity
<script src="https://example.com/example-framework.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
crossorigin="anonymous"></script>
Jinak to samozrejme muzes obejit stazenim stranky do asp a vypsanim uzivateli. V php by to bylo
<?php $url='...'; echo file_get_contents($url); ?>
Timto zpusobem je ta stranka povazovana za tvou. Ale pak nemusi spravne fungovat linky a pod.
zelvicek:14.6.2019 11:51
Jak sleduji tebou založená témata, získávám dojem, že ses pustil do projektu, který je nad tvé síly. Především ve znalosti vývoje webových aplikací a také schopnosti hledat na netu. Zajímalo by mě, v které oblasti IT jsi skilled. Myslím, že bys měl najít někoho, kdo ti s vývojem tvé aplikace pomůže - ta investice by se určitě vyplatila.
Tipuju, že sis při sepisování smlouvy ani nezjistil, v jakém prostředí (a za jakých podmínek) má být aplikace provozována. Nenapadá mě, jak jinak ses dostal do stavu, kdy jsi "najednou" v den nasazení zjistil, že IIS bude verze 6. Těch překvapení může být v blízké budoucnosti více.
Ale k tématu. Chci věřit, že sis odchytil síťovou komunikaci mezi
klientem a serverem, z čehož jsi pochopil, kde ta chybová hláška vzniká.
Ta chybová hláška je celkem jasná 405-Method Not Allowed.
Doporučuji si nastudovat konfiguraci IIS6. Nebo alespoň hledat na
internetu.
skilledt:14.6.2019 12:09
Nezjistil jsem to samozřejmě najednou, tento problém už řeším nějaký čas, jsem spíše frontenďák , backend na mě bohužel padl také, takže je fakt, že v IIS, kord v IIS6 nejsem tolik zběhlý.
Samozřejmě že jsem prohledal kde co, ale nic co by problém vyřešilo jsem nenašel - zkoušel jsem nastavit headery u odpovědi natvrdo, stejně tak u přípony asmx v nastavení povolit metodu OPTIONS vše bez úspěchu. Jinak je většina řešení pro verzi IIS7. Proto jsem se zkusil zeptat tady, jestli poradíš budu rád, ale jinak se mi zdá reakce ve stylu "je to jasný najdi si to" poměrně zbytečná a arogantní.
zelvicek:14.6.2019 12:29
Ano, můj příspěvek je trochu arogantní. Považuji ovžem za aroganci z tvé strany fakt, že jsi nepopsal tebou vyzkoušené kroky již při zadání tématu. Z informací dodaných v předchozím příspěvku je patrné, které kroky jsi učinil, ostatní o nich již nemusí uvažovat a rovnou je vyloučit.
Musím připustit, že neznám další kroky, které by problém vyřešily a bez přístupu k danému IIS nejsem schopen více poradit.
zelvicek:14.6.2019 12:54
Ještě jedna věc. Nepíšeš, že jsi zkontroloval logy IIS - jsi si jistý, že ty OPTIONS requesty na něj dorazí? Nebylo by poprvé, kdy má zákazník prudce inteligentní proxy, která něco odfiltruje.
skilledt:14.6.2019 13:19
V pohodě, je fakt, že jsem to uvést mohl, tak snad aspoň takhle jsem to dodatečně doplnil. Díky za tip, do logů jsem mrknul a OPTIONS request dorazí, dál už nic.
don.jarducius:16.6.2019 14:59
Ahoj, v tom případě ale prohlížeči nedorazí správná odpověď... Zkontroluj si konzoli a síť v prohlížeči co dostaneš od serveru. Případně pak zkus na IIS volat jinou stránku (ne asmx) jestli ti dorazí cors hlavičky v odpovědi.
don.jarducius:16.6.2019 15:04
Ještě se ve webconfigu podívej, jestli máš povolené httpoption v protokolech... Aby server věděl, že na to má vůbec nějak reagovat.
Děkuji za tipy, zkusím to omrknout. Nevím kterou část webconfigu v IIS 6 konkrétně myslíš, můj webconfig vypadá následovně:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
</sectionGroup>
</sectionGroup>
</sectionGroup>
</configSections>
<appSettings>
<add key="Conn1" value="Transport=TCP;Port=16000;Server=10.208.1.27;Database=DataDemo;Compression=9;BlockReadSize=512000;UserName=;PassWord=;"/>
</appSettings>
<connectionStrings/>
<system.web>
<!--
Set compilation debug="true" to insert debugging
symbols into the compiled page. Because this
affects performance, set this value to true only
during development.
-->
<compilation debug="true">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
<!--
The <authentication> section enables configuration
of the security authentication mode used by
ASP.NET to identify an incoming user.
-->
<authentication mode="Windows"/>
<!--
The <customErrors> section enables configuration
of what to do if/when an unhandled error occurs
during the execution of a request. Specifically,
it enables developers to configure html error pages
to be displayed in place of a error stack trace.
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
-->
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</controls>
</pages>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
</system.web>
<!--
The system.webServer section is required for running ASP.NET AJAX under Internet
Information Services 7.0. It is not necessary for previous version of IIS.
-->
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Headers" value="accept, content-type"/>
<add name="Access-Control-Allow-Origin" value="*"/>
<add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS"/>
</customHeaders>
</httpProtocol>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<remove name="ScriptModule"/>
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated"/>
<remove name="ScriptHandlerFactory"/>
<remove name="ScriptHandlerFactoryAppServices"/>
<remove name="ScriptResource"/>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</handlers>
</system.webServer>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>
<runtime>
<assemblyBinding appliesTo="v2.0.50727" xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Je tam i ta pasáž system.webserver, která ale pro IIS6 zřejmě nemá význam
Jinak co se týče té odpovědi na OPTIONS request, tak v chromu mi to ukázalo, že response má v hlavičce pouze toto:
Access-Control-Allow-Headers: x-requested-with, cache-control, content-type, origin
Access-Control-Allow-Methods: GET,POST,DELETE,OPTIONS
Access-Control-Allow-Origin: *
Takže vlastně jenom to, co jsem natvrdo nastavil v IIS.
don.jarducius:17.6.2019 11:54
Zkus do webconfigu přidat do sekce system.web
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
<add name="AnyHttpSoap"/>
</protocols>
</webServices>
don.jarducius:18.6.2019 8:28
Ještě mě teď napadlo, zkusil jsi vyvolat funkce pomocí prohlížeče nad vygenerovaným html k asmx? … když zadáš url služby do prohlížeče?
Zobrazeno 15 zpráv z 15.