동적 웹 페이지(2)

minah moon·2023년 8월 7일

PHP

목록 보기
15/58
post-thumbnail

HTTP GET과 POST를 사용하여 데이터를 보내는 방법

HTTP는 브라우저가 서버로 데이터를 보내는 방법 두 가지를 지정한다.

HTTP GET을 통해 웹 페이지에 데이터를 보낼 때, 브라우저는 쿼리 문자열에 데이터를 넣고 페이지에 대한 URL 끝에 그것을 추가한다. 물음표는 페이지에 대한 URL과 쿼리 문자열을 구분한다.

쿼리 문자열은 여러 개의 이름/값 쌍을 가질 수 있다. 등호(=)는 이름과 값을 구분한다. 하나 이상의 이름/값 쌍을 전송할 때는 각 쌍을 &로 구분한다.

http://eg.link/hotel.php?location=Paris&year=2021

HTTP POST로 데이터를 보낼 떄, 브라우저는 HTTP 요청 헤더에 부가적으로 이름/값 쌍을 추가한다. 브라우저는 각 요청에 대해 여러 개의 이름/값 쌍을 보낼 수 있다.

헤더는 브라우저 창에 표시되진 않지만 대부분의 브라우저에서 제공되는 개발자 도구로 볼 수 있다.


링크 또는 폼으로 데이터를 보내는 방법

HTML은 링크와 폼을 사용하여 페이지를 요청함과 동시에 서버에 데이터를 보낸다.

링크는 쿼리 문자열을 사용하여 서버에 데이터를 보낼 수 있다. 일반적으로 쿼리 문자열의 데이터는 서버가 특정 정보를 가져와서 브라우저로 반환할 페이지에 그 데이터를 표시하도록 지시한다.

보통 HTTP GET은 브라우저가 서버로부터 정보를 가져오고자 할 때 사용되며, 그 정보는 사이트의 방문자 모두에게 동일하다.

프로그래머는 이러한 유형의 요청을 안전한 인터랙션safe interaction이라고도 부른다. 수행하는 작업에 대해 사용자가 책임을 지지 않기 때문이다.

폼form은 사용자가 텍스트나 숫자를 입력하거나, 옵션 목록에서 하나를 선택하거나 체크박스를 선택할 수 있도록 하는 입력을 갖는다. 폼 데이터는 쿼리 문자열에 추가되거나 HTTP 헤더로 전송할 수 있다.

일반적으로 HTTP POST는 사용자가 자신을 식별하거나 서버에 저장된 데이터를 업데이트하는 데 사용되는 정보를 서버로 보낼 때 (또는 게시할 때) 사용된다.

이러한 경우에 사용자는 폼을 직접 작성하여 제출해야 하므로 자신의 행동에 책임을 갖게 된다.


서버와 주고받는 데이터 보안

브라우저와 서버 사이에 민감한 데이터가 전송되면 암호화되어야 한다. 암호화는 데이터를 읽을 수 없도록 인코딩한다. 복호화는 그 데이터를 다시 읽을 수 있는 형식으로 되돌린다.

브라우저와 서버 간에 데이터를 안전하게 전송하려면 웹사이트는 하이퍼텍스트 보안 전송 프로토콜HyperText Transfer Protocol Secure, HTTPS을 사용한다. HTTPS는 브라우저와 서버 간에 데이터를 안전하게 전송하는 방법을 제어하는 추가 규칙을 HTTP에 추가했다.

암호화와 복호화
1. 사용자가 폼을 제출하면, 브라우저가 데이터를 암호화한다.
2. 전송 중에 암호화된 데이터를 읽을 수 없다.
3. 서버는 키를 사용하여 데이터를 해독한다.

브라우저와 서버 간에 전송되는 데이터를 HTTPS를 사용하여 암호화 및 복호화를 하려면, 웹 서버에 인증서가 설치되어야 한다. 이것은 브라우저가 해당 서버에 전송되는 정보를 어떻게 암호화했는지 알려준다.

웹 서버에 설치할 인증서를 얻으려면 다음의 세 단계를 따라야 한다.

  1. 인증서 서명 요청certificate signing request, CSR을 생성한다. 이것은 사이트가 있는 웹 서버에 의해 생성되며 일련의 무작위 문자처럼 보인다.
  2. 인증 기관certificate authority, CA이라는 회사로부터 인증서를 구입한다. 그 곳은 인증서 서명 요청과 웹사이트 및 소유자에 대한 정보를 요청한다.
  3. 사이트를 운영하는 서버에 인증서(텍스트 파일)를 설치한다.

인증서가 웹 서버에 설치되면, 브라우저가 http:// 가 아닌 https:// 를 사용하여 사이트에 대한 URL을 요청할 때 다음이 수행된다.

  • 브라우저는 요청과 HTTP 요청 헤더를 암호화한다.
  • 서버는 반환되는 페이지와 HTTP 응답 헤더를 암호화한다.

https:// 가 사용되고 있다면 일반적으로 브라우저의 주소 표시줄에 자물쇠 아이콘이 표시된다.

역사적으로 HTTPS는 HTTP를 사용하여 전송된 요청과 응답에 암호화를 추가하기 위한 두 가지 다른 프로토콜(규칙)을 사용했다.

  • 보안 소켓 계층Secure Sockets Layer, SSL
  • 전송 계층 보안Transport Layer Security, TLS

인코딩 스킴

인코딩 스킴은 우리가 보거나 듣는 것을 컴퓨터가 처리하는 0과 1로 변환한다.

컴퓨터가 처리하고 저장하는 모든 데이터는 비트bit, 2진수를 사용하여 표현된다. 비트는 0 또는 1이다. 일련의 8비트는 바이트byte라고 한다.

인코딩 스킴은 컴퓨터가 텍스트, 이미지, 오디오와 컴퓨터에서 처리하고 저장하는 이진 데이터(0과 1의 조합) 간의 변환에 사용하는 규칙이다.

  • 텍스트를 입력하거나 이미지를 업로드하거나 오디오를 녹음할 때 인코딩 스킴은 콘텐츠를 0과 1로 변환하는데 사용된다.
  • 컴퓨터가 텍스트와 이미지를 표시하거나 오디오 파일을 재생할 때, 인코딩 스킴은 0과 1을 우리가 보거나 들을 수 있는 것으로 변환한다.

이미지 인코딩 스킴

이미지 인코딩 스킴은 비트를 사용하여 이미지를 표현하는 방법을 지정한다. 기본적인 흑백 이미지를 표현할 때, 모든 흰색 사각형은 0으로, 검은색 사각형은 1로 표현된다.

컬러 이미지를 재생성하려면 컴퓨터는 각 픽셀의 컬러가 무엇인지 알아야 하므로 더 많은 데이터가 필요하다. 다양한 이미지 포맷(GIF, JPEG, PNG, WebP)은 서로 다른 인코딩 스킴을 사용하여 0과 1을 사용해 각 픽셀의 색상을 나타낸다.


문자 인코딩 스킴

문자 인코딩 스킴은 비트를 사용하여 텍스트를 표현하는 방법을 지정하며 일부 문자 인코딩 스킴은 다른 것보다 더 많은 문자를 지원한다.

ASCII

ASCII는 7비트 데이터를 사용하여 각 문자를 나타내는 초기 문자 인코딩 스킴이다. 단점은 7개의 이진수를 사용하는 0과 1의 가능한 조합은 128개뿐이라서 모든 언어에서 사용되는 모든 문자를 지원하기에 충분하지 않다는 점이다. ASCII는 95개의 텍스트 문자만 지원한다.

ISO 8859-1

ISO 8859-1DMS 8비트(1바이트)의 데이터를 사용하여 각 문자를 나타낸다. ASCII와 같은 문자와 서유럽 언어에서 사용되는 악센트가 있는 문자도 나타낼 수 있다. 하지만 중국어, 일본어, 러시아어와 같이 전혀 다른 문자 집합을 사용하는 언어는 지원하지 않는다.

UTF-8

UTF-8은 모든 언어의 모든 문자를 나타내므로 웹사이트를 만들 때 사용하기 가장 좋은 문자 인코딩 스킴이다. 각 문자를 나타내는데 최대 4바이트의 데이터가 필요하다. 1바이트 이상의 데이터를 사용햐여 표시되는 문자를 멀티 바이트 문자라고 한다.

내장 함수

PHP 인터프리터의 일부 내장 함수는 사용되는 문자 인코딩 스킴을 지정하는 데 사용되는 매개변수를 갖는다.

PHP 설정

PHP 인터프리터는 브라우저로 다시 전송할 페이지를 생성할 때, 데이터를 올바르게 표시하도록 사용된 문자 인코딩 스킴을 브라우저에게 알려준다.

코드 에디터

PHP 파일 자체는 텍스트이기 때문에 코드 에디터를 사용하면 일반적으로 PHP 파일을 저장하는 데 사용하는 문자열 인코딩 스킴을 지정할 수 있게 해준다.






출처 - 존 두켓, <백엔드 프로그래밍을 위한 PHP & MySQL>, Jpub, 2022

0개의 댓글