JavaWeb~http 프로토콜/네트워크 통신 전송 모델/http 요청 및 응답을 모니터링하는 도구/순방향 프록시/역방향 프록시/URL Uniform Resource Locator

HTTP 프로토콜 소개

http가 뭐야?

HTTP는 컴퓨터 네트워크 통신에서 매우 중요한 프로토콜입니다.超文本传输协议(Hypertext Transfer Protocol)

이름에 따라 http: 하이퍼텍스트(Hpertext), 전송(전송), 프로토콜(프로토콜) 로 나눌 수 있습니다 .

여기에 이미지 설명 삽입
하이퍼텍스트:
텍스트는 우리가 일반적으로 텍스트라고 부르는 것, 즉 컴퓨터에서 구문 분석할 수 있는 의미 있는 이진 데이터 패킷인 간단한 문자의 존재입니다. 초기 컴퓨터에서 우리가 입력한 정보는 텍스트 형태로 로컬에만 저장될 수 있었습니다. 인터넷의 발달로 사람들은 단순히 두 대의 컴퓨터 간에 텍스트를 전송하는 데 만족하지 않고 사진, 비디오, 오디오, 클릭 후 건너뛸 수 있는 하이퍼링크까지 전송하고 싶어 합니다. 그런 다음 텍스트의 의미가 확장되고 확장된 텍스트를 超文本(Hypertext)
전송
이라고 합니다. 두 대의 컴퓨터가 서로 연결되고 이진 데이터 패킷이 물리적 전송 캐리어(광 케이블, 전화선, 동축 케이블) 등을 통해 한 컴퓨터로 전송됩니다. 단말을 다른 컴퓨터 단말로 전송하는 과정을 프로토콜이라고 하며 传输(transfer)
,
네트워크 프로토콜은 네트워크에서 정보를 전송하고 관리하기 위한 몇 가지 사양이며 컴퓨터 간에 통신할 때 따라야 하는 규칙을 协议(Protocol).

네트워크 모델에서 HTTP 프로토콜 자체는 응용 계층 프로토콜속하며
전송 계층의 TCP 프로토콜을 기반으로 구현됩니다.
(HTTP 1.0 HTTP1.1 HTTP2.0은 TCP 기반, HTTP 3은 UDP 기반)
여기에 이미지 설명 삽입
현재 HTTP 1.1과 HTTP2.0이 주로 사용됩니다.

네트워크 통신의 몇 가지 핵심 개념

브라우저 :
주요 사서함에서 사용하는 이메일 전송 프로토콜과 유사하게 SMTP브라우저는 http프로토콜의 주요 전달자입니다. 브라우저의 공식 이름은 Web Broser인터넷 웹 리소스를 검색하고 보기 위한 응용 프로그램입니다. (여기서 웹은 World Wide WebWorld Wide Web, 즉 URL을 말합니다 www)

브라우저가 요청 및 응답을 시작하는 프로세스 :
브라우저 주소 표시줄에 URL(웹 주소)을 입력하면 브라우저는 DNS(도메인 이름 서버)에 URL을 제공하여 URL 매핑을 완료합니다. IP 주소를 입력한 후 브라우저의 요청을 변환하여 특정 서버에 제출하면 서버는 요청 결과를 HTML 인코딩 형태로 브라우저에 반환하고 브라우저는 HTML 파일을 실행하여 브라우저에 표시 신체.
서버(클라이언트) :
웹페이지 및 데이터베이스 데이터를 저장하는 서버로 모든 동적 웹페이지는 서버측에서 HTML, CSS, JS 및 기타 파일로 실행되어 클라이언트측에 다운로드되어 표시됩니다.
클라이언트(서버) :
즉, 일반적으로 사용되는 일부 브라우저를 포함하여 우리가 사용하는 컴퓨터입니다. 또한 사용자가 운영하는 단말기, 사용자에게 지역 서비스를 제공할 수 있는 프로그램으로 이해될 수 있습니다.

웹 서버: 웹 서버
의 공식 이름은 Web Server이 서버가 일반적으로 웹사이트 서버를 의미하며 로컬 컴퓨터에서 브라우저는 http요청의 개시자이고 웹 서버는 http요청의 응답자입니다.

서버와 클라이언트 사이에는 다양한 전송 모델이 있습니다 .
1. 일단 보내고 받으면, 일대일 대응인 각 요청에 대한 응답이 있습니다. 이 모델은 웹 개발에서 가장 많이 사용되는 모델이기도 합니다
여기에 이미지 설명 삽입
.2. 여러 개의 송수신, 하나의 응답에 해당하는 여러 개의 요청(예: 일부 대용량 파일 업로드 등)은 유사한 시나리오입니다.
여기에 이미지 설명 삽입
3. 하나의 송신 및 다중 수신, 하나의 요청, 라이브 방송 시청과 같은 응답의 여러 계층에 해당합니다.
여기에 이미지 설명 삽입
4. 다중 송신 및 다중 수신, 다중 요청은 스팀 링크와 같은 다중 응답에 해당하며, 컴퓨터는 휴대폰을 통해 작동되며, 컴퓨터는 지속적으로 요청을 보내고 데이터를 서버에 수신합니다.
여기에 이미지 설명 삽입

도구를 사용하여 http 요청 및 응답 관찰

두 가지 방법 : 1. 크롬 개발자 도구, 브라우저가 함께 제공됩니다. 정보가 완전하지 않고 요청 및 응답의 완전한 형식을 볼 수 없습니다.
여기에 이미지 설명 삽입

2. wireshark 패킷 캡처 도구
네트워크 카드에서 직접 데이터 가져오기(매우 포괄적이며 이더넷 데이터 프레임 포함)
3. 피들러 패킷 캡처 도구
HTTP/HTTPS 요청 캡처 전용 도구

여기에 이미지 설명 삽입
오른쪽의 inspectors 인터페이스에서 raw를 클릭하면 특정 요청 내용 정보를 볼 수 있습니다. HTTPS로 암호화된 요청인 경우 fiddler 패킷 캡처 도구가 자동으로 암호를 해독합니다.
여기에 이미지 설명 삽입

요청/응답 데이터 지우기: 모두 선택(ctrl+a)을 눌러 지우기

http 프로토콜과 https 프로토콜의 차이점:

https는 http를 기반으로 한 암호화 계층일 뿐입니다.

정방향 프록시 및 역방향 프록시

정방향/역방향 프록시는 클라이언트와 서버 사이에 일부 중간 서버 또는 타사 도구가 있는 작동 모드를 나타냅니다.
Forward: 서버의 관점에서 보면 클라이언트가 요청을 보낼 수 있도록 도와주는 제3자가 있고, 클라이언트가 누구인지에 상관없이 서버는 제3자에게 직접 응답을 반환합니다. 우리가 일반적으로 사용하는 온라인 게임 가속기, vpns 등 .은 모두 정방향 프록시입니다.
여기에 이미지 설명 삽입
Reverse: 클라이언트의 관점에서 서버가 응답을 보낼 수 있도록 도와주는 타사가 있습니다. 즉, 타사 프록시 서버가 요청을 수락한 다음 실제 서버로 보낸 다음 서버 응답을 다음으로 보냅니다. 클라이언트.
여기에 이미지 설명 삽입
둘의 차이점:
여기에 이미지 설명 삽입

http 요청 및 응답 형식

http 요청의 데이터는 모두 텍스트 모드 데이터입니다.

데이터는 텍스트 모드와 바이너리 모드의 두 가지 형식으로 제공됩니다. 판단방식, 메모장으로 열어보면 알 수 있고 깨져보이지 않고 텍스트 모드입니다. 이해가 되지 않습니다. 왜곡되어 있습니다. 바이너리 모드 데이터입니다.

아래와 같이
여기에 이미지 설명 삽입
요청 형식 :

1. 첫 번째 줄
첫 번째 줄은 HTTP 메서드(메소드), 요청된 URL, 버전 번호의 세 부분으로 나뉩니다.

2. 헤더(요청 헤더) 헤더: 키 쌍 값 묶음, 키 값 쌍은 라인,
키는 앞, 값은 뒤에, 중간은 콜론 + 공백으로 구분됩니다.

3. 빈 줄
은 헤더 섹션의 끝을 나타냅니다.

4. 본문: 선택 사항, 일반적으로 파일의 내용

응답 형식:
1. 첫 번째 줄: 세 부분: 프로토콜 버전 번호, 상태 코드, 상태 코드 설명
2. 프로토콜 헤더 헤더: 요청 형식과 동일하며 일련의 키-값 쌍이기도 합니다
. 3. 빈 줄: 끝 sign
3 .body body : 존재하거나 존재하지 않을 수 있습니다. 요청과 유사하게 응답의 파일 내용입니다.

http 프로토콜 요약

http 프로토콜은 데이터가 텍스트 모드에 있는 프로토콜로, 요청과 응답의 두 부분으로 나뉩니다.

요청
방법 URL 버전 번호
요청 헤더 키:값
요청 헤더 키:값
...
[빈 줄]
본문

응답
버전 번호 상태 코드 상태 코드 설명
응답 헤더 키: 해당 값
응답 헤더 키: 해당 값

[공백 라인]
본문

아래와 같이
여기에 이미지 설명 삽입
요청과 응답의 형식은 매우 유사하지만 정보는 매우 다릅니다.

HTTP 요청(요청)

URL

소위 URL은 url(Uniform Resource Locator)입니다.

네트워크의 많은 프로토콜에는 RFC 시리즈 문서를 설명하는 관련 표준 문서가 있으며, RFC 시리즈 문서
에는 다양한 프로토콜과 다양한 세부 사양이 설명되어 있습니다.
RFC7939 표준
여기에 이미지 설명 삽입
URL은 HTTP 서비스뿐만 아니라 많은 프로토콜을 위한 것입니다.
HTTPS, jdbc:mysql://, file:// 등

url의 구성 :
첫 번째는 프로토콜 이름 http 또는 https
: // 고정 내용, 다음은 서버 주소입니다.
도메인 이름은 기본적으로 IP 주소입니다.
주소 뒤에 콜론이 올 수 있으며 콜론 뒤에 특정 포트 번호를 적어 액세스할 서버 포트를 나타낼 수 있습니다.
포트 번호를 쓰지 않으면 브라우저에서 기본 포트 번호를 부여하는데, HTTP 프로토콜의 경우 기본 포트 번호는 80, https의 경우 기본 포트 번호는 443입니다.

端口号后面就是一段路径。
URL中的路径 表示访问服务器上的不同的资源~
一个服务器程序上有很多的资源

路径的后面是参数。
也叫做查询字符串
query string
这些参数 就是浏览器给服务器传递的一些信息。

这些参数可有可无,一般都是以键值对的方式组织起来的,
键值对之间,使用&分割
键和值之间,使用=分割
query string 使用? 来作为起始标志
每个键值对都表示啥意思?这是程序员自己约定的。
不同的网站,这里查询到的字符串中的键值对,就截然不同。

URL中 的片段标识符
不常见,用于定位一个HTML页面的具体位置
在“文档类”网站中很常见

URL格式总结:
1.协议名称:URL支持很多种协议
2.用户名密码:先在已经废弃了,不再使用
3.服务器地址,可以是域名,也可以是IP地址。
4.端口号:如果不写端口号,就会有一个默认值(浏览器自动加的)
HTTP默认值 80,HTTPS默认值 443
5.路径:表示服务器上面具体的哪个资源
6.查询字符串:浏览器给服务器传递的一些参数,程序员自定义的
7.片段标识:定位到页面中的某个部分。

URL의 본래 의도는 네트워크 상의 유일한 리소스를 구별하는 것입니다~
1) 먼저 서버 주소를 통해 특정 서버를
찾습니다 2) 그런 다음 포트 번호를 통해 특정 응용 프로그램을
찾습니다 3) 그런 다음 경로를 통해 응용 프로그램을 찾습니다 특정 리소스 프로그램이 관리하는 것입니다.
4) 쿼리 문자열을 통해 이 특정 리소스의 요구 사항을 추가로 설명합니다.
5) 마지막으로 프래그먼트 식별자를 통해 리소스의 어느 부분이 있는지 확인합니다.

URL의 경우 이러한 부분이 필요하지 않으며 일부는 생략될 수 있습니다.
프로토콜 이름은 생략할 수 있으며
사용자 이름과 암호는 생략할 수 있습니다.
서버 주소,
포트 번호, shenglue
경로 생략 가능
, 쿼리 문자열 생략
가능, 단편 식별자 생략 가능, 생략 가능.

/path 이 URL은 경로만 해당되며 나머지는 생략됩니다. 이 때 서버 주소는 현재 서버 주소의 포트 번호(context 필수)
, 즉 현재 서버 주소와 일치하며 프로토콜 이름도 동일합니다.
쿼리 문자열과 프래그먼트 식별자는 원래 선택 사항 입니다. .

URL 인코딩

사용자가 입력한 쿼리 문자열에는 다양한 특수 문자(? / 등)가 포함될 수 있습니다. 브라우저에서 구문 분석 중 모호성을 피하기 위해 브라우저는 쿼리 문자열의 특수 문자를 자동으로 이스케이프합니다.
특수 문자를 이스케이프 문자로 변환 => URL 인코딩
이스케이프 문자를 원래 문자로 복원 => URL 디코딩
중국어 문자와 같은 특수 기호 외에도 URL 인코딩이 필요합니다.

소위 이스케이프는 실제로 이 특수 문자의 값을 16진수로 표현하고 각 바이트 앞에 %를 넣는 것입니다.

참고: 그러나 웹 페이지 요청을 수동으로 구성할 때 쿼리 문자열의 코드에 중국어 문자를 직접 쓰지 않아야 합니다. 그러나 수동으로 eccode합니다.

HTTP 요청의 메소드

http의 원래 의도는 이러한 메서드를 설정하고 다른 기능에 따라 요청을 나누는 것입니다.
예를 들어 GET은 서버에서 데이터를 가져오는 것이고 POST는 서버에 데이터를 제출하는 것입니다.

그러나 사실 GET과 POST는 모두 가져오기에 사용될 수 있고 제출하는 데에도 사용될 수 있습니다. 모두 프로그래머의 코드가 구현되는 방식에 따라 다릅니다.
따라서 2022년에는 이러한 방법이 실질적인 의미를 상실하고 다른 방법을 서로 바꿔 사용할 수 있습니다.
또한 이러한 방법과 방법 사이에는 "필수적인 차이"가 없습니다.

면접관이 자주 묻는 질문은 다음과 같습니다. HTTP 프로토콜에서 GET 및 POST 방법의 차이점은 무엇입니까? ?
첫 번째 문장은 대답하는 것입니다. 본질적인 차이는 없습니다! (이론적으로는 서로 대체할 수 있음) 다만 개발 과정에서 약간의 습관이 있을 수 있고 사용 습관이 다를 수 있습니다.

http 요청을 트리거하는 방법

1. 브라우저에 URL을 직접 입력하면 HTTP 요청이 트리거됩니다
. 2. HTML 페이지의 일부 특수 태그, link, img, 스크립트(처음 세 개는 페이지가 로드될 때 트리거됨), 태그(사용자가 클릭할 때 트리거됨) ) 등도 HTTP GET 요청을 트리거합니다.
3. 양식 양식
4. Ajax
5. 자바 코드/기타 라이브러리 사용
6. Linux에서 wget /curl 명령을
통해 7. postman과 같은 타사 도구를 통해~

참조 기사 :
https : //blog.csdn.net/qq_36894974/Article/details_misc = % 257b % 2522Request % 255fid % 2522 % 253a % 252222 % 253a % 2522164704532016780271585425 % 2522 % 252c % 2522 % 2522 % 2522scm % 25222 % 253a % 252220140713.130102334 ... %2522 %257D&request_id=164704532016780271585425&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-16&pm0.none-task-blog-16&pm030&request_id=1-103930478.pc_search_2 all top_positive~default-1-103930478.pc_search_

추천

출처blog.csdn.net/Merciful_Lion/article/details/123431454