웹서버에 대한 자세한 소개
1. HTTP 프로토콜 소개
HTTP는 Hyper Text Transfer Protocol의 약자입니다. 이 개발은 HTTP/1.0 버전을 정의하는 RFC 1945 시리즈를 발표한 World Wide Web 컨소시엄과 IETF(Internet Engineering Task Force) 간의 협력의 결과입니다. 그 중 가장 유명한 것은 RFC 2616이다. RFC 2616은 오늘날 일반적으로 사용되는 버전인 HTTP 1.1을 정의합니다.
HTTP 프로토콜(HyperText Transfer Protocol, Hypertext Transfer Protocol)은 WWW 서버에서 로컬 브라우저로 하이퍼텍스트를 전송하는 데 사용되는 전송 프로토콜입니다. 브라우저를 더욱 효율적으로 만들고 네트워크 전송을 줄일 수 있습니다. 이는 컴퓨터가 하이퍼텍스트 문서를 정확하고 빠르게 전송하도록 보장할 뿐만 아니라 문서의 어느 부분이 전송되고 내용의 어느 부분이 먼저 표시되는지(예: 그래픽보다 텍스트) 등을 결정합니다.
HTTP는 데이터(HTML 파일, 이미지 파일, 쿼리 결과 등)를 전송하기 위한 TCP/IP 기반의 통신 프로토콜입니다.
HTTP는 요청과 응답으로 구성된 애플리케이션 계층 프로토콜이며 표준 클라이언트-서버 모델입니다.
HTTP는 상태 비저장 프로토콜입니다.
![HTTP 프로토콜에 대한 깊은 이해.jpg 업로드에 실패했습니다. 다시 시도해 주세요.]

이는 HTTP 프로토콜의 사용을 제한하며 클라이언트가 요청을 시작하지 않으면 서버가 클라이언트에 메시지를 푸시하는 것이 불가능합니다.
HTTP 프로토콜은 상태 비저장 프로토콜입니다. 이 요청과 동일한 클라이언트의 이전 요청 간에는 일치하지 않습니다.
2.http 프로토콜 분석
1. 브라우저 요청

데이터베이스의 CRUD 추가, 삭제, 수정 및 확인 작업에 대응할 수 있습니다.
CREATE: PUT
READ: GET
UPDATE: POST
DELETE: DELETE
2. 서버 응답은 헤더와 본문(본문은 선택 사항) 두 부분으로 나뉩니다. 네트워크 참조 헤더의 가장 중요한 줄은 다음과 같습니다.
HTTP/1.1 200 OK200은 성공적인 응답을 나타내고 다음 OK는 설명입니다.
반환된 값이 200이 아니면 다음과 같은 다른 기능이 있는 경우가 많습니다.
- 실패한 응답에는 404 찾을 수 없음: 웹페이지가 존재하지 않습니다.
- 500 내부 서버 오류: 서버에 내부 오류가 있습니다.
- ...etc.. 잠깐...

Content-Type: text/html
Content-Type은 응답 내용을 나타내며, 여기서 text/html은 HTML 웹 페이지를 나타냅니다.
3. 브라우저 파싱 프로세스
브라우저가 Sina 홈페이지의 HTML 소스 코드를 읽으면 HTML을 파싱하고 페이지를 표시한 다음 HTML의 다양한 링크를 기반으로 Sina 서버에 HTTP 요청을 보냅니다. 해당 사진, 비디오, 플래시, JavaScript 스크립트, CSS 및 기타 리소스에 연결하고 마지막으로 전체 페이지를 표시합니다.
3. 요약
1. HTTP 요청 프로세스
Sina 홈페이지에 따라 HTTP 요청 프로세스를 요약해 보겠습니다.
1단계: 브라우저는 먼저 서버에 HTTP 요청을 보냅니다.
방법: GET 또는 POST, GET만 리소스를 요청하면 POST에는 사용자 데이터가 함께 제공됩니다.
경로: /full/url/path;
도메인 이름: 호스트 헤더로 지정: 호스트: www.sina.com
및 기타 관련 헤더; POST인 경우 요청에는 사용자 데이터가 포함된 본문도 포함됩니다.
응답 유형: Content-Type 및 기타 관련 헤더에 의해 지정됩니다.
일반적으로 서버의 HTTP 응답은 콘텐츠를 전달합니다. , 응답 내용이 포함된 Body가 있습니다. 웹 페이지의 HTML 소스 코드가 Body에 있습니다.
3단계: 브라우저가 서버에서 사진과 같은 다른 리소스를 계속 요청해야 하는 경우 다른 HTTP 요청을 수행하고 1단계와 2단계를 반복합니다.
웹에서 채택한 HTTP 프로토콜은 매우 간단한 요청-응답 모델을 채택하여 개발을 크게 단순화합니다. 페이지를 작성할 때 HTTP 요청에 HTML만 보내면 되며 사진, 동영상 등을 첨부하는 방법을 고려할 필요가 없습니다. 브라우저가 사진과 동영상을 요청해야 하면 또 다른 HTTP 요청을 보냅니다. 따라서 HTTP 요청은 하나의 리소스만 처리합니다(TCP 프로토콜에서는 짧은 연결로 이해될 수 있습니다. 각 링크는 하나의 리소스만 얻습니다. 더 필요한 경우 여러 링크를 설정해야 합니다)
HTTP 프로토콜도 강력합니다. 브라우저가 홈 페이지를 요청하지만 Sina는 HTML로 다른 서버의 리소스를 연결할 수 있습니다. - orient/strip%7CimageView2/2/w/1240)을 통해 요청압력을 여러 서버로 분산시키며, 하나의 사이트가 다른 사이트로 연결될 수 있고, 수많은 사이트가 서로 연결되어 월드와이드웹(World Wide Web)을 이루게 된다. WWW로.
2.HTTP 형식


- 각 HTTP 요청과 응답은 헤더와 본문의 두 부분으로 구성됩니다. 선택 사항입니다.
- HTTP 프로토콜은 텍스트 프로토콜이므로 형식도 매우 간단합니다.
- HTTP GET 요청 형식:
GET /path HTTP/1.1
두 개의 연속된 rn이 발견되면 Header 부분이 끝나고 이후의 모든 데이터는 Body입니다.
Header1: Value1
Header2: Value2
Header3: Value3
각 헤더는 한 줄이고 개행 문자는 rn이거나 os.linesep
HTTP POST 요청 형식을 사용합니다.
POST /path HTTP/1.1
Header1: Value1
Header2: Value2
Header3: Value3
body 데이터가 여기에 들어갑니다...HTTP 응답 형식:
HTTP 응답에 body가 포함되어 있으면 rnrn으로 구분됩니다.
200 OK
Header1: Value1
Header2: Value2
Header3: Value3
body 데이터가 여기에 들어갑니다...Body의 데이터 유형은 Content-Type 헤더에 따라 결정됩니다. 웹페이지인 경우 본문은 그림의 바이너리 데이터입니다.
Content-Encoding이 있는 경우 Body 데이터가 압축됩니다. 가장 일반적인 압축 방법은 gzip입니다. 따라서 Content-Encoding: gzip이 표시되면 먼저 Body 데이터의 압축을 풀어야 실제 데이터를 얻을 수 있습니다. 압축의 목적은 Body의 크기를 줄이고 네트워크 전송 속도를 높이는 것입니다.
4웹 정적 서버1. 고정 페이지 표시
import socketimport multiprocessingimport osimport timedef serverHandler(clientSocket, clientAddr):'与请求的客户端进行交互'# 接收客户端发来的消息 recvData = clientSocket.recv(1024).decode('utf-8') print(recvData)# 服务端向客户端发消息,作为响应 responseLine = 'HTTP/1.1 200 OK' + os.linesep responseHeader = 'Server: laowang' + os.linesep responseHeader += 'Date: %s' % time.ctime() + os.linesep responseBody = '差一点一米八' sendData = (responseLine + responseHeader + os.linesep + responseBody).encode('gbk') clientSocket.send(sendData)# 关闭 clientSocket.close()def main():'程序入口'# socket对象 serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定的端口号,可以重复使用端口号#serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)# 绑定 serverSocket.bind(('', 8000))# 监听 serverSocket.listen()while True:# 接收 clientSocket, clientAddr = serverSocket.accept() print(clientSocket)# 开一个新的进程,执行交互 multiprocessing.Process(target=serverHandler, args=(clientSocket, clientAddr)).start()# 关闭客户端对象 clientSocket.close()if __name__ == '__main__': main()
로그인 후 복사

2. 필수 페이지 표시
import time,multiprocessing,socket,os,re G_PATH = './html' def serveHandler(clientSocket,clientAddr): recvData = clientSocket.recv(1024).decode('gbk') lineFirst = recvData.splitlines()[0] strFirst = re.split(r' +',lineFirst) fileName = strFirst[1] filePath = G_PATHif '/'== fileName: filePath += './index.html'else: filePath += fileNametry:file = Nonefile =open(filePath,'r',encoding='gbk') responseBody = file.read() responseLine = 'HTTP/1.1 200 OK' + os.linesep responseHeader = 'Server: ererbai' + os.linesep responseHeader += 'Date:%s' % time.ctime() + os.linesep except FileNotFoundError: responseLine = 'HTTP/1.1 404 NOT FOUND' + os.linesep responseHeader = 'Server: ererbai' + os.linesep responseHeader += 'Date:%s' % time.ctime() + os.linesep responseBody = '很抱歉,服务器中找不到你想要的内容' except Exception: responseLine = 'HTTP/1.1 500 ERROR' + os.linesep responseHeader = 'Server: ererbai' + os.linesep responseHeader += 'Date: %s' % time.ctime() + os.linesep responseBody = '服务器正在维护中,请稍后再试。'finally:if file!=None and not file.closed:file.close() senData = (responseLine + responseHeader + os.linesep + responseBody).encode('gbk') clientSocket.send(senData) clientSocket.close() def main(): serveSocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) serveSocket.bind(('',8000)) serveSocket.listen()while True: clientSocket,clientAddr = serveSocket.accept() print(clientSocket) multiprocessing.Process(target=serveHandler,args=(clientSocket,clientAddr)).start() clientSocket.close()if __name__ == '__main__': main()



학습 과정에서 문제가 발생하거나 학습 리소스를 얻고 싶다면 학습 교류 그룹에 오신 것을 환영합니다
343599877, 프론트 엔드를 함께 배우세요!
위 내용은 웹서버에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











해결책: 1. eMule 설정을 확인하여 올바른 서버 주소와 포트 번호를 입력했는지 확인하십시오. 2. 네트워크 연결을 확인하고, 컴퓨터가 인터넷에 연결되어 있는지 확인하고, 라우터를 재설정하십시오. 설정이 온라인인 경우 네트워크 연결에 문제가 없으면 서버가 온라인인지 확인해야 합니다. 4. eMule 버전을 업데이트하고 eMule 공식 웹사이트를 방문하여 최신 버전의 eMule 소프트웨어를 다운로드합니다. 5. 도움을 구하세요.

RPC 서버를 사용할 수 없고 데스크톱에서 접속할 수 없는 경우 어떻게 해야 합니까? 최근 몇 년 동안 컴퓨터와 인터넷이 우리 생활 곳곳에 침투했습니다. RPC(원격 프로시저 호출)는 중앙 집중식 컴퓨팅 및 리소스 공유를 위한 기술로서 네트워크 통신에서 중요한 역할을 합니다. 그러나 때때로 RPC 서버를 사용할 수 없어 데스크탑에 들어갈 수 없는 상황이 발생할 수 있습니다. 이 문서에서는 이 문제의 가능한 원인 중 일부를 설명하고 해결 방법을 제공합니다. 먼저 RPC 서버를 사용할 수 없는 이유를 이해해야 합니다. RPC 서버는

LINUX 사용자로서 CentOS에 다양한 소프트웨어와 서버를 설치해야 하는 경우가 많습니다. 이 글에서는 관련 작업을 원활하게 완료할 수 있도록 CentOS에 퓨즈를 설치하고 서버를 설정하는 방법을 자세히 소개합니다. CentOS 설치 퓨즈Fuse는 권한이 없는 사용자가 맞춤형 파일 시스템을 통해 파일 시스템에 액세스하고 작동할 수 있도록 하는 사용자 공간 파일 시스템 프레임워크입니다. CentOS에 퓨즈를 설치하는 것은 매우 간단합니다. 다음 단계를 따르십시오. 1. 터미널을 열고 다음 계정으로 로그인합니다. 루트 사용자. 2. 다음 명령을 사용하여 퓨즈 패키지를 설치합니다. ```yuminstallfuse3. 설치 프로세스 중 프롬프트를 확인하고 'y'를 입력하여 계속합니다. 4. 설치 완료

DHCP 릴레이의 역할은 두 서버가 서로 다른 서브넷에 있더라도 수신된 DHCP 패킷을 네트워크의 다른 DHCP 서버로 전달하는 것입니다. DHCP 릴레이를 사용하면 네트워크 센터에 중앙 집중식 DHCP 서버를 배포하고 이를 사용하여 모든 네트워크 서브넷/VLAN에 IP 주소를 동적으로 할당할 수 있습니다. Dnsmasq는 네트워크에서 동적 호스트 구성을 관리하는 데 도움이 되도록 DHCP 릴레이 서버로 구성할 수 있는 일반적으로 사용되는 DNS 및 DHCP 프로토콜 서버입니다. 이 기사에서는 dnsmasq를 DHCP 릴레이 서버로 구성하는 방법을 보여줍니다. 내용 항목: 네트워크 토폴로지 중앙 집중식 DHCP 서버의 DHCP 릴레이 D에서 고정 IP 주소 구성

네트워크 데이터 전송에서 IP 프록시 서버는 사용자가 실제 IP 주소를 숨기고 개인정보를 보호하며 액세스 속도를 향상시키는 데 도움을 주는 중요한 역할을 합니다. 이 기사에서는 PHP를 사용하여 IP 프록시 서버를 구축하는 방법에 대한 모범 사례 가이드를 소개하고 구체적인 코드 예제를 제공합니다. IP 프록시 서버란 무엇입니까? IP 프록시 서버는 사용자와 대상 서버 사이에 위치한 중간 서버로서 사용자와 대상 서버 사이의 전송 스테이션 역할을 하며 사용자의 요청과 응답을 전달합니다. IP 프록시 서버를 사용하여

에픽서버가 오프라인 상태일 때 게임에 접속할 수 없으면 어떻게 해야 하나요? 이 문제는 많은 친구들이 겪었을 것입니다. 이 메시지가 나타나면 정품 게임을 시작할 수 없습니다. 이 문제는 일반적으로 네트워크 및 보안 소프트웨어의 간섭으로 인해 발생합니다. 이 문제의 편집자는 어떻게 설명합니까? 저는 여러분과 솔루션을 공유하고 싶습니다. 오늘의 소프트웨어 튜토리얼이 문제 해결에 도움이 되기를 바랍니다. 에픽 서버가 오프라인일 때 게임에 들어갈 수 없는 경우 해결 방법: 1. 게임 플랫폼과 보안 소프트웨어의 방해를 받을 수 있습니다. 2. 두 번째는 네트워크 변동이 너무 심하다는 것입니다. 라우터를 다시 시작하여 작동하는지 확인해보세요. 조건이 괜찮다면 5g 모바일 네트워크를 사용해 작동해 보세요. 3. 그럼 더 있을 수도 있겠네요

서버에 PHPFFmpeg 확장을 설치하는 방법은 무엇입니까? 서버에 PHPFFmpeg 확장을 설치하면 PHP 프로젝트에서 오디오 및 비디오 파일을 처리하고 오디오 및 비디오 파일의 인코딩, 디코딩, 편집 및 처리와 같은 기능을 구현하는 데 도움이 될 수 있습니다. 이 기사에서는 서버에 PHPFFmpeg 확장을 설치하는 방법과 구체적인 코드 예제를 소개합니다. 먼저, PHP와 FFmpeg가 서버에 설치되어 있는지 확인해야 합니다. FFmpeg가 설치되어 있지 않은 경우 아래 단계에 따라 FFmpe를 설치할 수 있습니다.

Cockpit은 Linux 서버용 웹 기반 그래픽 인터페이스입니다. 이는 주로 신규/전문가 사용자가 Linux 서버를 보다 쉽게 관리할 수 있도록 하기 위한 것입니다. 이 문서에서는 Cockpit 액세스 모드와 CockpitWebUI에서 Cockpit으로 관리 액세스를 전환하는 방법에 대해 설명합니다. 콘텐츠 항목: Cockpit 입장 모드 현재 Cockpit 액세스 모드 찾기 CockpitWebUI에서 Cockpit에 대한 관리 액세스 활성화 CockpitWebUI에서 Cockpit에 대한 관리 액세스 비활성화 결론 조종석 입장 모드 조종석에는 두 가지 액세스 모드가 있습니다. 제한된 액세스: 이는 조종석 액세스 모드의 기본값입니다. 이 액세스 모드에서는 조종석에서 웹 사용자에 액세스할 수 없습니다.
