Sirvidor web
{{Ficha de software}}
Un '''sirvidor web''' o '''sirvidor HTTP''' ye un [[Programa (computación)|programa informáticu]] que procesa una [[Sirvidor web#Aplicación del llau del sirvidor|aplicación del llau del sirvidor]], realizando conexones bidireccionales o unidireccionales y [[Sincronía|síncrones o asíncrones]] col veceru y xenerando o dexando una respuesta en cualquier llinguaxe o [[Sirvidor web#Aplicación del llau del vecera|Aplicación del llau del veceru]]. El códigu recibíu pol veceru lu procesa por un [[restolador web]]. Pa la tresmisión de toos estos datos suel utilizase dalgún [[Protocolu de comunicaciones|protocolu]]. Xeneralmente úsase'l protocolu [[HTTP]] pa estes comunicaciones, perteneciente a la capa d'aplicación del [[modelu OSI]]. El términu tamién s'emplega pa referise al [[ordenador]].

== Arquiteutura ==
=== Pidimientu GET ===
Un sirvidor web opera por aciu el protocolu [[HTTP]], de la capa d'aplicación del [[modelu OSI]]. Al protocolu HTTP asígnase-y davezu'l puertu [[Transmission Control Protocol|TCP]] 80. Los pidimientos al sirvidor suelen realizase por aciu HTTP utilizando'l métodu de pidimientu [[Http#Métodos de Pidimientu|GET]], nel que'l recursu solicítase al traviés de la [[Localizador de recursos uniforme|url]] al sirvidor Web. <br /><code> GET /index.html HTTP/1.1
HOST: www.host.com
</code>

Na barra d'URL d'un restolador cualesquier, el pidimientu anterior sería análogu a la siguiente direición Web:

<code>www.host.com/index.html</code>

==== Esquema d'un pidimientu GET ====
===== Pidimientu Web =====
{{VT|Navegador Web}}
{{VT|Telnet}}
El restolador, per mediu de la interfaz d'usuariu, dexa al usuariu realizar una o dellos pidimientos Web. La interfaz d'usuariu o redolada d'usuariu ye'l conxuntu d'elementos del restolador que dexen realizar el pidimientu de forma activa. Un pidimientu Web non solo pue facese por aciu un [[Restolador web|restolador]], sinón con cualquier ferramienta habilitada pa tal fin, como una consola de comandos [[Telnet]].

Elementos de la redolada d'usuariu más comunes en restoladores Web visuales:
{| {{tablaguapa}}
|-
! Nome !! Descripción
|-
| '''[[Hiperenllaz]]''' '''enllaz''' o '''link''' || Ye una porción de conteníu Web, testu, imaxe y otros elementos, qu'enllaza con unes señes Web. Al calcar un hiperenllaz, el restolador xenera un pidimientu GET automáticu al URL de dichu enllaz.
|-
| '''[[Formulariu web]]''' || Al realizar l'unviu satisfactoriu de los datos d'un formulariu, el restolador Web xenera un pidimientu GET o POST (comúnmente POST) automáticu al par qu'unvia los datos al sirvidor.
|-
| '''[[Barra de señes]]''' || Tolos restoladores inclúin una barra de señes por aciu la cual puede aportase manualmente a cualquier direición URL, de cuenta que'l restolador va xenerar un pidimientu GET automática a dicha URL cada vegada que l'usuariu deseyar.
|-
| '''[[Script]] activu''' o''' pasivu''' || Cualquier aplicación JavaScript tien accesu al estáu del restolador, cómo puede modificar los datos que describen tal estáu, de forma pasiva (ensin la intervención del usuariu) o activa (por aciu dalguna aición del usuariu).
|}

===== 1.1 Socket a señes DNS produz una <code>[[Socket d'Internet|socket]]</code> con un sirvidor dau en direición [[Direición IP|IP]] por aciu [[Transmission Control Protocol|TCP]]. Polo xeneral les señes que'l restolador tien primeramente son señes [[DNS]] (señes alfanumériques) que tendrá de convertir a señes numbériques.

===== 1.2 Resolvimientu de DNS a IP =====
Si les señes daes son [[DNS]] y nun esiste una regla na base de datos DNS, el <code>Host Resolver Request</code> solicita al sirvidor DNS la o les señes IP correspondientes. El restolador crea una nueva regla y almacena les señes IP xunto a les señes DNS na so base de datos de regles DNS.

===== 1.3 Recuperación de reglar DNS =====
Una vegada almacenada la regla, realízase un pidimientu a la base de datos DNS pa recuperar los valores de la regla.

===== 1.4 Socket a señes IP produz una <code>[[Socket d'Internet|socket]]</code> cola direición IP por aciu [[Transmission Control Protocol|TCP]]. Les señes IP puen recuperase nel pasu anterior.

{{cita|SOCKET 192.168.0.1}}

===== 1.5 Preparación del pidimientu créase la pidimientu GET estableciendo la url ,un flag ,la priority del pidimientu y el method (implícitamente GET).

===== 1.6 Apertura Caché =====
Ábrese y/o se crea una entrada nel <code>http cache</code>.

===== 1.7 Efeutuación de la pidimientu realiza la pidimientu GET. Lléense les cabeceres [[HTTP]] de la <code>http transaction</code> y más tarde el cuerpu de la <code>http transaction</code>.

{{cita|GET /index.html HTTP/1.1}}

===== 1.8 Consulta en Caxé =====
Consultar nel caxé de discu si esiste una entrada nel caxé acomuñada al recursu que se solicitó. Los valores son <code>created</code> (''true'' o ''false'') y <code>key</code> (la url del recursu).

===== 1.9 Respuesta booleana de la esistencia del recursu solicitáu =====
Si la entrada nun esiste (si'l valor de created ye ''false'') escríbense los datos nel caxé de discu. Si non, lléese direutamente.

===== 2.0 Presentación visual del recursu conclúyese la operación y amuésase en pantalla (si ye precisu) la información.

==== Pidimientu GET pasiva ====
[[Javascript]] dexa realizar cambeos nel estáu del restolador. L'estáu del restolador vien definíu pol array d'oxetos '''location''' del oxetu global '''Window'''. Referenciar a tal oxetu con '''window.location'''. En concretu '''window.location.href''' contién les señes actuales del restolador Web.

Si una parte del script executa tal sentencia:

<code>window.location.href='<nowiki>http://wikipedia.org</nowiki>';</code>

El restolador va faer tal pidimientu Web ensin que l'usuariu mediara en tal circunstancia o los sos efeutos. De la mesma va producise un nuevu pidimientu GET si altériase'l valor de '''window.location.search''' o '''window.location.protocol'''.

==== Procedimientu del restolador ====
La xera del restolador Web ye crear el pidimientu a partir de los datos recoyíos na redolada d'usuariu d'elementos del mesmu, como [[hiperenllaz|enllaces]], el valor del testu de la barra de busca, los [[metatag]]s.

{| {{tablaguapa}}
| <code><a href="http://es.wikipedia.org">Entrar</a></code>
|}

Al pulsiar nel enllaz, el restolador crea automáticamente el pidimientu GET y les cabeceres del pidimientu sobre la base de los [[metatag]]s (cabeceres definíes), los [[Cookie (informática)|cookies]] y cabeceres automátiques del restolador, pa depués unviales xunto al pidimientu al Sirvidor.

=== Pidimientu POST ===
Ye'l segundu tipu de pidimientu [[HTTP]] más utilizáu. Los datos a unviar al sirvidor incluyir nel cuerpu del mesmu pidimientu coles cabeceres HTTP asignaes correspondientemente respectu al tipu de pidimientu. Xeneralmente acomúñase colos [[formulario web]] nos que los datos suelen ser cifraos pa unvialos de manera segura al sirvidor.

Por motivos de convención incluyir nel pidimientu la cabecera <code>application/x-www-form-urlencoded</code>, qu'indica'l formatu o codificación de los datos a unviar; esta ye ''variable->valor'' nel formatu: <code>variable=valor</code> separada cada par variable->valor por <code>&</code>. Esta cabecera, nos formularios [[HTML]] únviase automáticamente, pero n'otres teunoloxíes web tal como [[AJAX]], si deseyar faer correutamente un pidimientu POST, ten de ser especificáu o instanciado l'oxetu:
<code>
setRequestHeader("Content-type:application/x-www-form-urlencode");
</code><code>
ajax.send(data);</code>

Si utilizara'l métodu GET los datos deberíen de ser añadíos a la URL, lo que los espondría a ser vistos de forma direuta.

==== Estructura d'un pidimientu POST ====

{{AP|Cabeceres HTTP}}
<table {{tablaguapa}}>
<tr style="background-color:#F2F2F2">
<td colspan="2" >
'''Estructura típica d'un pidimientu POST'''
</td>
<td>
'''Amuesa'''
</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">
'''Petition type'''
</td>
<td>
<code>POST url HTTP/1.1</code>
</td>
<td>
<code>POST comment.php HTTP/1.1</code>
</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">
'''Referer'''
</td>
<td>
<code>http-url-referer</code>
</td>
<td>
<code>index.php</code>
</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">
'''Content-Length'''
</td>
<td>
<code>contentlenght-int</code>
</td>
<td>
<code>63</code>
</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">
'''Origin'''
</td>
<td>
<code>http-url-origin</code>
</td>
<td>
<code>http://es.wikipedia.org</code>
</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">
'''User-Agent'''
</td>
<td>
<code>useragent-string</code>
</td>
<td>
<code>Mozilla/5.0 (Windows; O; Windows NT 6.1; en-US) ...</code>
</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">
'''Content-Type'''
</td>
<td>
<code>content-type-string</code>
</td>
<td>
<code>application/x-www-form-urlencoded</code>
</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">
'''Accept'''
</td>
<td>
<code>mimetypes-accepted-string</code>
</td>
<td>
<code>application/xml,application/xhtml+xml ...</code>
</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">
'''Accept-Language'''
</td>
<td>
<code>language-accepted-string</code>
</td>
<td>
<code>es-ES,ye;q=0.8</code>
</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">
'''Accept-Charset'''
</td>
<td>
<code>charset-accepted-string</code>
</td>
<td>
<code>ISO-8859-1,utf-8;q=0.7,*;q=0.3</code>
</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">
'''Cookie'''
</td>
<td>
<code>phpsessid-string</code>
</td>
<td>
<code>PHPSESSID=gm0ugf96iojuldio8i51o92716</code>
</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">
'''Accept-Encoding'''
</td>
<td>
<code>accept-encoding-string</code>
</td>
<td>
<code>gzip,deflate,sdch</code>
</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">
'''Content'''
</td>
<td>
<code>Content-string</code>
</td>
<td>
<code>&data=4&lang=es+ye</code>
</td>
</tr>

</table>

==== Composición d'un pidimientu POST ====
Les cabeceres más comunes que s'unvien nun pidimientu POST:
* '''Petition type:''' Especifica'l tipu de pidimientu [[HTTP]]. ''(Esta cabecera nun tien nome, únviase talo como)''
* '''Referer:''' Especifica la url dende la cual fíxose'l pidimientu POST.
* '''Content-Length:''' Especifica'l llargor en bytes de los datos unviaos nel cuerpu del pidimientu.
* '''Origin:''' Especifica la url principal del sitiu.{{ensin referencies}}
* '''User-Agent:'''Especifica l'identificador del restolador Web dende'l cual fíxose'l pidimientu.
* '''Content-Type:''' Especifica'l formatu o [[Multipurpose Internet Mail Extensions|MIME]] de los datos unviaos nel cuerpu del pidimientu.
* '''Accept:''' Especifica'l [[Multipurpose Internet Mail Extensions|MIME]] que s'espera na respuesta.
* '''Accept-Language:''' Especifica'l códigu del llinguaxe esperáu na respuesta.
* '''Accept-Charset:''' Especifica la codificación que s'espera na respuesta.
* '''Cookie:''' Especifica un identificador de sesión nel pidimientu deriváu d'un cookie.
* '''Accept-Encoding:''' Especifica'l tipu de codificación (xeneralmente compresión) que s'espera de la respuesta. ''(Nun tolos restoladores unvien esta testera)''

=== Estructura d'una respuesta POST ===
{{AP|Cabeceres HTTP}}
<table {{tablaguapa}}>
<tr style="background-color:#F2F2F2">
<td colspan="2">'''Estructura típica d'una respuesta POST'''</td>
<td>'''Amuesa'''</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">'''HTTP version & state'''</td>
<td>HTTP-version-state</td>
<td><code>HTTP/1.1 200 OK</code></td>
</tr>

<tr>
<td style="background-color:#F2F2F2">'''Date'''</td>
<td>date-string</td>
<td>Tue, 07 Jun 2011 05:52:31 GMT</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">'''Server'''</td>
<td>server-string</td>
<td title='Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1'>Apache/2.2.17 (Win32) mod_ssl/2.2.17...</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">'''Expires'''</td>
<td>expire-date-string</td>
<td>Thu, 19 Nov 1981 08:52:00 GMT</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">'''Cache-Control'''</td>
<td>Cache-control-string</td>
<td title='no-store, no-cache, must-revalidate, post-check=0, pre-check=0'>no-store, no-cache, must-revalidate...</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">'''Pragma'''</td>
<td>pragma-string</td>
<td>no-cache</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">'''Content-Length'''</td>
<td>Content-length-int</td>
<td>297</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">'''Content-Type'''</td>
<td>Content-type-string</td>
<td>text/html</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">'''Keep-Alive'''</td>
<td>Keep-alive-string</td>
<td>timeout=5, max=98</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">'''Connection'''</td>
<td>Connection-string</td>
<td>Keep-Alive</td>
</tr>

<tr>
<td style="background-color:#F2F2F2">'''X-Powered-By'''</td>
<td>X-powered-by-string</td>
<td>PHP/5.3.5</td>
</tr>

</table>

==== Codificación del mensaxe del cuerpu del pidimientu ====
Los datos que s'unvien nel cuerpu del pidimientu POST tienen de tener dalgún formatu que dexe manipolialos nun futuru procesamientu. Por ello'l pidimientu tien de tener asignada la cabecera Content-Type que'l so valor va ser la codificación de los datos. D'esta miente el sistema va poder estremar ente variables aisllaes, datos binarios, testu planu, o cualesquier otru tipu de formatu. El formatu d'una cadena de datos denominar [[Multipurpose Internet Mail Extensions|MIME]] y ye'l valor que tendrá de ser incluyíu nesta cabecera.<ref>{{cita web|url=http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2|títulu=Form enctype}}</ref>

En [[HTML]] la cabecera Content-Type especifícase automáticamente y el so valor ye ''application/x-www-form-urlencoded'', sicasí pueden especificase por estándar otros dos valores: <code>multipart/form-data</code> y <code>text/plain</code> utilizando l'atributu <code>enctype</code> del elementu <code>form</code> de la siguiente manera

{| {{tablaguapa}}
| <code><form enctype="multipart/form-data">...</form></code>
|-
| <code><form enctype="text/plain">...</form></code>
|-
| <code><form enctype="application/x-www-form-urlencoded">...</form></code>
|}

O cualesquier otru valor [[Multipurpose Internet Mail Extensions|MIME]]. El <code>multipart/form-data</code> utilizar pa unviar grandes cadenes binaries que suponen cualesquier otru tipu de documentu que nun sía testu planu, como imáxenes, videos o ejecutables. Pa dellos valores, dixebrar por comes.

El <code>application/x-www-form-urlencoded</code> codifica de forma automática los valores de tolos elementos del formulariu de la manera <code>variable=valor</code>, dixebraos por <code>&</code>. L'atributu <code>name</code> d'un input suel ser el nome de la variable y la so <code>value</code> el valor. Los espacios reemplazar por <code>+</code> y los calteres non alfanuméricos por <code>$HH</code> onde HH representa'l númberu hexadecimal del calter [[ASCII]].

{| {{tablaguapa}}
| id=valor+de+la variable&tama%A4o=4
|}

que representáu d'otra forma ye:

{| {{tablaguapa}}
|id: valor de la variable<br />tamañu: 4
|}

==== Procedimientu del restolador ====
El restolador arrexunta la información del formulariu pa crear el pidimientu y unviala. Les cabeceres unviar xunto al pidimientu POST, y arrexuntar sobre la base de los [[metatag]]s definíos nel códigu, los automáticos del restolador y los Cookies. Ye'l restolador, tamién, el que codifica los datos si ye necesariu. {{ensin referencies}}

== Funcionamientu ==
[[Ficheru:Inside and Rear of Webserver.jpg|miniaturadeimagen|derecha|Sirvidor]]
El Sirvidor web executar nun ordenador calteniéndose a la espera de pidimientos per parte d'un veceru (un [[restolador web]]) y respuende a estos pidimientos afechiscamente, por aciu una ''[[páxina web]]'' que se va exhibir nel restolador o amosando'l respeutivu mensaxe si detectóse dalgún error. A manera d'exemplu, al teclear ''[http://www.wikipedia.org www.wikipedia.org]'' nel nuesu restolador, ésti realiza un pidimientu HTTP al sirvidor de d'estes señes. El sirvidor respuende al veceru unviando'l códigu HTML de la páxina; el veceru, una vegada recibíu'l códigu, interpretar y exhibir en pantalla. Como vemos con esti exemplu, el veceru ye l'encargáu d'interpretar el códigu HTML, esto ye, d'amosar les fontes, los colores y la disposición de los testos y oxetos de la páxina; el sirvidor tan solo llindar a tresferir el códigu de la páxina ensin llevar a cabu nenguna interpretación de la mesma.

Amás de la tresferencia de códigu HTML, los Sirvidores web pueden apurrir aplicaciones web. Estes son porciones de códigu que s'executen cuando se realicen ciertos pidimientos o respuestes HTTP. Hai qu'estremar ente:
* Aplicaciones nel llau del veceru: el vecera web ye l'encargáu d'executales na máquina del usuariu. Son les aplicaciones tipu [[Llinguaxe de programación Java|Java]] "applets" o [[Javascript]]: el sirvidor apurre'l códigu de les aplicaciones al veceru y ésti, por aciu el restolador, executar. Ye necesariu, por tanto, que'l veceru disponga d'un restolador con capacidá pa executar aplicaciones (tamién llamaes ''[[Guión (informática)|scripts]]''). Comúnmente, el restoladores dexen executar aplicaciones escrites en llinguaxe ''[[javascript]]'' y ''[[llinguaxe de programación Java|java]]'', anque pueden añader más llinguaxes por aciu l'usu de ''[[plugin]]''s.
* Aplicaciones nel llau del sirvidor: el sirvidor web executa l'aplicación; ésta, una vegada executada, xenera ciertu códigu HTML; el sirvidor toma esti códigu recién creáu y unviar al veceru per mediu del protocolu HTTP.
Les aplicaciones de sirvidor munches vegaes suelen ser la meyor opción pa realizar aplicaciones web. La razón ye que, al executase ésta nel sirvidor y non na máquina del veceru, ésti nun precisa nenguna capacidá añadida, como sí asocede nel casu de querer executar aplicaciones javascript o java. Con éses cualquier veceru dotáu d'un restolador web básicu puede utilizar esti tipu d'aplicaciones.

El fechu de qu'HTTP y HTML tean íntimamente amestaos nun tien de dar llugar a confundir dambos términos. HTML ye un [[llinguaxe de marques]] y HTTP ye un "protocolu".

== Aplicación del llau del Sirvidor ==
Una aplicación del llau del sirvidor ye cualquier programa o conxuntu d'instrucciones diseñaes cola cuenta de qu'un Sirvidor Web procesar pa realizar dalguna aición. Les aplicaciones del llau del sirvidor tán escrites por aciu dalgún llinguaxe de programación, ente los que destaquen:

<table align="center" {{tablaguapa}}><tr style="background-color:#F2F2F2; font-weight:bold;">
<td >Llinguaxe</td><td>Fecha de primera versión estable</td><td>Sistema operativu</td><td>Última versión estable</td>
</tr>
<tr >
<td>[[PHP]]</td><td>1995</td><td>Multiplataforma</td><td>5.6.4</td>
</tr>
<tr>
<td>[[Active Server Pages|ASP]]</td><td>1998</td><td>[[Windows]] (Delles versiones)</td><td>4.0</td>
</tr>
<tr>
<td>[[Perl]]</td><td>1987</td><td>Multiplataforma</td><td>5.12.3</td>
</tr>
<tr>
<td>[[Python]]</td><td>1991</td><td>Multiplataforma</td><td>3.2.0</td>
</tr>
<tr>
<td>[[Ruby]]</td><td>1995</td><td>Multiplataforma</td><td>1.9.3-p125</td>
</table>

El 75% de les aplicaciones del llau del sirvidor tán escrites en [[PHP]], siguíu d'[[Active Server Pages|ASP]] y les demás opciones usaes de forma alternativa y bien casual.<ref>{{cita web|url=http://w3techs.com/technologies/overview/programming_language/all|títulu=1}}</ref>

=== Procesamientu del llau del sirvidor ===
Un sirvidor web tien la función de procesar los scripts del llau del sirvidor pa dar una salida en [[HTML]] y otros llinguaxes del llau del veceru al restolador web del veceru. La información a procesar va poder ser vencida pol veceru al script por aciu cualquier aplicación na redolada del restolador. Pa ello pueden utilizase formulario web, enllaces colos valores implícitos na cadena o cualesquier otru métodu.
[[Ficheru:Servidor005.JPG|miniaturadeimagen|derecha|Rack con sirvidores]]

==== Procesamientu de PHP ====
{{AP|PHP}}

En [[PHP]] esisten variables globales que representen variables y datos de la conexones qu'establez el Sirvidor col veceru.
===== Métodu GET =====
Contién toles variables que s'unvien al traviés del métodu [[HTTP]] GET, referénciense al traviés del [[Array]] unidimensional <code>$_GET['variable']</code>. Esta variable contién el datu unviáu por GET acomuñáu a tal variable, en casu de qu'esista.
===== Métodu POST =====
Contién toles variables que s'unvien al traviés del métodu [[HTTP]] POST, referénciense al traviés del [[Array]] unidimensional <code>$_POST['variable']</code>. Esta variable contién el datu unviáu por POST acomuñáu a tal variable.

===== Sesiones =====
Contién datos de sesión adquiríos por aciu un pidimientu GET, POST o la llectura d'una Cookie{{ensin referencies}}. Referénciase al traviés del [[Array]] unidimensional <code>$_SESSION['variable']</code>.Esta variable contién un datu de session.
===== Cookies =====
Contién datos sobre toles cookies adquiríes nel pidimientu al server, apurríes pol restolador nel pidimientu HTTP. Referénciase al traviés del [[Array]] unidimensional <code>$_COOKIES['variable']</code>

===== Sirvidor =====
Contién datos proporcionaos pol Sirvidor Web. Referénciase al traviés del [[Array]] unidimensional <code>$_SERVER['variable']</code>

===== Procesamientu =====
1) Dau'l siguiente códigu [[PHP]].
<html>
<syntaxhighlight lang="php" line="1">
if(!empty($_GET['ip']){
if($_GET['ip']=="yes"){
ip();
}}
function ip(){
if ($_SERVER['REMOTE_ADDR']=="192.168.0.1"){
echo "<b>Les sos señes web son 192.168.0.1 </b>";
} else {
echo "<b>Les sos señes web nun son 192.168.0.1 sinón ".$_SERVER['REMOTE_ADDR']."</b>";
}}
</syntaxhighlight>
</html>
Nel casu anterior, podría tomase por supuesta la decisión del usuariu utilizando un enllaz que'l so destino sía l'archivu que contenga'l Script anterior + la variable y el valor utilizando la siguiente sintaxis: <code>archivu.php?var=val</code> onde <code>var</code> ye'l nome d'una variable dada y <code>val</code> ye valor asignáu a la variable.<br />

<syntaxhighlight lang="html4strict">
http://ruta/archivo.php?ip=yes
</syntaxhighlight>

2) En casu afirmativu'l Script anterior xenera'l siguiente códigu html que ye unviáu darréu al restolador.

<syntaxhighlight lang="html4strict">
<b>Les sos señes web ye 192.168.0.1 </b>
</syntaxhighlight>

3) El restolador interpreta'l códigu html y amosar similar a :

'''Les sos señes web ye 192.168.0.1'''

== Sirvidor Web Local ==
Un Sirvidor Web Local ye aquel Sirvidor Web que mora nuna rede llocal al equipu de referencia. El Sirvidor web Local pue tar instaláu en cualesquier de los equipos que formen parte d'una rede llocal. Ye por tanto obviu, que tolos Sirvidores Web, son locales a la rede llocal na que s'atopen, o a lo menos, locales al sistema nel que tán instalaos.

Cuando un sirvidor Web atópase instaláu nel mesmu equipu dende'l cual deseyar aportar puede utilizase la direición de [[Loopback]], <code>127.0.0.1</code> en [[Ipv4]] y <code>::1</code> en [[Ipv6]]. El puertu [[Transmission Control Protocol|TCP]] 80 resálvase. Los archivos almacenar nun direutoriu determináu pola configuración, xeneralmente modificable.

Esisten numberoses aplicaciones que faciliten la instalación automática de sirvidores web [[Sirvidor HTTP Apache|Apache]] y aplicaciones adicionales como [[Mysql]] y [[PHP]] (ente otros), de forma conxunta, como [[XAMPP]], JAMP o EasyPHP. Estes aplicaciones reciben el nome de [[LAMP]] cuando s'instalen en plataformes [[Linux]], [[WAMP]] en sistemes [[Windows]] y [[MAMP]] en sistemes [[Apple Macintosh]].

== Software ==
Dellos sirvidores web importantes son:
* ''[[Nginx]]''
* ''[[Sirvidor HTTP Apache|Apache]]''
* ''[[Internet Information Services]]'' (IIS)
* ''[[Cherokee (sirvidor web)|Cherokee]]''
* ''[[Tomcat]]''

Otru sirvidores, más simples pero más rápidos, son:
* [[lighttpd]]
* [[thttpd]]

== Ver tamién ==
* [[PHP]]
* [[Active Server Pages|ASP]]
* [[Perl]]
* [[Python]]/WSGI
* [[Common Gateway Interface|CGI]]
* [[.NET de Microsoft|.NET]]
* [[Java Server Pages]]
* [[Macromedia ColdFusion|CF (Adobe Coldfusion)]]
* [[Sirvidor d'aplicaciones]]
* [[Sirvidor d'archivos]]
* [[Node.js]]

== Referencies ==
{{llistaref}}
== Enllaces esternos ==
* [http://www.w3c.es/ World Wide Web Consortium (W3C)]


{{Tradubot|Servidor web}}

{{control d'autoridaes}}
[[Categoría:Sirvidores web]]
Un sirvidor web o sirvidor HTTP ye un programa informáticu que procesa una aplicación del llau del sirvidor, realizando conexones bidireccionales o unidireccionales y síncrones o asíncrones col veceru y xenerando o dexando una respuesta en cualquier llinguaxe o Aplicación del llau del veceru. El códigu recibíu pol veceru lu procesa por un restolador web. Pa la tresmisión de toos estos datos suel utilizase dalgún protocolu. Xeneralmente úsase'l protocolu HTTP pa estes comunicaciones, perteneciente a la capa d'aplicación del modelu OSI. El términu tamién s'emplega pa referise al ordenador.

 Arquiteutura 
 Pidimientu GET 
Un sirvidor web opera por aciu el protocolu HTTP, de la capa d'aplicación del modelu OSI. Al protocolu HTTP asígnase-y davezu'l puertu TCP 80. Los pidimientos al sirvidor suelen realizase por aciu HTTP utilizando'l métodu de pidimientu GET, nel que'l recursu solicítase al traviés de la url al sirvidor Web.  GET /index.html HTTP/1.1
HOST: www.host.com

Na barra d'URL d'un restolador cualesquier, el pidimientu anterior sería análogu a la siguiente direición Web:

www.host.com/index.html

 Esquema d'un pidimientu GET 
 Pidimientu Web 

El restolador, per mediu de la interfaz d'usuariu, dexa al usuariu realizar una o dellos pidimientos Web. La interfaz d'usuariu o redolada d'usuariu ye'l conxuntu d'elementos del restolador que dexen realizar el pidimientu de forma activa. Un pidimientu Web non solo pue facese por aciu un restolador, sinón con cualquier ferramienta habilitada pa tal fin, como una consola de comandos Telnet.

Elementos de la redolada d'usuariu más comunes en restoladores Web visuales:
 Nome  Descripción Hiperenllaz enllaz o link  Ye una porción de conteníu Web, testu, imaxe y otros elementos, qu'enllaza con unes señes Web. Al calcar un hiperenllaz, el restolador xenera un pidimientu GET automáticu al URL de dichu enllaz. Formulariu web  Al realizar l'unviu satisfactoriu de los datos d'un formulariu, el restolador Web xenera un pidimientu GET o POST (comúnmente POST) automáticu al par qu'unvia los datos al sirvidor. Barra de señes  Tolos restoladores inclúin una barra de señes por aciu la cual puede aportase manualmente a cualquier direición URL, de cuenta que'l restolador va xenerar un pidimientu GET automática a dicha URL cada vegada que l'usuariu deseyar. Script activu o pasivu  Cualquier aplicación JavaScript tien accesu al estáu del restolador, cómo puede modificar los datos que describen tal estáu, de forma pasiva (ensin la intervención del usuariu) o activa (por aciu dalguna aición del usuariu).

===== 1.1 Socket a señes DNS produz una socket con un sirvidor dau en direición IP por aciu TCP. Polo xeneral les señes que'l restolador tien primeramente son señes DNS (señes alfanumériques) que tendrá de convertir a señes numbériques.

 1.2 Resolvimientu de DNS a IP 
Si les señes daes son DNS y nun esiste una regla na base de datos DNS, el Host Resolver Request solicita al sirvidor DNS la o les señes IP correspondientes. El restolador crea una nueva regla y almacena les señes IP xunto a les señes DNS na so base de datos de regles DNS.

 1.3 Recuperación de reglar DNS 
Una vegada almacenada la regla, realízase un pidimientu a la base de datos DNS pa recuperar los valores de la regla.

===== 1.4 Socket a señes IP produz una socket cola direición IP por aciu TCP. Les señes IP puen recuperase nel pasu anterior.

===== 1.5 Preparación del pidimientu créase la pidimientu GET estableciendo la url ,un flag ,la priority del pidimientu y el method (implícitamente GET).

 1.6 Apertura Caché 
Ábrese y/o se crea una entrada nel http cache.

===== 1.7 Efeutuación de la pidimientu realiza la pidimientu GET. Lléense les cabeceres HTTP de la http transaction y más tarde el cuerpu de la http transaction.

 1.8 Consulta en Caxé 
Consultar nel caxé de discu si esiste una entrada nel caxé acomuñada al recursu que se solicitó. Los valores son created (true o false) y key (la url del recursu).

 1.9 Respuesta booleana de la esistencia del recursu solicitáu 
Si la entrada nun esiste (si'l valor de created ye false) escríbense los datos nel caxé de discu. Si non, lléese direutamente.

===== 2.0 Presentación visual del recursu conclúyese la operación y amuésase en pantalla (si ye precisu) la información.

 Pidimientu GET pasiva 
Javascript dexa realizar cambeos nel estáu del restolador. L'estáu del restolador vien definíu pol array d'oxetos location del oxetu global Window. Referenciar a tal oxetu con window.location. En concretu window.location.href contién les señes actuales del restolador Web.

Si una parte del script executa tal sentencia:

window.location.href='http://wikipedia.org';

El restolador va faer tal pidimientu Web ensin que l'usuariu mediara en tal circunstancia o los sos efeutos. De la mesma va producise un nuevu pidimientu GET si altériase'l valor de window.location.search o window.location.protocol.

 Procedimientu del restolador 
La xera del restolador Web ye crear el pidimientu a partir de los datos recoyíos na redolada d'usuariu d'elementos del mesmu, como enllaces, el valor del testu de la barra de busca, los metatags.

 Entrar

Al pulsiar nel enllaz, el restolador crea automáticamente el pidimientu GET y les cabeceres del pidimientu sobre la base de los metatags (cabeceres definíes), los cookies y cabeceres automátiques del restolador, pa depués unviales xunto al pidimientu al Sirvidor.

 Pidimientu POST 
Ye'l segundu tipu de pidimientu HTTP más utilizáu. Los datos a unviar al sirvidor incluyir nel cuerpu del mesmu pidimientu coles cabeceres HTTP asignaes correspondientemente respectu al tipu de pidimientu. Xeneralmente acomúñase colos formulario web nos que los datos suelen ser cifraos pa unvialos de manera segura al sirvidor.

Por motivos de convención incluyir nel pidimientu la cabecera application/x-www-form-urlencoded, qu'indica'l formatu o codificación de los datos a unviar; esta ye variable->valor nel formatu: variable=valor separada cada par variable->valor por &. Esta cabecera, nos formularios HTML únviase automáticamente, pero n'otres teunoloxíes web tal como AJAX, si deseyar faer correutamente un pidimientu POST, ten de ser especificáu o instanciado l'oxetu:
setRequestHeader("Content-type:application/x-www-form-urlencode");ajax.send(data);

Si utilizara'l métodu GET los datos deberíen de ser añadíos a la URL, lo que los espondría a ser vistos de forma direuta.

 Estructura d'un pidimientu POST 

Estructura típica d'un pidimientu POST
Amuesa

Petition type
POST url HTTP/1.1
POST comment.php HTTP/1.1

Referer
http-url-referer
index.php

Content-Length
contentlenght-int
63

Origin
http-url-origin
http://es.wikipedia.org

User-Agent
useragent-string
Mozilla/5.0 (Windows; O; Windows NT 6.1; en-US) ...

Content-Type
content-type-string
application/x-www-form-urlencoded

Accept
mimetypes-accepted-string
application/xml,application/xhtml+xml ...

Accept-Language
language-accepted-string
es-ES,ye;q=0.8

Accept-Charset
charset-accepted-string
ISO-8859-1,utf-8;q=0.7,*;q=0.3

Cookie
phpsessid-string
PHPSESSID=gm0ugf96iojuldio8i51o92716

Accept-Encoding
accept-encoding-string
gzip,deflate,sdch

Content
Content-string
&data=4&lang=es+ye

 Composición d'un pidimientu POST 
Les cabeceres más comunes que s'unvien nun pidimientu POST:
 Petition type: Especifica'l tipu de pidimientu HTTP. (Esta cabecera nun tien nome, únviase talo como)
 Referer: Especifica la url dende la cual fíxose'l pidimientu POST.
 Content-Length: Especifica'l llargor en bytes de los datos unviaos nel cuerpu del pidimientu.
 Origin: Especifica la url principal del sitiu.
 User-Agent:Especifica l'identificador del restolador Web dende'l cual fíxose'l pidimientu.
 Content-Type: Especifica'l formatu o MIME de los datos unviaos nel cuerpu del pidimientu.
 Accept: Especifica'l MIME que s'espera na respuesta.
 Accept-Language: Especifica'l códigu del llinguaxe esperáu na respuesta.
 Accept-Charset: Especifica la codificación que s'espera na respuesta.
 Cookie: Especifica un identificador de sesión nel pidimientu deriváu d'un cookie.
 Accept-Encoding: Especifica'l tipu de codificación (xeneralmente compresión) que s'espera de la respuesta. (Nun tolos restoladores unvien esta testera)

 Estructura d'una respuesta POST 

Estructura típica d'una respuesta POST
Amuesa

HTTP version & state
HTTP-version-state
HTTP/1.1 200 OK

Date
date-string
Tue, 07 Jun 2011 05:52:31 GMT

Server
server-string
Apache/2.2.17 (Win32) mod_ssl/2.2.17...

Expires
expire-date-string
Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control
Cache-control-string
no-store, no-cache, must-revalidate...

Pragma
pragma-string
no-cache

Content-Length
Content-length-int
297

Content-Type
Content-type-string
text/html

Keep-Alive
Keep-alive-string
timeout=5, max=98

Connection
Connection-string
Keep-Alive

X-Powered-By
X-powered-by-string
PHP/5.3.5

 Codificación del mensaxe del cuerpu del pidimientu 
Los datos que s'unvien nel cuerpu del pidimientu POST tienen de tener dalgún formatu que dexe manipolialos nun futuru procesamientu. Por ello'l pidimientu tien de tener asignada la cabecera Content-Type que'l so valor va ser la codificación de los datos. D'esta miente el sistema va poder estremar ente variables aisllaes, datos binarios, testu planu, o cualesquier otru tipu de formatu. El formatu d'una cadena de datos denominar MIME y ye'l valor que tendrá de ser incluyíu nesta cabecera.

En HTML la cabecera Content-Type especifícase automáticamente y el so valor ye application/x-www-form-urlencoded, sicasí pueden especificase por estándar otros dos valores: multipart/form-data y text/plain utilizando l'atributu enctype del elementu form de la siguiente manera

 ... ... ...

O cualesquier otru valor MIME. El multipart/form-data utilizar pa unviar grandes cadenes binaries que suponen cualesquier otru tipu de documentu que nun sía testu planu, como imáxenes, videos o ejecutables. Pa dellos valores, dixebrar por comes.

El application/x-www-form-urlencoded codifica de forma automática los valores de tolos elementos del formulariu de la manera variable=valor, dixebraos por &. L'atributu name d'un input suel ser el nome de la variable y la so value el valor. Los espacios reemplazar por + y los calteres non alfanuméricos por $HH onde HH representa'l númberu hexadecimal del calter ASCII.

 id=valor+de+la variable&tama%A4o=4

que representáu d'otra forma ye:

id: valor de la variabletamañu: 4

 Procedimientu del restolador 
El restolador arrexunta la información del formulariu pa crear el pidimientu y unviala. Les cabeceres unviar xunto al pidimientu POST, y arrexuntar sobre la base de los metatags definíos nel códigu, los automáticos del restolador y los Cookies. Ye'l restolador, tamién, el que codifica los datos si ye necesariu. 

 Funcionamientu 
miniaturadeimagen|derecha|Sirvidor
El Sirvidor web executar nun ordenador calteniéndose a la espera de pidimientos per parte d'un veceru (un restolador web) y respuende a estos pidimientos afechiscamente, por aciu una páxina web que se va exhibir nel restolador o amosando'l respeutivu mensaxe si detectóse dalgún error. A manera d'exemplu, al teclear www.wikipedia.org nel nuesu restolador, ésti realiza un pidimientu HTTP al sirvidor de d'estes señes. El sirvidor respuende al veceru unviando'l códigu HTML de la páxina; el veceru, una vegada recibíu'l códigu, interpretar y exhibir en pantalla. Como vemos con esti exemplu, el veceru ye l'encargáu d'interpretar el códigu HTML, esto ye, d'amosar les fontes, los colores y la disposición de los testos y oxetos de la páxina; el sirvidor tan solo llindar a tresferir el códigu de la páxina ensin llevar a cabu nenguna interpretación de la mesma.

Amás de la tresferencia de códigu HTML, los Sirvidores web pueden apurrir aplicaciones web. Estes son porciones de códigu que s'executen cuando se realicen ciertos pidimientos o respuestes HTTP. Hai qu'estremar ente:
 Aplicaciones nel llau del veceru: el vecera web ye l'encargáu d'executales na máquina del usuariu. Son les aplicaciones tipu Java "applets" o Javascript: el sirvidor apurre'l códigu de les aplicaciones al veceru y ésti, por aciu el restolador, executar. Ye necesariu, por tanto, que'l veceru disponga d'un restolador con capacidá pa executar aplicaciones (tamién llamaes scripts). Comúnmente, el restoladores dexen executar aplicaciones escrites en llinguaxe javascript y java, anque pueden añader más llinguaxes por aciu l'usu de plugins.
 Aplicaciones nel llau del sirvidor: el sirvidor web executa l'aplicación; ésta, una vegada executada, xenera ciertu códigu HTML; el sirvidor toma esti códigu recién creáu y unviar al veceru per mediu del protocolu HTTP.
Les aplicaciones de sirvidor munches vegaes suelen ser la meyor opción pa realizar aplicaciones web. La razón ye que, al executase ésta nel sirvidor y non na máquina del veceru, ésti nun precisa nenguna capacidá añadida, como sí asocede nel casu de querer executar aplicaciones javascript o java. Con éses cualquier veceru dotáu d'un restolador web básicu puede utilizar esti tipu d'aplicaciones.

El fechu de qu'HTTP y HTML tean íntimamente amestaos nun tien de dar llugar a confundir dambos términos. HTML ye un llinguaxe de marques y HTTP ye un "protocolu".

 Aplicación del llau del Sirvidor 
Una aplicación del llau del sirvidor ye cualquier programa o conxuntu d'instrucciones diseñaes cola cuenta de qu'un Sirvidor Web procesar pa realizar dalguna aición. Les aplicaciones del llau del sirvidor tán escrites por aciu dalgún llinguaxe de programación, ente los que destaquen:

LlinguaxeFecha de primera versión estableSistema operativuÚltima versión estable
PHP1995Multiplataforma5.6.4
ASP1998Windows (Delles versiones)4.0
Perl1987Multiplataforma5.12.3
Python1991Multiplataforma3.2.0
<tr>
Ruby1995Multiplataforma1.9.3-p125

El 75% de les aplicaciones del llau del sirvidor tán escrites en PHP, siguíu d'ASP y les demás opciones usaes de forma alternativa y bien casual.

 Procesamientu del llau del sirvidor 
Un sirvidor web tien la función de procesar los scripts del llau del sirvidor pa dar una salida en HTML y otros llinguaxes del llau del veceru al restolador web del veceru. La información a procesar va poder ser vencida pol veceru al script por aciu cualquier aplicación na redolada del restolador. Pa ello pueden utilizase formulario web, enllaces colos valores implícitos na cadena o cualesquier otru métodu.
miniaturadeimagen|derecha|Rack con sirvidores

 Procesamientu de PHP 

En PHP esisten variables globales que representen variables y datos de la conexones qu'establez el Sirvidor col veceru.
 Métodu GET 
Contién toles variables que s'unvien al traviés del métodu HTTP GET, referénciense al traviés del Array unidimensional $_GET['variable']. Esta variable contién el datu unviáu por GET acomuñáu a tal variable, en casu de qu'esista.
 Métodu POST 
Contién toles variables que s'unvien al traviés del métodu HTTP POST, referénciense al traviés del Array unidimensional $_POST['variable']. Esta variable contién el datu unviáu por POST acomuñáu a tal variable.

 Sesiones 
Contién datos de sesión adquiríos por aciu un pidimientu GET, POST o la llectura d'una Cookie. Referénciase al traviés del Array unidimensional $_SESSION['variable'].Esta variable contién un datu de session.
 Cookies 
Contién datos sobre toles cookies adquiríes nel pidimientu al server, apurríes pol restolador nel pidimientu HTTP. Referénciase al traviés del Array unidimensional $_COOKIES['variable']

 Sirvidor 
Contién datos proporcionaos pol Sirvidor Web. Referénciase al traviés del Array unidimensional $_SERVER['variable']

 Procesamientu 
1) Dau'l siguiente códigu PHP.
if(!empty($_GET['ip']){
if($_GET['ip']=="yes"){
ip();
}}
function ip(){
if ($_SERVER['REMOTE_ADDR']=="192.168.0.1"){
echo "<b>Les sos señes web son 192.168.0.1 </b>";
} else {
echo "<b>Les sos señes web nun son 192.168.0.1 sinón ".$_SERVER['REMOTE_ADDR']."</b>";
}}
Nel casu anterior, podría tomase por supuesta la decisión del usuariu utilizando un enllaz que'l so destino sía l'archivu que contenga'l Script anterior + la variable y el valor utilizando la siguiente sintaxis: archivu.php?var=val onde var ye'l nome d'una variable dada y val ye valor asignáu a la variable.

http://ruta/archivo.php?ip=yes

2) En casu afirmativu'l Script anterior xenera'l siguiente códigu html que ye unviáu darréu al restolador.

<b>Les sos señes web ye 192.168.0.1 </b>

3) El restolador interpreta'l códigu html y amosar similar a :

Les sos señes web ye 192.168.0.1

 Sirvidor Web Local 
Un Sirvidor Web Local ye aquel Sirvidor Web que mora nuna rede llocal al equipu de referencia. El Sirvidor web Local pue tar instaláu en cualesquier de los equipos que formen parte d'una rede llocal. Ye por tanto obviu, que tolos Sirvidores Web, son locales a la rede llocal na que s'atopen, o a lo menos, locales al sistema nel que tán instalaos.

Cuando un sirvidor Web atópase instaláu nel mesmu equipu dende'l cual deseyar aportar puede utilizase la direición de Loopback, 127.0.0.1 en Ipv4 y ::1 en Ipv6. El puertu TCP 80 resálvase. Los archivos almacenar nun direutoriu determináu pola configuración, xeneralmente modificable.

Esisten numberoses aplicaciones que faciliten la instalación automática de sirvidores web Apache y aplicaciones adicionales como Mysql y PHP (ente otros), de forma conxunta, como XAMPP, JAMP o EasyPHP. Estes aplicaciones reciben el nome de LAMP cuando s'instalen en plataformes Linux, WAMP en sistemes Windows y MAMP en sistemes Apple Macintosh.

 Software 
Dellos sirvidores web importantes son:
 Nginx
 Apache
 Internet Information Services (IIS)
 Cherokee
 Tomcat

Otru sirvidores, más simples pero más rápidos, son:
 lighttpd
 thttpd

 Ver tamién 
 PHP
 ASP
 Perl
 Python/WSGI
 CGI
 .NET
 Java Server Pages
 CF (Adobe Coldfusion)
 Sirvidor d'aplicaciones
 Sirvidor d'archivos
 Node.js

 Referencies 

 Enllaces esternos 
 World Wide Web Consortium (W3C)

Categoría:Sirvidores web