Je bent hier: ITFAQ.nl » WordPress » Forceer HTTP/1.1 voor uitgaande verbindingen in WordPress

Forceer HTTP/1.1 voor uitgaande verbindingen in WordPress

De twee WordPress manieren om een HTTP-verbinding mee te maken (WP_Http::request() en WP_Http_Curl::request()) gebruiken standaard het HTTP/1.0 protocol. Terwijl HTTP-versie 1.1 ook geaccepteerd wordt in de functies. Is het beter? Misschien niet, maar het kàn, dus gaan we WordPress HTTP/1.1 voor uitgaande verbindingen laten gebruiken.

Het HTTP-protocol kent een aantal versies:

  • HTTP/0.9
  • HTTP/1.0
  • HTTP/1.1
  • HTTP/2

De WordPress functies WP_Http::request() en WP_Http_Curl::request() begrijpen alleen HTTP 1.0 en 1.1, waarbij 1.0 de standaard is. Dit staat in de documentatie van WP_Http::request en WP_Http_Curl::request. Welke httpversion gebruikt wordt kun je inzichtelijk maken met een plugin als Log HTTP Requests:

HTTP versie 1.0 request in WordPress volgens Log HTTP Requests

Een groot verschil tussen 1.0 en 1.1 is: HTTP/1.1 ondersteunt persistente verbindingen. Een verbinding met een host blijft geopend (keep-alive). In HTTP/1.0 wordt een verbinding steeds direct gesloten en moet steeds een nieuwe verbinding opgezet worden. Dat kost tijd en resources.

Let op: de requests die WordPress maakt zijn over het algemeen API-calls en een verbinding hoeft niet open te blijven. Vandaar HTTP/1.0, en dit is vaak goed genoeg. Voor dit artikel gaan we ervan uit dat je in één verbinding meerdere keren gegevens wilt opvragen of versturen via HTTP.

Wil je meer over de verschillende HTTP-versies lezen, lees dan bijvoorbeeld Evolution of HTTP — HTTP/0.9, HTTP/1.0, HTTP/1.1, Keep-Alive, Upgrade, and HTTPS even. Dit artikel wacht wel.

Forceer HTTP/1.1 met een Must Use of site-specific plugin

Zoals gezegd kun je het gebruik van HTTP versie 1.1 forceren in WordPress. Waarom? Omdat het kan. Dit kan met een filter dat je in een Must Use plugin of site-specific plugin kunt plaatsen. Als voorbeeld een Must Use plugin (mu-plugin):

  1. maak een nieuw bestand aan en noem dit bestand use-http11-in-wordpress.php. Als je het bestand anders noemt geeft regel 27 een fout
  2. plak hierin de volgende PHP code en sla het op:
<?php /** * Plugin Name: Use HTTP/1.1 in WordPress * Plugin URI: https://www.saotn.org/ * Donate URI: https://www.paypal.me/jreilink * Description: Forces HTTP/1.1 for connections instead of HTTP 1.0 * Network: True * Version: 1.0 * Author: Jan Reilink * Author URI: https://www.saotn.org * License: GPLv2 */ add_filter('http_request_args', 'itfaq_http_request_args', 10, 3); function itfaq_http_request_args($r) { $r['httpversion'] = 1.1; return $r; } add_action('http_api_curl', 'itfaq_http_api_curl', 10, 3); function itfaq_http_api_curl($handle) { curl_setopt( $handle, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1 ); } add_filter( 'plugin_row_meta', 'itfaq_http11_plugin_row_meta', 10, 2 ); function itfaq_http11_plugin_row_meta( $links, $file ) { if ( !preg_match('/use-http11-in-wordpress.php$/', $file ) ) { return $links; } $links[] = sprintf( '<a target="_blank" href="https://paypal.me/jreilink" title="Donate to Jan Reilink / Sysadmins of the North">%s</a>', __( 'Donate' ) ); return $links; }
  1. upload het bestand via FTP naar de map wp-content/mu-plugins. Als de map mu-plugins niet bestaat kun je die aanmaken

Hierna zul je zien dat HTTP/1.1 als protocol voor uitgaande verbindingen wordt gebruikt.

HTTP/1.1 in WordPress

Je kunt meer verbindingsparameters aanpassen, zoals de timeout, user-agent, etc. Zie hiervoor de documentatie. Dit heeft overigens niets te maken met of je website via HTTP/2 bereikbaar is of niet. Het gaat om uitgaande verbindingen die WordPress maakt.

Wat vond je van dit artikel? Is het jou gelukt dit te implementeren of wat voor anders tofs heb je ontwikkelt? Laat het me weten in een reactie.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *