유의하시기 바랍니다 질문 / 변경이 답변이 처음 기록 된 이후 명확하게되었다. 질문의 최신 반복에 대한 추가 응답은 두 번째 수평 규칙 이후입니다.
HTTP 프로토콜에서 GET 및 POST와 같은 메소드가 필요합니까?
헤더 형식과 같은 몇 가지 다른 것들과 함께 헤더와 본문이 분리되는 방법에 대한 규칙이 HTTP 프로토콜의 기초를 형성합니다.
요청 본문과 응답 본문 만 사용하여 HTTP 프로토콜을 구현할 수 없습니까?
아니요, 생성 한 것은 HTTP 프로토콜이 아니기 때문에
예를 들어, URL에는 요청이 포함되며, 요청은 서버 측의 프로그래밍 언어에 따라 서블릿과 같은 함수에 매핑되며 응답으로 HTML 및 JavaScript 응답이 전송됩니다.
축하합니다. 방금 새로운 프로토콜을 발명했습니다! 이제 표준 본문을 설정하여 구동 및 유지 관리하고 개발하는 등의 작업을 수행하면 언젠가 HTTP를 능가 할 수 있습니다.
나는 이것이 뺨에 약간의 혀이지만, 인터넷, TCP / IP 또는 서버와 클라이언트 사이에서 진행되는 통신에 대해서는 마술이 아닙니다. 연결을 열고 단어를 아래로 보내 대화를 형성합니다. 요청을 이해하고 현명한 응답을 전달하려면 대화가 양측 비준 사양을 준수해야합니다. 이것은 세상의 대화와 다르지 않습니다. 당신은 영어를하고, 이웃은 중국어를합니다. 바라건대 손을 흔들고 주먹을 흔드는 것만으로도 집 앞에 차를 주차하고 싶지 않다는 메시지를 전달할 수있을 것입니다.
HTTP를 준수하는 웹 서버에 대한 소켓을 열고 다음을 전송하면 인터넷으로 돌아갑니다.
EHLO
AUTH LOGIN
(SMTP 이메일 전송의 시작) 그러면 합리적인 답변을 얻을 수 없습니다. 가장 완벽한 SMTP 호환 클라이언트를 만들 수는 있지만이 대화는 공유 프로토콜, 기쁨, 공유 프로토콜에 관한 것이기 때문에 웹 서버와 대화 할 수 없습니다.
그렇기 때문에 HTTP 프로토콜을 구현하지 않고는 HTTP 프로토콜을 구현할 수 없습니다. 작성한 내용이 프로토콜과 일치하지 않으면 단순히 프로토콜이 아니며 다른 것이므로 프로토콜에 지정된대로 작동하지 않습니다.
우리가 잠시 당신의 모범으로 달려 간다면; 클라이언트는 URL처럼 보이는 것을 연결하고 설명 만합니다. 그리고 서버는 그것을 이해하고 HTML / JS (웹 페이지)처럼 보이는 것을 전송합니다. 그래도 무엇을 구했습니까? GET을 말하지 않는 몇 바이트? 그 성가신 헤더를 버리는 것에 대한 몇 가지 더. 서버도 일부를 저장했습니다-그러나 당신이 보낸 것을 해결할 수 없다면 어떻게해야합니까? JPEG로 끝나는 URL을 요청하고 그림을 만드는 바이트를 보냈지 만 PNG로되어 있으면 어떻게해야합니까? 불완전한 PNG. 우리가 가고있는 바이트 수를 말한 헤더가 있다면우리가 수신 한 바이트 수가 실제로 전체 파일인지 아닌지를 알 수 있습니다. 서버가 대역폭을 절약하기 위해 응답을 zip으로 표시했지만 알려주지 않으면 어떻게됩니까? 전송 한 내용을 해결하기 위해 상당한 컴퓨팅 성능을 사용하게됩니다.
하루가 끝나면 메타 정보 가 필요합니다 -정보에 대한 정보; 헤더가 필요합니다. 이름, 확장자, 생성 날짜를 가진 파일이 필요합니다. 우리는 사람들에게 생일을 보내고, 감사하고 감사를 표해야합니다. 세상은 상황에 대한 프로토콜과 정보로 가득 차 있기 때문에 항상 앉아서 처음부터 모든 것을 해결할 필요가 없습니다. 약간의 저장 공간이 필요하지만 쉽게 가치가 있습니다.
다양한 HTTP 메소드를 구현해야합니까?
논란의 여지없이, 지정된 전체 프로토콜을 구현할 필요는 없으며 일반적으로 모든 경우에 해당됩니다. 나는 영어로 모든 단어를 모른다; 저의 중국인 이웃은 또한 소프트웨어 개발자이지만 다른 산업에 종사하고 있으며 영어뿐만 아니라 제 산업에서 사용되는 일부 용어에 대해 중국어조차 알지 못합니다. 그러나 좋은 점은 HTTP 구현에 대한 문서를 가져 와서 서버를 작성할 수 있고 다른 아키텍처의 다른 프로그래밍 언어로 클라이언트를 작성할 수 있으며 프로토콜을 준수하기 때문에 여전히 작동한다는 것입니다
사용자 중 어느 누구도 GET 요청 이외의 다른 것을 발행하거나 영구적 인 연결을 사용하지 않거나 JSON 이외의 다른 것을 본문으로 보내거나 텍스트 / 일반 이외의 다른 것을 허용하지 않는 경우가있을 수 있습니다. 클라이언트 브라우저의 매우 제한된 요구 사항 만 충족시키는 웹 서버를 작성하십시오. 그러나 HTTP가 무엇인지 "일부 텍스트를 소켓으로 전달하는"기본 규칙을 무시하기로 마음대로 결정할 수는 없었습니다. 요청이 다음과 같은 문자열이라는 기본 개념을 버릴 수 없습니다.
VERB URL VERSION
header: value
maybe_body
응답에는 버전과 상태 코드 및 헤더가 있습니다. 그것 중 하나를 변경하면-그것은 더 이상 HTTP가 아닙니다-그것은 다른 것이고, 그것을 이해하도록 설계된 것으로 만 작동합니다. HTTP는 이러한 정의에 따른 것이므로이를 구현하려면 정의를 따라야합니다.
최신 정보
귀하의 질문은 약간 발전했습니다. 다음은 귀하가 요청한 것에 대한 답변입니다.
왜 HTTP 프로토콜에 메소드 개념이 있습니까?
역사적으로, 스크립팅이 존재하지 않았거나 페이지가 동적 일 수 있고 메모리에서 즉시 생성되어 대신 소켓을 아래로 밀어 넣을 수 있다는 개념까지도 설계 및 구현에있어 훨씬 융통성이 없다는 것을 알아야합니다. 클라이언트가 요청하고 소켓을 읽고 푸시 다운 한 디스크의 정적 파일이 존재하지 않습니다. 초창기 웹은 다른 페이지에 대한 링크를 포함하는 정적 페이지 개념을 중심으로 했으므로 모든 페이지는 디스크에 존재하고 탐색은 터미널에서 주로 URL의 페이지에 대한 GET 요청을 수행했을 것입니다. 디스크의 파일에 대한 URL을 보내십시오. 서로 연결되어 있고 다른 곳으로 연결된 문서의 웹은 진화해야한다는 개념도있었습니다.
URL은 유연하지 않은 비트였으며 디스크상의 페이지를 간단하게 참조하기 때문에 메소드에 대한 역사적인 컨텍스트를 제공하므로 클라이언트가 파일 및 서버에 대한 의도를 설명 할 수 있기 때문에이 메소드가 유용했습니다. 다양한 방법으로 방법을 처리하십시오. 하이퍼 텍스트 (그리고 실제로는 텍스트 만) 웹의 원래 비전에서 실제로 URL이 가상이라는 개념이나 전환 또는 매핑에 사용되는 개념은 없었습니다.
나는이 답변이 날짜와 날짜가 바뀌기 시작한 시점에 대한 참조가 기록 된 역사적인 기록을 문서화하려는 의도는 아닙니다 .Wikipedia를 읽을 수 있기 때문에 시간이 지남에 따라 더 많은 모멘텀을 제공하고 서버-클라이언트 연결의 각 끝에서 우리가 확장하고있는 풍부한 멀티미디어 경험을 만들 수있는 기회. 브라우저는 컨텐츠를 포맷하기위한 태그의 엄청난 확산을 지원했으며, 각각은 필수 미디어 풍부 기능을 구현하기 위해 경주하고 사물을 멋지게 만드는 새로운 방법을 지원했습니다.
스크립팅은 클라이언트 측과 플러그인 및 브라우저 확장 프로그램에 도착했으며, 브라우저는 모든 기능을 갖춘 강력한 도구로 만들었습니다. 서버 측에서 알고리즘 또는 데이터베이스 데이터를 기반으로 한 능동적 인 컨텐츠 생성은 큰 추진력이었으며 더 이상 디스크에 파일이 거의 없을 정도로 계속 발전하고 있습니다. 물론 그림이나 스크립트 파일을 파일로 유지합니다. 웹 서버에 브라우저를 설치하십시오. 그러나 점점 브라우저에 표시되는 그림과 해당 스크립트가 실행되는 스크립트는 파일 탐색기에서 열 수있는 파일이 아니라 필요에 따라 일부 컴파일 프로세스의 출력 인 컨텐츠를 생성합니다. , SVG는 픽셀의 비트 맵 배열이 아닌 픽셀을 그리는 방법을 설명하거나 TypeScript와 같은 상위 수준의 스크립트에서 생성 된 JavaScript를 설명합니다.
현대의 멀티 메가 바이트 페이지를 만들면 아마도 그 일부만 디스크에 고정 된 내용 일 것입니다. 데이터베이스 데이터는 브라우저가 사용할 HTML 형식으로 형식이 지정되며 여러 가지 프로그래밍 루틴이 URL에 의해 참조되는 방식에 따라 서버에서 수행됩니다.
나는 질문에 대한 의견에서 그것이 완전한 원과 비슷하다고 언급했다. 컴퓨터 비용이 수십만 대에 달하고 방이 가득 찼을 때 여러 사용자가 수백 개의 바보 같은 터미널을 통해 하나의 강력한 중앙 메인 프레임을 사용할 수있게하는 것이 일반적이었습니다. 키보드와 마우스, 녹색 화면, 텍스트 보내기, 일부 가져 오기 텍스트 아웃. 컴퓨팅 성능이 향상되고 가격이 하락함에 따라 사람들은 초기 메인 프레임보다 강력한 데스크탑 컴퓨터와 강력한 앱을 로컬에서 실행할 수있는 기능을 갖추기 시작하여 메인 프레임 모델이 구식이되었습니다. 다른 방식으로 전환하고 유용한 앱 기능을 대부분 제공하는 중앙 서버로 돌아가고 화면에 그리는 것 외에는 거의 수행하지 않는 수백 대의 클라이언트 컴퓨터로 되돌아 가기 때문에 결코 사라지지 않았습니다. 서버와 데이터를주고받습니다. 컴퓨터가 자신의 단어 사본과 전망을 동시에 실행할 수있을 정도로 똑똑한 그 기간은 다시 온라인으로 사무실로 향하게되었습니다. 브라우저는 화면에 그림을 그리고 문서 / 이메일을 편집하는 장치입니다. 브라우저는 서버에 존재하는 것으로 작성되고, 저장되어 다른 사용자와 공유되고 브라우저는 다른 곳에 사는이 것의 어느 시점에서든 부분적으로 볼 수있는 쉘이라는 개념으로 다른 사용자와 공유 및 공유합니다
대답에서 나는 왜 방법의 개념이 존재하는지에 대한 감각을 얻습니다. 이것은 또 다른 관련 질문으로 이어집니다.
예를 들어 Gmail 편지 쓰기 링크에서 PUT / POST 요청 및 데이터가 전송됩니다. 브라우저는 어떤 방법을 사용해야합니까?
URL을 입력하고 return 키를 누를 때 발생하는 것으로 결정되므로 기본적으로 GET을 사용합니다.
서버에서 보낸 Gmail 페이지에 Gmail 작성 요청을 호출 할 때 사용할 메소드 이름이 포함되어 있습니까?
이것은 위의 의견에서 언급 한 핵심 사항 중 하나입니다. 현대 웹에서는 더 이상 페이지에 관한 것이 아닙니다. 일단 페이지가 디스크에있는 파일이면 브라우저는 GET 할 것입니다. 그런 다음 데이터를 템플릿으로 슬롯을 지정하여 주로 동적으로 생성되는 페이지가되었습니다. 그러나 여전히 "서버에서 새 페이지 요청, 페이지 가져 오기, 페이지 표시"프로세스가 필요했습니다. 페이지 스와핑이 정말 매끄 럽습니다. 당신은 그들이로드하고 크기를 조정하고 주위의 레이아웃을 저크하여 매끄럽게 느꼈지만 여전히 전체 페이지 또는 페이지의 일부를 다른 페이지로 대체하는 브라우저였습니다
최신 작업 방식은 단일 페이지 응용 프로그램입니다. 브라우저에는 메모리에 문서가있어 특정 방식으로 표시되며 bservr를 스크립팅하고 정보를 다시 가져오고 페이지의 일부가 시각적으로 변경되어 새로운 정보를 표시하도록 문서를 조작합니다. 브라우저가 다른 새 페이지를로드합니다. 그것은 단지 단어 나 전망과 같은 전형적인 클라이언트 앱처럼 일부가 업데이트되는 UI가되었습니다. 새로운 요소는 다른 요소 위에 나타나며 대화 창 시뮬레이션 등으로 드래그 할 수 있습니다.이 모든 것은 개발자가 원하는 http 메소드를 사용하여 요청을 전송하고, 데이터를 가져오고 브라우저가 그리는 문서를 파킹하는 브라우저 스크립팅 엔진입니다. 최신 브라우저는 전체 운영 체제 또는 가상 컴퓨터와 같은 훌륭한 장치라고 생각할 수 있습니다. 화면에 물건을 그리기, 소리 재생, 사용자 입력 캡처 및 처리를 위해 전송하는 상당히 표준화 된 프로그래밍 가능 장치 UI를 그리려면 UI를 만드는 html / css를 제공 한 다음 HTML을 지속적으로 조정하여 브라우저가 그리는 내용을 변경하도록하십시오. 도대체 사람들은 주소 표시 줄이 변경되는 것을 보거나 / 탐색 (완전히 새로운 페이지를 요구하는)이 수행되지 않아도 단일 페이지 앱이 프로그래밍 방식으로 URL을 변경하려는 의도의 방향으로 사용하는 데 익숙합니다. UI를 그리려면 UI를 만드는 html / css를 제공 한 다음 HTML을 지속적으로 조정하여 브라우저가 그리는 내용을 변경하도록하십시오. 도대체 사람들은 주소 표시 줄이 변경되는 것을 보거나 / 탐색 (완전히 새로운 페이지를 요구하는)이 수행되지 않아도 단일 페이지 앱이 프로그래밍 방식으로 URL을 변경하려는 의도의 방향으로 사용하는 데 익숙합니다. UI를 그리려면 UI를 만드는 html / css를 제공 한 다음 HTML을 지속적으로 조정하여 브라우저가 그리는 내용을 변경하도록하십시오. 도대체 사람들은 주소 표시 줄이 변경되는 것을 보거나 / 탐색 (완전히 새로운 페이지를 요구하는)이 수행되지 않아도 단일 페이지 앱이 프로그래밍 방식으로 URL을 변경하려는 의도의 방향으로 사용하는 데 익숙합니다.
www.gmail.com을 호출 할 때 GET 메소드를 사용해야합니다. 브라우저가이 메소드를 사용한다는 것을 어떻게 알 수 있습니까?
진실. 지정 되었기 때문입니다. 첫 번째 요청은 역사적으로 항상 UI를 그리기 위해 일부 초기 HTML을 얻은 다음 영원히 찌르고 조작하거나 다른 스크립트를 사용하여 펑크 및 조작 반응 형 반응 형 UI를 만드는 다른 페이지를 얻는 것입니다.
일부 답변에서 알 수 있듯이 DELETE 메소드에서 새 사용자를 만들 수 있습니다. 그러면 하루가 지나면 서버에 따라 URL을 매핑하려는 함수에 따라 달라지기 때문에 http 프로토콜에서 메소드 개념에 대한 의도를 묻습니다. . 클라이언트가 URL에 사용할 메소드를 서버에 알려 주어야하는 이유
역사. 유산. 우리는 이론적으로 모든 http 메소드를 내일 밖으로 던질 수 있습니다-우리는 URL을 처리 할 수있는 한도까지 URL을 처리 할 수 있기 때문에 메소드가 쓸모없는 프로그래밍 정교화 수준에 있습니다. 서버에 / emails / draft / save / 1234 파일이없는 경우-서버가 해당 URL을 따로 선택하고 본문 데이터 저장과 관련하여 수행 할 작업을 알도록 프로그램되어 있습니다. 아이디 1234의 임시 이메일로
따라서 그 주위에서 자란 거대한 레거시 호환성을 제외하고는 메소드를 제거하는 것이 가능합니다. 필요한 것을 위해 사용하는 것이 좋지만 대부분 무시하고 대신 작동하는 데 필요한 것을 사용하는 것이 좋습니다. 우리는 우리가 앱을 만든 브라우저와 서버에 무언가를 의미한다는 것을 기억해야하기 때문에 여전히 간결한 방법이 필요합니다. 클라이언트 측 스크립트는 기본 브라우저를 사용하여 데이터를 보내려고합니다 .GET은 변수 정보를 모두 URL에 압축하고 길이에 제한이 있기 때문에 POST와 같이 브라우저가 요청하는 방식을 사용해야합니다. 많은 서버에서. 클라이언트는 서버에서 긴 응답을 원합니다. 응답 본문이 없어야하므로 HEAD를 사용하지 마십시오.