Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Redx

Bibliotecas HTTP/Servidor HTTP

Recommended Posts

Minha duvida é sobre servidores web e bibliotecas voltada para o protocolo HTTP.



Tenho conhecimento que no PHP você pode usar o "apache" ou outro como servidor web, mas em outras linguagens como: Go, Crystal, Hack, Ruby e Python, se tem bibliotecas HTTP, então nelas seria opcional criar seu próprio servidor web(http), se tornando complementar a um existente ou obrigatoriamente tem que criar um sem vinculo a um pronto?



Sempre vejo isso em apresentação de uma linguagem:



Exemplo:

Código tirado do site: cystal-lang.org

# A very basic HTTP server
require "http/server"

server = HTTP::Server.new(8080) do |context|
context.response.content_type = "text/plain"
context.response.print "Hello world, got #{context.request.path}!"
end

puts "Listening on http://0.0.0.0:8080"
server.listen

Dependendo das situações que forem corretas(acima), poderia explicar sua necessidade ou me indicar um conteúdo para estudar.



Sempre mantive essa duvida, sei que sempre vai precisar de um servidor web, porem não sei se sempre vai ser encaixar o apache ou nginx(os que eu conheço), como quero aprender uma linguagem nova e aprofundar mais no mundo do "Back-End" e não seguir somente receitar prontas.



Grato


Compartilhar este post


Link para o post
Compartilhar em outros sites

Cada linguagem tem seu próprio servidor web, você não precisa escrever todos do 0, a não ser que você realmente queira algo. Vou listar alguns abaixo, apesar de alguns deles não serem de fato servidores web própriamente ditos, é possível utilizá-los para criar aplicações web completas.

Python -> Tornado, Django

Go -> Revel

Ruby -> Rails, Raptor, Puma

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cada linguagem tem seu próprio servidor web, você não precisa escrever todos do 0, a não ser que você realmente queira algo. Vou listar alguns abaixo, apesar de alguns deles não serem de fato servidores web própriamente ditos, é possível utilizá-los para criar aplicações web completas.

Python -> Tornado, Django

Go -> Revel

Ruby -> Rails, Raptor, Puma

Muito obrigado pela resposta e foi mal pela demora da resposta, tive ate que recuperar a senha do forum.

Compreendo a necessidade de um "Servidor Web", mas tenho algumas duvidas ainda, acredito que não estou conseguindo explicar.

Pelo que entendi o apache e nginx não servem para todas as linguagens, assim cada linguagem tem servidores específicos, estou correto ?

No caso dos frameworks, eles tem um servidor embutido dentro deles e necessita de um "fora"?

Por quê e em quais situações especificas é necessário criar meu próprio servidor web ou se utiliza esse servidor, mas roda outro por fora(apache etc) ? Essa pergunta vai mais voltada para Go-Lang e Crystal-Lang que me instigaram a essas duvidas, pois tem muitos exemplos de criação de um servidor nessas linguagens.

Quando se cria seu próprio servidor, sua aplicação roda independente, somente necessitando de seu servidor ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Pelo que entendi o apache e nginx não servem para todas as linguagens, assim cada linguagem tem servidores específicos, estou correto ?

Apache e Nginx só servem para PHP, infelizmente.

No caso dos frameworks, eles tem um servidor embutido dentro deles e necessita de um "fora"?

Frameworks geralmente não possuem nenhum servidor, algumas exceções existem, como é o caso do Laravel, mas isso só é possível porque o próprio PHP tem um servidor embutido que pode ser iniciado em uma pasta qualquer utilizando

php -S localhost:[porta]

Se isso não existisse o framework não teria como inicializar nada...

Por quê e em quais situações especificas é necessário criar meu próprio servidor web ou se utiliza esse servidor, mas roda outro por fora(apache etc) ? Essa pergunta vai mais voltada para Go-Lang e Crystal-Lang que me instigaram a essas duvidas, pois tem muitos exemplos de criação de um servidor nessas linguagens.

Se você está se referindo a "criar" como em "criar a partir do 0", em nenhuma situação real isso vale a pena, é um esforço muito grande e é muito complicado ter um servidor estável e escalável para uma aplicação de produção. A melhor resposta é sempre procurar os servidores prontos das linguagens, ou os recomendados.

Se sua resposta for "criar para aprender", você pode criar quantos quiser, desde que você não tente usar eles em produção.

Quando se cria seu próprio servidor, sua aplicação roda independente, somente necessitando de seu servidor ?

Essa pergunta ficou meio nebulosa, as aplicações sempre rodam de forma independente...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apache e Nginx só servem para PHP, infelizmente.

Frameworks geralmente não possuem nenhum servidor, algumas exceções existem, como é o caso do Laravel, mas isso só é possível porque o próprio PHP tem um servidor embutido que pode ser iniciado em uma pasta qualquer utilizando

php -S localhost:[porta]

Se isso não existisse o framework não teria como inicializar nada...

Se você está se referindo a "criar" como em "criar a partir do 0", em nenhuma situação real isso vale a pena, é um esforço muito grande e é muito complicado ter um servidor estável e escalável para uma aplicação de produção. A melhor resposta é sempre procurar os servidores prontos das linguagens, ou os recomendados.

Se sua resposta for "criar para aprender", você pode criar quantos quiser, desde que você não tente usar eles em produção.

Essa pergunta ficou meio nebulosa, as aplicações sempre rodam de forma independente...

Entendi, já que não é viavel, então por que eles colocam exemplos de servidores "HTTP"(escuta do serviço) como esse da Crystal-Lang? Tem bastante em Go-Lang também, dizendo que é bem fácil a criação de um e etc, sendo que não é viável.

Exemplo:

Código tirado do site: cystal-lang.org

# A very basic HTTP server
require "http/server"

server = HTTP::Server.new(8080) do |context|
  context.response.content_type = "text/plain"
  context.response.print "Hello world, got #{context.request.path}!"
end

puts "Listening on http://0.0.0.0:8080"
server.listen

Então em resumo, precisamos de um software "servidor http" para servir nossa aplicação, mas cada linguagem pode ter o seus próprios servidores, exemplo: PHP pode ser apache e Ruby o Puma e assim por diante.

Acabei generalizando o apache ou Nginx, pois já ouvi falar "Maioria das vezes você vai ter sua aplicação rodando em alguma empresa que ofereça servidores apache", mas quando se oferece hospedagens em outras linguagens alem de "PHP", deve haver outra configuração de ambiente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não está criando um servidor web ai... Você está usando a biblioteca padrão do Crystal para HTTP, ou seja, você está usando o servidor embutido da linguagem.

O que você está confundindo é que a linguagem possui um servidor próprio para fins de testes, ou seja, quando você estiver lá no seu ambiente de desenvolvimento e quiser testar alguma coisa, ai você pode simplesmente subir o servidor padrão da linguagem e ir testando seu código e sua aplicação, mas em nenhuma hipótese esses servidores devem ser usados em ambientes de produção porque não são confiáveis a esse ponto.

Por isso existem os servidores externos, eles são ferramentas feitas exclusivamente para receber trafego de rede e rotear entre seus processos e sua aplicação como um todo. Não é que você sempre precise usar um servidor quando você cria algo, é que você vai sempre precisar de um servidor externo (como o Apache, Puma, etc) se você quiser rodar qualquer coisa em produção e não em testes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não está criando um servidor web ai... Você está usando a biblioteca padrão do Crystal para HTTP, ou seja, você está usando o servidor embutido da linguagem.

O que você está confundindo é que a linguagem possui um servidor próprio para fins de testes, ou seja, quando você estiver lá no seu ambiente de desenvolvimento e quiser testar alguma coisa, ai você pode simplesmente subir o servidor padrão da linguagem e ir testando seu código e sua aplicação, mas em nenhuma hipótese esses servidores devem ser usados em ambientes de produção porque não são confiáveis a esse ponto.

Por isso existem os servidores externos, eles são ferramentas feitas exclusivamente para receber trafego de rede e rotear entre seus processos e sua aplicação como um todo. Não é que você sempre precise usar um servidor quando você cria algo, é que você vai sempre precisar de um servidor externo (como o Apache, Puma, etc) se você quiser rodar qualquer coisa em produção e não em testes.

Estava esperando você responder para finalizar, caso desse uma outra visão, mas realmente eu estava confundindo as coisas.

Por acaso, pesquisando sobre Ruby e seus Frameworks(Principalmente Rails), acabei caindo no "Rack" a interface de webserver do Ruby, a ponte da aplicação com o servidor web e compreendi que na verdade o "apache" e o "nginx" são um software que "transformam" a maquina em servidor web, nisso me aprofundei mais, respondendo essa duvida e criando outras que serão respondidas nesse caminho que encontrei.

Sendo então: Aplicação->Interface(Interno)->Servidor web da aplicação(externo)->Software Servidor Web(nginx, opcional, para ajudar).

Obrigado por ter me ajudado ate aqui, consegui esse caminho de um conteúdo que estava muito confuso em minha mente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Filhote de Dev
      Estou fazendo um requisição HTTP e de retorno recebo um Json! Então eu quero pegar esse valor de Json e atribuir a outra variável para poder modificá-la e depois exibir as duas lado a lado para comparar. Então me deparei com 2 problemas o primeiro é que não estou conseguindo atribuir o valor httpRequest.responseText a uma variável, já tentei a função eval() e a toString() e quando eu peço para printar com um alert() para verificar me retorna undefined o segundo problema é que eu estava exibindo o resultado na dom por meio de appendChild(), estou exibindo apenas com os valores originais para teste, mas quando ele executa esse trexo do code, ele printa na dom e logo em seguida retira da dom, tipo uma piscadinha rápida. Ficaria grato se me ajudassem a resolver esse problema.
       
      o Json que ele recebe de uma pagina .html é esse:
      {"numero_casas":9,"token":"68c56aa784fe216ae92720b76386ea0995055074","cifrado":"fqnw rw mxdkc, unjen rc xdc. sxbqdj kuxlq","decifrado":"","resumo_criptografico":""}  
      o Script esta assim:
      var httpRequest function request(){ var url = 'test.html'//apagar depois if (window.XMLHttpRequest) { // Mozilla, Safari, ... httpRequest = new XMLHttpRequest() } else if (window.ActiveXObject) { // IE try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP") } catch (e) { try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP") } catch (e) {} } } if (!httpRequest) { alert('Giving up :( Cannot create an XMLHTTP instance') return false } httpRequest.onreadystatechange = alertContents httpRequest.open('GET', url, true) httpRequest.responseType = 'jason' httpRequest.send() httpRequest.onload = function(){ view(httpRequest) } } function alertContents() { if (httpRequest.readyState === 4) { if (httpRequest.status === 200) { alert(httpRequest.responseText) } else { alert('There was a problem with the request.') } } } function view(httpRequest){ var resposta = httpRequest.responseText.toString() alert(resposta.value) var box = document.querySelector('div#decoding') box.setAttribute('class', 'shadow') var challenge = document.createElement('fieldset') challenge.setAttribute('class', 'painting') var legendChallenge = document.createElement('legend') legendChallenge.innerHTML = 'Challenge' challenge.innerHTML = `Número de casas: ${httpRequest.response.numero_casa}<br> Token: ${httpRequest.response.token}<br> Cifrado: ${httpRequest.response.cifrado}<br> Decifrado: ${httpRequest.response.decifrado}<br> Resumo Criptografico: ${httpRequest.response.resumo_criptografico}` var answer = document.createElement('fieldset') answer.setAttribute('class', 'painting') var legendAnswer = document.createElement('legend') legendAnswer.innerHTML = 'Answer' answer.innerHTML = `Número de casas: ${httpRequest.response.numero_casas}<br> Token: ${httpRequest.response.token}<br> Cifrado: ${httpRequest.response.cifrado}<br> Decifrado: ${httpRequest.response.decifrado}<br> Resumo Criptografico: ${httpRequest.response.resumo_criptografico}` box.appendChild(challenge) box.appendChild(answer) challenge.appendChild(legendChallenge) answer.appendChild(legendAnswer) }  
       
      Index.html:
      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <link rel="stylesheet" href="style.css"> <title>Caesar cipher</title> </head> <body> <header> <h1>Caesar cipher</h1> </header> <section> <div class="container"> <div class="box"> <div class="form"> <form action=""> <div> <fieldset class="shadow"> <legend><h1>Decoding</h1></legend> <button id="btntoken" onclick="request()">Fetch Encryption Challenge</button> </fieldset> </div> <div id="decoding" class="aling"></div> </form> </div> </div> </div> </section> <footer> </footer> <script type="text/javascript" src="script.js"></script> </body> </html>  
       
      e o style.css para dar sentido as class:
      /*zerando margein e padding de todos os elementos*/ *{ margin: 0; padding: 0; } /*definido estilo padrão*/ body{ font-family: 'Courier New', Courier, monospace; font-size: 16px; background-color: #F5F6FA; } /*Estilização e alinhamento do cabeçario*/ header{ background-color: #22212F; color: #FFF; height: 80px; font-size: 24px; align-items: center; display: flex; padding-left: 15px; } /*Alinhamento das tags presentes na section*/ section,div.form{ display: flex; justify-content: center; } div.container{ margin:5px; width: 800px; background-color: #FFF; padding: 15px; margin-top: 20px; } div.parag,div.box{ display: block; } div.form{ margin-top:30px; } p{ margin-top: 10px; } /*estilização do formulario principal*/ .shadow{ box-shadow: 5px 5px 5px 2px #22212F; } fieldset{ width: 500px; min-height:150px; padding: 10px; } legend{ font-size: 20px; } input#token{ font-size: 16px; width: 350px; height: 30px; } button#btntoken{ margin: 5px; margin-top:15px; width:480px; height: 50px; font-size: 24px; } /*estilização da resposta ao usuário*/ .aling{ margin: 20px; } .painting{ display: inline-block; width: 230px; min-height: 100px; }
    • Por danielmb1
      Oi gente, tenho um site de compras e quero fazer uma pagina de referencia em cima da venda. Ex: A pagina é sobre uma camiseta, dai dependendo do link de referencia a pagina se transforma em outra com desconto. E sem o link fica igual.
      em como fazer isso?
    • Por Lucasromeiro
      Boa tarde pessoal!
      Eu estou desenvolvendo uma solução pra um projeto em Arduino ESP8266.
      Neste projeto preciso fazer um POST HTTP pra me comunicar com a api do Dropbox e fazer upload de arquivos!
      A questão é que não entendo muito de POST. (Se alguém tiver algo explicativo agradeço!)
      Na documentação do Dropbox não consigo me guiar bem.
      Preciso saber o código raiz (raw) que será enviado pra o servidor pra eu conseguir enviar.
      Ainda não consegui êxito nas tentativas.
      O que me deixa mais confuso é o código do Dropbox que estão em CURL. Que nunca tive contato. Mas usa POST. Ainda é um pouco confuso pra mim...
      A documentação:
      https://www.dropbox.com/developers/documentation/http/documentation
       
      Estou tantando fazer o POST assim:
       
      POST /2/auth/token/from_oauth1 HTTP/1.1
      Host: api.dropboxapi.com
      Content-Type: application/x-www-form-urlencoded
      Content-Length: xx
      curl -X POST https://api.dropboxapi.com/2/auth/token/from_oauth1 \
          --header "Authorization: Basic <MY CODE>" \
          --header "Content-Type: application/json" \
          --data "{\"oauth1_token\": \"qievr8hamyg6ndck\",\"oauth1_token_secret\": \"qomoftv0472git7\"}"
       
       
       
      Resposta:
       
      HTTP/1.1 400 Bad Request
      Server: nginx
      Date: Mon, 23 Apr 2018 04:04:30 GMT
      Content-Type: text/html
      Content-Length: 264
      Connection: close
      X-Frame-Options: DENY
      Content-Security-Policy: sandbox; frame-ancestors 'none'
      X-Content-Type-Options: nosniff
      Content-Disposition: attachment; filename='error'
       
      Não tive sucesso ainda. 
      Deve me faltar conhecimento sobre POST ou CURL.
       
      Podem me ajudar??
       
      obrigado!!!
    • Por vpontessilva
      Olá senhores, estou criando uma aplicação simples em AngularJS, a aplicação se resume em 3 páginas:
      1 - Aparelho: Onde a pessoa escolhe o aparelho
      2 - Planos: Escolhe o plano relacionado ao aparelho
      3 - Cadastro final informando nome, e-mail, telefone e etc...
       
      A lista de aparelhos e e de planos possiveis praquele aparelho escolhido vem de um arquivo JSON, que eu pego através de uma requisição HTTP
      A dúvida é: Eu gostaria de ir salvando essas informações, quando ele clicar em um aparelho, salvasse, depois o plano e salvasse e depois de escrever os dados
      salvasse tudo e saisse na página final e um console.log, mas como faço isso? Tô perdido.. 

      Esse é o meu arquivo api.js, onde faço a requisição dos aparelhos:
      // plataformas //arquivo api.js app.controller('plataformAPI', function($scope, $http){ $http.get('http://private-59658d-celulardireto2017.apiary-mock.com/plataformas') .then(function(response){ $scope.dados = response.data.plataformas; }); }); Esse é o arquivo home.html, onde a pessoa escolhe os aparelhos:
      <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12" align="center" ng-controller="plataformAPI"> <div ng-repeat="x in dados"> <h1>{{x.nome}}</h1> <p>{{x.descricao.replace('|',' ')}}</p> <p><a class="btn btn-primary btn-md" href="{{prefix + x.nome}}" role="button">Quero esse</a></p> </div> </div> Eu gostaria de salvar o nome do aparelho que ele clicou.. 
    • Por Aprendiz/CE
      Prezados,

      Posso utilizar HTTP e HTTPS ambos no mesmo domínio?

      Gostaria de estar utilizando o HTTPS somente em alguns scripts, mas se eu mandar ativar
      esse protocolo no meu domínio ficarei obrigado a usar em todos os scripts ou não?

      Grato e aguardo qualquer comentário.
       
      P.S.: Hospedagem Linux + PHP + MySQL
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.