RCA:未注意Curl-library Post 1024以上字节时的HTTP/1.1特性导致 HessianPHP 传
先列出 HessianPHP 的错误提示:
基础知识背景: 1)“Expect: 100-continue”的来龙去脉: HTTP/1.1 协议里设计 100 (Continue) HTTP 状态码的的目的是,在客户端发送 Request Message 之前,HTTP/1.1 协议允许客户端先判定服务器是否愿意接受客户端发来的消息主体(基于 Request Headers)。 即,Client 和 Server 在 Post (较大)数据之前,允许双方“握手”,如果匹配上了,Client 才开始发送(较大)数据。 这么做的原因是,如果客户端直接发送请求数据,但是服务器又将该请求拒绝的话,这种行为将带来很大的资源开销。 协议对 HTTP/1.1 clients 的要求是:
的头域!2)libcurl 发送大于1024字节数据时启用“Expect:100-continue‘特性:
1. 发送一个请求,包含一个 "Expect: 100-continue" 头域,询问 Server 是否愿意接收数据; 2. 接收到 Server 返回的 100-continue 应答以后,才把数据 POST 给 Server;
zxgfa 在 2012年补充说:
(郑昀注1:lighttpd 1.4 版本有此严重问题,于1.5版本修复。 郑昀注2:Resin 于 3.0.5 版本增加了对 Expect: 100-continue 的支持。)
3)PHP Curl-library 可以主动封禁此特性: 有人在 PHP手册::curl_setopt 下留言说: PHP curl 遵从 libcurl 的特性。由于不是所有 web servers 都支持这个特性,所以会产生各种各样的错误。如果你遇到了,可以用下面的命令封禁"Expect"头域:
<span class="html"><span class="default"> <?php </span></span></span>
<span class="html"><span class="default"> curl_setopt</span><span class="keyword">(</span><span class="default">$ch</span><span class="keyword">,<span class="Apple-converted-space"> </span></span><span class="default">CURLOPT_HTTPHEADER</span><span class="keyword">, array(</span><span class="string">'Expect:'</span><span class="keyword">));<br></span><span class="default"> ?><br></span><span pooy><br></span></span>
图1 You can convince PHP's curl backend to stop doing the 100-continue-thing by setting an explicit request header
其他知识背景:
- 根据 HessianTransport 代码所述,”Hessian request using the CURL library“。
问题现象:
,hessian 报错“CURL transport error: transfer closed with outstanding read data remaining”。解决: 修改hessian中 CURLOPT 项: CURLOPT_HTTPHEADER => array("Content-Type: application/binary") 改为 CURLOPT_HTTPHEADER => array("Content-Type: application/binary","Expect:")
p.s.: 有人认为改为 HTTP/1.0 协议即可绕过这个 100-continue 问题,但这只是工程师不愿意搞清楚原理而示弱的表现。 参考资源: 1)2011,Laruence,Expect:100-continue; 2)PHP手册,If you are doing a POST, and the content length is 1,025 or greater; 3)HTTP 1.1 RFC,Use of the 100 (Continue) Status; 4)stackoverflow,2009,PHP HTTP POST fails when cURL data > 1024; 5)zxgfa,2012,libcurl的使用问题“Expect100-continue”; 6)lighttpd,2009,'Expect' header gives HTTP error 417;
赠图几枚: 请施主拿去: 360度后空翻开球: 360无死角:

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Comprendre la signification du code d'état HTTP 301 : scénarios d'application courants de redirection de pages Web Avec le développement rapide d'Internet, les exigences des utilisateurs en matière d'interaction avec les pages Web sont de plus en plus élevées. Dans le domaine de la conception Web, la redirection de pages Web est une technologie courante et importante, mise en œuvre via le code d'état HTTP 301. Cet article explorera la signification du code d'état HTTP 301 et les scénarios d'application courants dans la redirection de pages Web. Le code d'état HTTP 301 fait référence à une redirection permanente (PermanentRedirect). Lorsque le serveur reçoit le message du client

Explication détaillée du rôle des fichiers .ibd dans MySQL et précautions associées MySQL est un système de gestion de base de données relationnelle populaire, et les données de la base de données sont stockées dans différents fichiers. Parmi eux, le fichier .ibd est un fichier de données du moteur de stockage InnoDB, utilisé pour stocker des données et des index dans des tables. Cet article fournira une analyse détaillée du rôle du fichier .ibd dans MySQL et fournira des exemples de code pertinents pour aider les lecteurs à mieux comprendre. 1. Le rôle des fichiers .ibd : stockage des données : les fichiers .ibd sont du stockage InnoDB

Comment implémenter le streaming HTTP en C++ ? Créez un socket de flux SSL à l'aide de Boost.Asio et de la bibliothèque client asiohttps. Connectez-vous au serveur et envoyez une requête HTTP. Recevez les en-têtes de réponse HTTP et imprimez-les. Reçoit le corps de la réponse HTTP et l'imprime.

Titre : Exemple de code PHP : Comment utiliser POST pour transmettre des paramètres et implémenter des sauts de page. Dans le développement Web, cela implique souvent la nécessité de transmettre des paramètres via POST et de les traiter côté serveur pour implémenter des sauts de page. PHP, en tant que langage de script côté serveur populaire, fournit une multitude de fonctions et de syntaxes pour atteindre cet objectif. Ce qui suit présentera comment utiliser PHP pour implémenter cette fonction à travers un exemple pratique. Tout d'abord, nous devons préparer deux pages, une pour recevoir les requêtes POST et les paramètres de processus.

Solution : 1. Réessayez : vous pouvez attendre un certain temps et réessayer, ou actualiser la page ; 2. Vérifiez la charge du serveur : vérifiez l'utilisation du processeur, de la mémoire et du disque du serveur. Si la limite de capacité est dépassée, vous pouvez essayer. pour optimiser la configuration du serveur ou augmenter la capacité. 3. Vérifiez la maintenance et les mises à niveau du serveur : vous ne pouvez attendre que le serveur revienne à la normale. 4. Vérifiez la connexion réseau : assurez-vous que la connexion réseau est stable, vérifiez si le réseau est actif. les paramètres du périphérique, du pare-feu ou du proxy sont corrects ; 5. Assurez-vous que la configuration du cache ou du CDN est correcte ; 6. Contactez l'administrateur du serveur, etc.

PHP est un langage de programmation largement utilisé dans le développement de sites Web, et les sauts de page et le transport de données POST sont des exigences courantes dans le développement de sites Web. Cet article présentera comment implémenter le saut de page PHP et transporter les données POST, y compris des exemples de code spécifiques. En PHP, les sauts de page sont généralement implémentés via la fonction header. Si vous devez transporter des données POST pendant le processus de saut, vous pouvez le faire en suivant les étapes suivantes : Tout d'abord, créez une page contenant un formulaire, dans lequel l'utilisateur remplit les informations et clique sur le bouton Soumettre. Acti sous la forme

Il n'y a pas de concept de classe au sens traditionnel dans Golang (langage Go), mais il fournit un type de données appelé structure, à travers lequel des fonctionnalités orientées objet similaires aux classes peuvent être obtenues. Dans cet article, nous expliquerons comment utiliser les structures pour implémenter des fonctionnalités orientées objet et fournirons des exemples de code concrets. Définition et utilisation des structures Examinons d'abord la définition et l'utilisation des structures. Dans Golang, les structures peuvent être définies via le mot-clé type, puis utilisées si nécessaire. Les structures peuvent contenir des attributs

Vous pouvez utiliser la télécommande universelle RCA pour simplifier la gestion des télécommandes. Avec différents modèles, vous pouvez contrôler jusqu'à huit appareils, éliminant ainsi le besoin de plusieurs télécommandes et réduisant l'encombrement. Soyez patient lors de la programmation de la télécommande et suivez les étapes simples fournies. Alors, si vous souhaitez configurer une télécommande universelle RCA à l'aide de codes, cet article est fait pour vous. Comment configurer une télécommande universelle RCA à l'aide de codes Pour configurer une télécommande universelle RCA à l'aide de codes, utilisez l'une des méthodes ci-dessous. Programmation de la télécommande universelle RCA à l'aide de la méthode de programmation automatique Programmation de la télécommande universelle RCA à l'aide du code direct Parlons-en en détail. 1] Pour programmer la télécommande universelle RCA selon la méthode de programmation automatique, il faut d'abord utiliser un simple
