Heim  >  Artikel  >  Web-Frontend  >  So lösen Sie den inkonsistenten Wert der sich ständig ändernden Sitzung beim Ajax-Zugriff und den Unterschied zwischen GET und POST im HTTP-Protokoll

So lösen Sie den inkonsistenten Wert der sich ständig ändernden Sitzung beim Ajax-Zugriff und den Unterschied zwischen GET und POST im HTTP-Protokoll

亚连
亚连Original
2018-05-24 16:34:021560Durchsuche

Dieser Artikel stellt hauptsächlich die Lösung für den inkonsistenten Wert der sich ändernden Sitzung beim Ajax-Zugriff vor und die relevanten Informationen zum Unterschied zwischen GET und POST im HTTP-Protokoll. Freunde, die es benötigen, können darauf verweisen

Ich mache heute ein Problem mit dem Fortschrittsbalken. Ich habe einen Zähler in der Sitzung gespeichert. Als ein Datenstück gecrawlt wurde, war der Wert +1, und dann erhielt die Rezeption alle 3 Sekunden den Wert der Sitzung , aber das Problem trat auf. Unter FF sind die erhaltenen Werte normal, aber unter IE sind es die vorherigen Werte. Nur wenn die Seite erneut geöffnet wird, kann der letzte Sitzungswert abgerufen werden:

Das Folgende ist mein Code von proBar.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<script type="text/javascript" src="<%=path %>/js/jquery.js"></script>
<script type="text/javascript" src="<%=path%>/js/jquery.progressbar.min.js"></script>
<script type="text/javascript">
function createXMLHttpRequest() {
  var xmlHttp;
  if (window.ActiveXObject) {
   xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  } else {
   xmlHttp = new XMLHttpRequest();
  }
  return xmlHttp;
 }
 function btn_click() {
  var xmlHttp; 
  xmlHttp = createXMLHttpRequest();
  xmlHttp.onreadystatechange = processor;
  //xmlHttp.open("GET", "/jbbs/servlet/ControlCrawl?method=getinforsize", true);
  xmlHttp.open("POST", "/jbbs/servlet/ControlCrawl?method=getinforsize", true);
  xmlHttp.send(null);
  function processor() {
   .......
  }
 }
 var action=setInterval("btn_click();", );
 </script>
<span>爬取进度:</span><br/>
<p id="container"></p>

Später war es normal, GET in POST zu ändern.

PS: Über HTTP GET und POST

Http definiert verschiedene Methoden der Interaktion mit dem Server. Es gibt 4 grundlegende Methoden GET, POST, PUT und DELETE. Der vollständige Name der URL ist Ressourcendeskriptor. Wir können uns das so vorstellen: Eine URL-Adresse wird verwendet, um eine Ressource im Netzwerk zu beschreiben, und GET, POST, PUT und DELETE in HTTP entsprechen der Suche, Änderung und Hinzufügung dieser Ressource löschen. Zu diesem Zeitpunkt sollte jeder ein allgemeines Verständnis haben. GET wird im Allgemeinen zum Abrufen/Abfragen von Ressourceninformationen verwendet, während POST im Allgemeinen zum Aktualisieren von Ressourceninformationen verwendet wird. ​

1. Gemäß der HTTP-Spezifikation wird GET zur Informationsbeschaffung verwendet und sollte sicher und idempotent sein.  

(1) Der sogenannte Safe bedeutet, dass der Vorgang zum Erhalten von Informationen und nicht zum Ändern von Informationen verwendet wird. Mit anderen Worten: GET-Anfragen sollten im Allgemeinen keine Nebenwirkungen haben. Das heißt, es werden nur Ressourceninformationen abgerufen, genau wie bei einer Datenbankabfrage. Es werden keine Daten geändert oder hinzugefügt und der Status der Ressource wird nicht beeinflusst. ​

* Hinweis: Die Bedeutung von Sicherheit bezieht sich hier nur auf nicht veränderte Informationen. ​

(2). Idempotent bedeutet, dass mehrere Anfragen an dieselbe URL dasselbe Ergebnis zurückgeben sollten. ​

Idempotenz (idempotent, Idempotenz) ist ein mathematisches oder informatisches Konzept, das häufig in der abstrakten Algebra vorkommt.

Impotenz hat die folgenden Definitionen:  

Wenn bei unären Operationen eine Operation mehrmals für alle Zahlen im Bereich ausgeführt wird, lautet das Ergebnis. Wenn das Ergebnis das ist dasselbe wie das Ergebnis der einmaligen Ausführung der Operation, dann sagen wir, dass die Operation idempotent ist. Ein Beispiel ist die Absolutwertarithmetik in der Menge der reellen Zahlen: abs(a)=abs(abs(a)).

Für binokulare Operationen ist es erforderlich, dass, wenn die beiden an der Operation beteiligten Werte gleich sind, das Operationsergebnis gleich den beiden an der Operation beteiligten Werten ist, die Operation Man nennt es idempotent, um beispielsweise zwei zu finden. Die Funktion mit dem Maximalwert einer Zahl ist in der Menge der reellen Zahlen idempotent, d. h. max(x,x) = x.

Aber in der tatsächlichen Anwendung sind die beiden oben genannten Vorschriften nicht so streng. Beispiele für das Zitieren von Artikeln anderer Personen: Beispielsweise wird die Titelseite einer Nachrichtenseite ständig aktualisiert. Obwohl die zweite Anfrage einen anderen Nachrichtenstapel zurückgibt, gilt der Vorgang dennoch als sicher und idempotent, da er immer die aktuellen Nachrichten zurückgibt. Grundsätzlich gilt: Wenn das Ziel darin besteht, dass der Nutzer beim Öffnen eines Links sicher sein kann, dass sich die Ressource aus seiner Sicht nicht verändert hat. ​

2. Gemäß der HTTP-Spezifikation stellt POST eine Anfrage dar, die Ressourcen auf dem Server ändern kann.

Um das obige Beispiel weiter zu zitieren: Am Beispiel der Nachrichten-Website sollten Leser ihre eigenen Kommentare zu den Nachrichten über POST abgeben, da sich die Ressourcen der Website nach den Kommentaren geändert haben werden übermittelt, oder es wird angezeigt, dass die Ressource geändert wurde.

Aber in der Praxis halten sich viele Menschen nicht an die HTTP-Spezifikationen. Es gibt viele Gründe für dieses Problem, wie zum Beispiel:

1. Viele Leute sind gierig nach Bequemlichkeit und verwenden GET, wenn sie Ressourcen aktualisieren, da die Verwendung von POST zum FORM (Formular) gehen muss, was etwas mühsam sein wird. ​

2. Das Hinzufügen, Löschen, Ändern und Überprüfen von Ressourcen kann tatsächlich über GET/POST erfolgen, und es ist nicht erforderlich, PUT und DELETE zu verwenden.

3. Ein weiterer Grund ist, dass die frühen Web-MVC-Framework-Designer URLs nicht bewusst als abstrakte Ressourcen behandelten und gestalteten. Daher besteht ein schwerwiegenderes Problem darin, dass das traditionelle Web-MVC-Framework grundsätzlich nur GET- und POST-HTTP-Methoden unterstützt , unterstützt aber keine PUT- und DELETE-Methoden. ​

* Über MVC:

MVC war ursprünglich im Desktop-Programm vorhanden. M bezieht sich auf das Datenmodell, V bezieht sich auf die Benutzeroberfläche und C bezieht sich auf Regler. Der Zweck der Verwendung von MVC besteht darin, die Implementierungscodes von M und V zu trennen, sodass dasselbe Programm unterschiedliche Darstellungen verwenden kann.

Die oben genannten drei Punkte beschreiben typischerweise den alten Stil (der sich nicht strikt an die HTTP-Spezifikation hält). Mit der Entwicklung der Architektur erscheint nun REST (RepresentationalState Transfer), ein neuer Stil, der die HTTP-Spezifikation unterstützt. Allerdings gibt es hier nicht viele, Sie können sich jedoch auf „RESTful Web Services“ beziehen. ​

Sehen wir uns den Unterschied zwischen GET und POST von der Oberfläche aus an: ​

(1) Erstens: „Die von GET übermittelten Daten können nur bis zu 1024 Bytes umfassen.“ Da GET Daten über eine URL übermittelt, hängt die Datenmenge, die von GET übermittelt werden kann, direkt von der Länge ab die URL. Tatsächlich gibt es keine obere Parameterbeschränkung für URLs und die HTTP-Protokollspezifikation begrenzt die URL-Länge nicht. Dieses Limit wird von bestimmten Browsern und Servern vorgegeben. Die URL-Längenbeschränkung des IE beträgt 2083 Byte (2K+35). Für andere Browser wie Netscape, FireFox usw. gibt es theoretisch keine Längenbeschränkung und die Begrenzung hängt von der Unterstützung des Betriebssystems ab. Beachten Sie, dass es sich bei diesem Limit um die gesamte URL-Länge handelt, nicht nur um die Datenlänge Ihres Parameterwerts.

(2). Theoretisch gibt es keine Größenbeschränkung für POST, und die HTTP-Protokollspezifikation schreibt keine Größenbeschränkung vor. Es ist ungenau zu sagen, dass „die Menge der POST-Daten eine Größenbeschränkung von 80 KB hat.“ /100K". POST-Daten Es gibt keine Begrenzung. Die Begrenzung ist die Verarbeitungsleistung des Server-Handlers. ​

Für ASP-Programme gilt für das Request-Objekt bei der Verarbeitung jedes Formularfelds eine Datenlängenbeschränkung von 100 KB. Wenn Sie jedoch Request.BinaryRead verwenden, gibt es keine solche Einschränkung.

In Ergänzung dazu hat Microsoft für IIS 6.0 die Einschränkungen aus Sicherheitsgründen erhöht.

Wir müssen außerdem auf Folgendes achten:

1). Das Standard-ASP-POST-Datenvolumen von IIS 6.0 beträgt 200 KB und die Grenze jedes Formularfelds beträgt 100 KB .   

2). Die standardmäßige maximale Größe der hochgeladenen Dateien in IIS 6.0 beträgt 4 MB.   

3). Der standardmäßige maximale Anforderungsheader von IIS 6.0 beträgt 16 KB. ​

Vor IIS 6.0 gab es solche Einschränkungen nicht.

Die oben genannten 80K und 100K sind möglicherweise nur die Standardwerte (Hinweis: Ich habe die Parameter von IIS4 und IIS5 nicht bestätigt), aber sie können definitiv von Ihnen selbst festgelegt werden. Da jede IIS-Version unterschiedliche Standardwerte für diese Parameter hat, lesen Sie bitte die entsprechende IIS-Konfigurationsdokumentation für Einzelheiten. ​

3. In ASP verwendet der Server Request.QueryString, um GET-Anfrageparameter zu erhalten, und Request.Form, um POST-Anfrageparameter zu erhalten.

Verwenden Sie in JSP request.getParameter("XXXX"), um es abzurufen. Obwohl es in JSP auch eine request.getQueryString()-Methode gibt, ist deren Verwendung schwieriger Beispiel: Bestehen Sie einen Test .jsp?name=hyddd&password=hyddd, verwenden Sie request.getQueryString(), um Folgendes zu erhalten: name=hyddd&password=hyddd. In PHP können Sie $_GET und $_POST verwenden, um Daten in GET bzw. POST abzurufen, während $_REQUEST Daten sowohl in GET- als auch in POST-Anfragen abrufen kann. Es ist erwähnenswert, dass die Verwendung von request in JSP und $_REQUEST in PHP versteckte Gefahren birgt. Ich werde das nächste Mal eine Artikelzusammenfassung schreiben. ​

4. POST ist sicherer als GET.

Hinweis: Die hier erwähnte Sicherheit ist nicht dasselbe Konzept wie die oben in GET erwähnte „Sicherheit“. Die Bedeutung von „Sicherheit“ oben bedeutet nur, dass keine Datenänderung vorgenommen wird, und die Bedeutung von Sicherheit ist hier die wahre Bedeutung von Sicherheit. Beispiel: Bei der Übermittlung von Daten über GET werden der Benutzername und das Passwort im Klartext auf der URL angezeigt , weil (1) die Anmeldeseite möglicherweise im Browser-Cache liegt, (2) andere Personen den Browserverlauf anzeigen und dann Ihr Konto und Ihr Kennwort erhalten können. Darüber hinaus kann die Verwendung von GET zum Übermitteln von Daten auch zu Cross-Site-Request-Forgery-Angriffen führen.

Zusammenfassend ist Get eine Anfrage an den Server, während Post eine Anfrage zum Senden von Daten an den Server ist. In FORM (Formular) ist die Methode im Wesentlichen „GET“ und „ POST hat nur unterschiedliche Sendemechanismen, nicht einer wird genommen und der andere wird gesendet!

Ich habe das Obige für Sie zusammengestellt und hoffe, dass es Ihnen in Zukunft hilfreich sein wird.

Verwandte Artikel:

Implementierung der Datei-Upload-Funktion basierend auf Ajax und HTML5 in MVC

So lösen Sie das Ajax-Browsing in Google Chrome ist auf dem Server fehlgeschlagen

Basierend auf Ajax, um durch Klicken auf Laden mehr zu laden, ohne diese Seite zu aktualisieren

Das obige ist der detaillierte Inhalt vonSo lösen Sie den inkonsistenten Wert der sich ständig ändernden Sitzung beim Ajax-Zugriff und den Unterschied zwischen GET und POST im HTTP-Protokoll. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn