안드로이드 네트워크 프로그래밍과 HTTP 프로토콜 학습에 대해 배울 점


이 섹션 소개:

드디어 안드로이드 네트워크 프로그래밍의 장에 이르렀습니다. 이전에 플레이했던 것은 모두 싱글 플레이어였기 때문에 충분하지 않을 것입니다. 이 섹션의 시작 부분에서는 Android 네트워크 프로그래밍과 관련된 몇 가지 사항을 배웁니다. Android 네트워크 프로그래밍이란 무엇입니까? HTTP 프로토콜 학습을 위해 내장된 Json 구문 분석 클래스를 사용하여 Json, XML 구문 분석의 몇 가지 일반적인 방법, HttpUrlConnection 및 HttpClient 사용, 파일 업로드 및 다운로드, WebService 사용, WebView 사용, 소켓 통신 등!

또한, 우리는 클라이언트입니다. 서버의 콘텐츠는 우리 범위를 벗어나며 Xiaozhu는 이에 능숙하지 않습니다. 우리의 최소 요구 사항은 다음과 같습니다. 서버! 자, 더 이상 고민하지 말고 이 섹션을 시작하겠습니다!


Android가 인터넷과 상호작용하는 세 가지 방법

1.png


2. Http 프로토콜에 대한 첫 소개

실제 개발에서는 서버를 다룰 ​​때 일반적으로 Http 기반의 통신을 사용합니다. 프로토콜이므로 Http를 잘 배우십시오. 계약은 매우 물론 중요한 것은 세부 사항에 너무 많은 주의를 기울일 필요는 없고, 단지 대략적인 이해만 하면 된다는 것입니다! 이것들은 모두 개념적인 것입니다!


1) HTTP 프로토콜이란 무엇입니까?

답변: TCP/IP 프로토콜의 응용 계층 프로토콜인 하이퍼텍스트 전송 프로토콜이 사용됩니다. WEB 브라우저와 WEB 서버 간의 데이터 교환 프로세스를 정의합니다. 클라이언트가 웹 서버에 접속한 후, 웹 서버를 얻으려는 경우 웹 서버의 특정 웹 리소스는 특정 통신 형식을 준수해야 합니다. HTTP 프로토콜은 클라이언트와 웹 서버 간의 통신 형식을 정의하는 데 사용됩니다.

2) Http 1.0과 Http 1.1의 차이점

답변: 1.0 프로토콜을 사용하면 클라이언트가 웹 서버와 연결을 설정한 후 하나의 웹 리소스만 얻을 수 있습니다! 1.1 프로토콜을 사용하면 클라이언트는 웹 서버와 연결을 설정한 후 한 번의 연결로 여러 웹 리소스를 얻을 수 있습니다!

3) HTTP 프로토콜의 기본 작업 흐름:

답변: 먼저 두 가지 용어를 알아야 합니다.

  • SYN(동기): 연결을 설정하기 위해 TCP/IP에서 사용하는 핸드셰이크 신호
  • ACK(승인): 전송된 데이터가 올바르게 수락되었는지 확인하기 위해 문자를 확인합니다
그런 다음

TCP/IP 3방향 핸드셰이크 개념이 나옵니다.

    클라이언트가 syn 패킷(syn = j)을 보냅니다. )를 서버로 보내고 SYN_SEND 상태에 진입한 후 서버의 확인을 기다립니다
  • 서버는 syn 패킷을 수신하고 클라이언트의 syn(ack = j + 1)을 확인하는 동시에 SYN 패킷(syn =k) ​​자신에게, 즉, SYN + ACK 패킷에 대해 서버는 SYN_RECV 상태에 진입합니다.
  • 클라이언트는 SYN + ACK 패킷을 수신하고 확인 패킷 ACK(ack = k +1)를 서버에 보냅니다. 전송이 완료된 후 클라이언트는 그리고 서버 ESTABLISHED 상태로 들어가서 3방향 핸드셰이크를 완료하면 두 사람이 데이터 전송을 시작합니다
아직 명확하지 않은 경우 3방향 핸드셰이크 다이어그램을 살펴보겠습니다.

2.png

알겠습니다. 그러면 Http 작업 과정을 살펴보겠습니다.

  • 사용자가 브라우저에서 URL(하이퍼링크)을 클릭하면 웹 브라우저가 웹 서버와 연결됩니다
  • 이후 연결이 설정되면 클라이언트가 서버에 요청을 보냅니다. 요청 형식은 다음과 같습니다. URL(Uniform Resource Identifier) ​​+ 프로토콜 버전 번호(일반적으로 1.1) + MIME 정보(여러 메시지 헤더) + 빈 줄 요청을 받은 후 서버는 해당 반환 정보를 제공합니다. 프로토콜 버전 번호 + 상태 줄(처리 결과) + 여러 정보 헤더 + 빈 줄 + 엔터티 내용(예: 반환된 HTML)
  • 클라이언트는 서버에서 반환된 정보를 받아 브라우저를 통해 표시한 후 서버와의 연결을 끊습니다. ;물론 중간이라면 특정 단계에서 오류가 발생하면 오류 메시지가 클라이언트에 반환되어 표시됩니다. 예: 클래식 404 오류!
  • 위 프로세스가 아직 명확하지 않은 경우 HttpWatch 또는 Firefox를 사용하여 패키지를 캡처할 수 있습니다. 추신: 테스트 웹사이트는 Xiaozhu 학교의 학사 관리 시스템입니다. 계정과 비밀번호를 입력하고 로그인을 요청하면 다음 정보를 볼 수 있습니다.

HTTP 요청에 포함된 콘텐츠:

3.png에 포함된 콘텐츠 HTTP 응답:

4.png한 눈에 확 들어오죠?

4) Http 프로토콜의 비즈니스 프로세스

5.png5) Http

의 여러 요청 방법 실제 개발에서는 Get 및 Post를 더 많이 사용하지만 실제 개발에서는 다른 방법을 사용할 수도 있습니다. PUT과 같은 메소드 이는 Xiaozhu의 실제 프로젝트에서 사용됩니다. 모든 요청 방법을 아래에 나열하겠습니다.

    Get
  • : Request-URI로 식별된 리소스를 얻기 위한 요청
  • POST
  • : 요청 중 - 새 데이터가 추가됩니다. URI
  • HEAD
  • Request-URI
  • PUT
  • 로 식별된 리소스의 응답 정보 헤더를 가져오는 요청: 서버에 리소스를 저장하고 Request-URI를 식별자로 사용하도록 요청
  • DELETE
  • : Request-URI로 식별된 리소스를 삭제하도록 서버에 요청
  • TRACE
  • : 주로 테스트 또는 진단에 사용되는 수신된 요청 정보를 다시 보내도록 서버에 요청
  • CONNECT
  • : 향후 사용을 위해 예약됨
  • OPTIONS
  • : 서버 성능 쿼리 요청 또는 리소스 관련 옵션 쿼리
6) Get 및 Post 비교

가장 많이 사용되는 두 가지, 당연히 비교해야 합니다!
  • GET: 요청한 URL 주소 이후에 서버로 전달된 데이터는 ? 형식으로 가져오며, 여러 데이터는 &로 구분됩니다. 그러나 데이터 용량은 일반적으로 2K를 초과할 수 없습니다. 예: http://xxx?username=…&pawd=…
  • 또 다른 주의 사항은 이 두 가지 모두 데이터를 전송하지만 전송 메커니즘이 다르다는 것입니다. 인터넷에서 말하는 내용을 믿지 마세요. "GET은 서버 데이터를 얻고 POST는 서버에 데이터를 보냅니다." 또한 GET 보안은 매우 낮고 Post 보안은 높습니다. 하지만 쿼리할 때는 GET을 사용하고, 데이터를 추가, 삭제, 수정할 때는 POST 방식보다 실행 효율성이 더 좋습니다! !
  • 7) Http 상태 코드 수집

물론 이러한 상태 코드는 참고용일 뿐입니다. 실제로 의사 결정권은 서버(백엔드)에 있습니다

. 서버가 우리에게 반환하는 것은 상태이거나, 애플리케이션이 여러 언어 버전을 가질 필요가 없을 때 사용하는 것이 가장 좋습니다. 결과 정보를 JSON 문자열로 주면 바로 표시해 주기 때문에 게으름을 덜 수 있습니다! 다음은 참조용 상태 코드 모음입니다. 다운로드하세요:

100~199: 요청이 성공적으로 수락되었습니다. 200: OK, 클라이언트 요청이 성공했습니다. 주소(302, 307, 304)

    401: 요청이 승인되지 않았습니다. 상태 코드는 WWW-Authenticate 헤더 필드와 함께 변경되어야 합니다.
  • 403: 금지됨, 서버가 수신했습니다. 요청했지만 서비스 제공을 거부했습니다.
  • 404: 찾을 수 없음, 요청한 리소스가 존재하지 않습니다. 말할 필요도 없이
  • 500: 내부 서버 오류, 서버에 예상치 못한 오류가 발생했습니다.
  • 503: 서버를 사용할 수 없음, 서버 현재 클라이언트 요청을 처리할 수 없으며 일정 시간이 지나면 정상으로 돌아올 수 있습니다.
  • 8) HTTP 프로토콜 기능
  • 개념적인 내용을 알고 있는 한 복사하여 붙여넣기만 하면 됩니다. Baidu 백과사전에서:
1.

클라이언트/서버 모드 지원
.

2. Simple and fast: 클라이언트가 서버에 서비스를 요청할 때 요청 방법과 경로만 전송하면 됩니다. 일반적으로 사용되는 요청 방법에는 GET, 머리, 포스트. 각 방법은 클라이언트와 서버 간의 다양한 연결 유형을 지정합니다. HTTP 프로토콜의 단순성으로 인해 HTTP 서버의 프로그램 크기는 작고 통신 속도는 매우 빠릅니다.

3. Flexible: HTTP는 모든 유형의 데이터 객체 전송을 허용합니다. 전송되는 유형은 Content-Type으로 표시됩니다.

4. 연결 없음: 연결 없음의 의미는 각 연결을 하나의 요청만 처리하도록 제한하는 것입니다. 서버가 클라이언트의 요청을 처리한 후, 클라이언트로부터 응답을 받은 후 연결이 끊어집니다. 이 방법을 사용하면 전송 시간이 절약됩니다.

5. Stateless: HTTP 프로토콜은 상태 비저장 프로토콜입니다. Stateless는 프로토콜에 트랜잭션 처리를 위한 메모리 기능이 없음을 의미합니다. 상태가 없다는 것은 후속 처리에 이전 정보가 필요한 경우 다시 전송해야 하므로 연결당 전송되는 데이터 양이 증가할 수 있음을 의미합니다. 반면에 서버는 이전 정보가 필요하지 않을 때 더 빠르게 응답합니다.

PS: OSI 7계층 프로토콜과 TCP 4계층 모델은 기본 시리즈에서 설명하지 않습니다~ 관심이 있으시면 직접 배우셔도 됩니다!


이 섹션 요약:

이 섹션에서는 네트워크 및 Http 프로토콜과 관련된 Android 개발을 완료하는 데 필요한 도구를 설명합니다. 관련 개념은 이미 Android 모바일 단말기와 서버 간의 상호 작용에 대한 막연한 이미지를 다들 갖고 계시리라 생각합니다. 다음 섹션에서 이에 대해 살펴보겠습니다. HTTP 프로토콜의 요청 헤더와 응답 헤더! 이번 섹션은 여기까지입니다. 감사합니다~