CORS et PHP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : CORS et PHP

Re: CORS et PHP

par JeremM34 » 14 juin 2016, 22:28

Comme ça ?

Code : Tout sélectionner

header ( "Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS" );
Ça fonctionne toujours pas ... :/
C'est plus super pressé maintenant mais c'est vrai que ça m'intrigue ...

Re: CORS et PHP

par @rthur » 14 juin 2016, 18:18

Si tu ajoutes Options dans ce que tu autorises, ça devrait mieux se passer ;)
header ( "Access-Control-Allow-Methods: GET, POST, PUT, DELETE" );

Re: CORS et PHP

par JeremM34 » 14 juin 2016, 18:06

Bonjour @rthur,

en fait les deux applis sont sur le même domaine mais le soucis venait que je faisais la requête sur localhost/ et pas sur 127.0.0.1 .... Oui je comprends pas trop non plus vu que c'est pareil mais c'est pas la même adresse donc ...
Du coup j'ai mis sur 127.0.0.1 et ça marche mais j'ai toujours le souci de Cross-Origin, et sur Firefox il me dit qu'il fait une requête en "OPTIONS", j'ai vu sur internet que c'était pour demander l'autorisation de faire une autre requête mais à ce moment là ça me renvoie 405 method not allowed et le fameux message d'erreur ...

Bref je suis débutant en php (pro-rails) donc j'avais jamais vu ce type d'erreur ...

Une idée ?

Re: CORS et PHP

par @rthur » 13 juin 2016, 19:14

Bonjour,

Ce n'est pas un message d'erreur remonté par PHP mais uniquement par ton navigateur suite à une demande en javascript d'une page n'appartenant pas au même domaine que le webservice que tu appelles.

Les entêtes que tu forces en PHP ont l'air correcte pour autoriser le Cross-Origin... as-tu vérifié dans la console de Firefox (Ctrl+Maj+i) puis onglet réseau que les requêtes vers ton webservice ont bien les entêtes que tu as forcé ?

Par ailleurs, une question bête mais vu que c'est pour un exercice scolaire, est-ce normal que ta page qui fait la requête ne soit pas sur le même domaine que ton webservice ?

CORS et PHP

par JeremM34 » 13 juin 2016, 15:26

Salut, pour le lycée on me demande de faire un Webservice.
Mais je n'arrive pas a faire mes requetes en DELETE et PUT.
Pourtant j'active bien dans le code :

Code : Tout sélectionner

header ( "Access-Control-Allow-Origin: *" ); header ( "Access-Control-Allow-Methods: GET, POST, PUT, DELETE" ); header ( "Access-Control-Allow-Headers: X-Requested-With" ); header ( 'Content-Type: application/json; charset=utf-8' );
Sur l'inspecteur de firefox il me dit:
Blocage d’une requête multi-origines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://127.0.0.1/prost/user. (Raison : échec du canal de pré-vérification des requêtes CORS.

A savoir, je fais de la réécriture d'url avec htaccess :

Code : Tout sélectionner

Options +FollowSymlinks RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?ws=$1 [QSA]
Vous avez une idée d'où a peux venir ?
Voici le fichier index.php entier de mon webservice :

Code : Tout sélectionner

<?php include_once 'src/config/config.php'; include_once 'src/dao/dao.php'; include_once 'src/model/application.php'; include_once 'src/model/user.php'; include_once 'src/WS/UserWS.php'; include_once 'src/WS/session.php'; include_once 'src/controller/user_controller.php'; // Utilisé pour autoriser les appel Web Service en AJAX depuis toutes les adresses header ( "Access-Control-Allow-Origin: *" ); // Utilisé pour autoriser les méthodes GET, POST, PUT et DELETE header ( "Access-Control-Allow-Methods: GET, POST, PUT, DELETE" ); // On autorise les données dans le header header ( "Access-Control-Allow-Headers: X-Requested-With" ); // On positione l'encodage en UTF-8 sinon json_encode ne fonctionnera pas ! header ( 'Content-Type: application/json; charset=utf-8' ); // var_dump($_GET["ws"]); function main() { // SI DEMANDE LES USER if ($_GET["ws"] == "user") { $method = $_SERVER ['REQUEST_METHOD']; // Si la méthode est de type option on ne continue pas l'exécution du script // Cela arrive avec certains navigateurs if ($method == "OPTIONS") { header ( 'Access-Control-Allow-Origin: *' ); http_response_code(405); exit (); } // On appel notre Web Service UserWS::execute ( $method ); //SI DEMANDE LOGIN }elseif ($_GET["ws"] == "session"){ $method = $_SERVER ['REQUEST_METHOD']; if($method !== "GET"){ // HTTP 405 : Method Not Allowed http_response_code(405); echo json_encode(false); } $login = getServerVariable("PHP_AUTH_USER"); $password = getServerVariable("PHP_AUTH_PW"); if ($login === FALSE || $password === FALSE) { // Pas d'identifiant on retourne false et HTTP 401 : Unauthorized http_response_code ( 401 ); echo json_encode ( false ); return false; } //if($login !== "toto" || $password !== "password"){ if(session::doAuth($login,$password)){ // Identifiants ok, on retourne true et HTTP 202: Accepted http_response_code ( 202 ); echo json_encode ( true ); }else{ // Identifiants faux, on retourne false et HTTP 401 : Unauthorized http_response_code ( 401 ); echo json_encode ( false ); } }else{ http_response_code(404); exit(); } } function getServerVariable($var) { if (isset ( $_SERVER [$var] ) && ! empty ( $_SERVER [$var] )) { return $_SERVER [$var]; } return false; } main(); ?>
Merci beaucoup !!