1. Proxy 서버란?

 

 

   -> 컴퓨터 네트워크에서 다른 서버 상의 자원을 찾는 클라이언트로부터 요청을 받아 중계하는 서버이다

   -> 클라이언트와 서버 사이에 있는 '대리인' 이다.

   -> 요청된 내용들을 캐시를 이용하여 저장한다. -> 전송시간 절약

 

 

 

다음 사진과 같이 Client가 request를 Server에게 전달하고,

Server가 response를 Client에게 전달하는 과정에 Proxy서버가 대리인 역할을 해줌으로써,

Proxy 서버 안에 전달된 정보들이 담겨져있게 된다.

 

 

2. 프록시 서버의 역할

 

 

   1) 프록시 서버 측에서 위험이 예상되는 웹 콘텐츠 및 악성코드 필터링이 가능하다.

       -> 클라이언트 측의 보안 향상

 

   2) 내부 통신과 외부 데이터 접근을 통제 할 수 있다.

       -> ex) 원치 않는 사이트 차단

 

   3) 자신의 IP 기록이 남지 않게 할 수 있다.

 

   4) 보안 및 통제를 뚫고 나가기 위해 차단 우회가 가능하다.

       -> 이 점을 악용하는 사람들이 많기 때문에, 많은 사이트에서 프록시 IP 차단

 

 

 

3. 프록시 패킷 접근, 조작

 

 

   1) Proxy 서버 생성

 

 

위에 사진과 같이 Proxy서버 생성을 하는 툴을 이용해도 되지만,

인터넷에서 '인터넷옵션 -> 연결 -> LAN 설정' 을 통해서도 Proxy서버를 생성 할 수 있다.

여기서, Host에 '127.0.0.1' 은 시스템 자기 자신을 의미하는 루프 백(loop back) 주소이다.

 

다음과 같이 proxy server를 생성한 뒤, 'on' 상태로 만들면 웹 프록시 툴을 사용 할 수 있다.

 

 

 

   2) 웹 프록시 툴을 이용해 프록시 패킷에 접근

 

다음 툴은 'burp suite' 라고 하는 툴인데, 대표적인 웹 프록시 툴이다.

이 툴을 이용하여 프록시 서버에 담긴 데이터들(파라미터, 헤더 등등)을 조작 할 수 있다.

 

이 툴을 'on'상태로 하려면 'intercept is off'를 눌러 'intercept is on' 상태로 만들어준다.

그런 상태에서 여러 조작들을 한 뒤 'Forward'를 누르면 조작된 정보가 서버로 전송이 된다.

'intercept is on'을 다시 누르면 'intercept is off' 상태가 되는 데,

이때는 패킷에 담긴 데이터를 확인하지 않은 채 바로 전송이 된다.

 

데이터를 조작하는 방식은 여러가지이다.

다음과 같은 화면에서 바로 조작해도 되지만,

'Action'을 누르면 여러 카테고리들로 보낼 수 있다.

 

개인적으로 데이터 조작에 활용하기 편하고 간편해서 'intruder'랑 'repeater'를 자주 쓴다.

그래서 예시로 intruder와 repeater를 설명하고자 한다.

 

 

 

예를 들어, intruder의 경우,

 

'Action'에서 'send to intruder'를 클릭하고 'intruder' 카테고리를 클릭하면,

다음과 같이 조작할 값들을 선택 하도록 나와있다.

조작하고 싶은 값들을 클릭 한 뒤 Payloads를 클릭하면

 

 

 

 

이런 화면이 나온다.

'Payload type' 에서 선택한 값들을 어떤 형식으로 조작 할 것인지 선택 할 수 있다.

(예를 들어서, 영문자 2개 숫자 2개의 조합으로 설정이 되면 영문자 2개 숫자 2개인 모든 조합을 값에 넣어서 실행을 시킬 수 있는 type이 있다.

aa00부터 .... zz99까지 ....

하지만 경우의 수가 너무 많은 규칙들은 그만큼 시간이 엄청 많이 걸린다.)

 

지금 선택되어 있는 건 'Simple list' 인데, 사용자가 원하는 값들을 넣은 뒤 'Add'를 누르면 그 원하는 값들을 다 조작하고 싶은 값에 넣는다.

그러고 (사진엔 짤렸지만) 오른쪽 위에 'start to attack' 버튼을 누르면 실행이 된다.

 

예를 들어서, 'a, b, v, d, f, e' 의 값을 'Add'를 눌러 다음과 같이 집어넣게 되면,

전 사진에 나와있는 화면에서 선택된 test의 값과 PHPSESSID의 값에 'a, b, v, d, f, e' 라는 값들을 넣어준 뒤 서버의 결과를 보여준다.

 

 

 

이렇게!!!

 

 

 'repeater' 의 경우,

 

'Action' 을 눌러 'send to repeater'를 누른 뒤 'repeater' 카테고리를 클릭하면,

다음과 같은 화면이 나온다.

 

 

 

'Request' 라고 써진 화면 아래는 데이터가 repeater에 send가 된 상태이다.

여기서 값들을 조작하고 싶은 대로 조작을 한 뒤, 'Go' 를 누르면 'Response' 라고 써진 화면 아래에서

조작 된 후에 조작된 데이터를 서버에다 전송하면 결과가 어떻게 나올지를 미리 볼 수 있다.

 

 

이 외에도 데이터를 조작 하는 데에는 많은 방식들이 있다.

 

이렇게 프록시 서버를 생성하고 웹 프록시 툴을 사용하면서 프록시 패킷에 접근하여 데이터 조작을 할 수 있다.

그러므로, 해킹을 할 때에도(예 : SQL Injection 등) 활용이 가능하다.

 

 

 

 

 

4. proxy 서버 조작 활용 - SQL Injection (webhacking 3)

 

 

 

 

 

webhacking 3번에서 로직을 풀면 다음과 같은 칸이 나온다.

 

일단 값을 모르니까 아무 값이나 쳐보자.

 

 

 

다음과 같이 빈 칸에 기입한 글자들이 결과 값으로 화면에 나온다.

 

 

 

다음 사진에서 Payload는 answer와 id의 값을 나타낸 것이다.

여기서 answer의 원래 정해진 값이 '1010100000011100101011111' 이었으나, 값을 '1'이라고 해도

결과 값으로 나오게 되었다.

이것을 보고 answer의 값을 injection하면 된다는 것을 알았다.

 

 

 

 

answer의 값을 저런식으로 바꿔주면 풀리는 문제로 추측이 가능하다.

 

 

 

그런데 answer의 값을 저렇게 바꿔주니까 no hack이라는 문구가 나왔다.

그래서 필터링을 우회하기 위해 or 대신 ||를 써주면 된다.

 

 

 

 

 

 

 

 

 

created by 사실산타는없거든A

'WEB > Web' 카테고리의 다른 글

페이지 이동 Loction.href  (0) 2017.11.20
base64  (0) 2017.11.06
자바스크립트 용어  (0) 2017.10.28
아스키 코드(ASCII)  (0) 2017.10.16
javascript indexOf 함수와 lastindexOf 함수  (0) 2017.09.25

웹해킹공부를 하면서 가장 자주 보는 것 중 하나가 location.href인 거 같다.

쉬운 내용이지만 글쓴이처럼 헷갈려하는 분들을 위해 알게된 내용을 정리해보았다. ㅎㅎ


1. Location.href란??

현재 페이지의 url을 설정하거나 반환해주는 javascript의 속성으로 

대부분 페이지 이동 시에 자주 사용하는 거 같다.


2. 페이지 이동시 사용되는 location.href

Location.href="~~" 형태로 사용되며 

"~~"은 String type의 value가 들어오게 되며 ~~에는 파일의 경로가 들어간다.

파일의 경로로 인터넷의 url이 들어올 수 있고 서버안에 있는 파일의 경로가 들어올 수 있다.


1) 인터넷의 url 

location.href="https://www.google.co.kr" 라고 설정하면 현재 페이지의 주소창이 https://www.google.co.kr로 바뀌면서  구글로 페이지 이동을 하게 된다.


2) 서버안에 있는 파일의 경로 

상대 경로의 개념으로 현제 페이지의 코드파일이 있는 곳을 기준으로 경로를 지정한다.

설명을 쉽게 하기 위해 예시로 다음과 같은 서버내 파일들이 있다고 가정해보자.

  ① 같은 디렉토리 내의 파일로 이동하는 경우 

  index.html가 현재 페이지의 코드가 들어있는 파일이라는 가정하에 FileTwo로 이동하는 경우로 

  location.href="FileTwo" 라고 설정해주면 된다.

  같은 디렉토리 내의 파일이므로 파일이름만 써주면 된다. 

  그리고 주소창의 변화를 보면 다음과 같다.

    - 현재 페이지 : https://xxx.xxx.xxx.xxx/xxxx/i/index.html

    - 이동 후 페이지 : http://xxx.xxx.xxx.xxx/xxxx/i/FileTwo


  ② 하위 디렉토리 내의 파일로 이동하는 경우 

  index.html가 현재 페이지의 코드가 들어있는 파일이라는 가정하에 FileOne으로 이동하는 경우로 

  location.href="./haha/FileOne" 라고 설정해주면 된다.  

  하위 디렉토리 내의 파일이므로 해당 디렉토리이름을 써주고나서 파일이름을 써줘야한다. 

    - 현재 페이지 : https://xxx.xxx.xxx.xxx/xxxx/i/index.html

    - 이동 후 페이지 : http://xxx.xxx.xxx.xxx/xxxx/i/haha/FilOne


  ③ 상위 디렉토리 내의 파일로 이동하는 경우 

    FileOne이 현재 페이지의 코드가 들어있는 파일이라는 가정하에 FileTwo으로 이동하는 경우로 

    location.href="../FileTwo" 라고 설정해주면 된다.  

    ../ 은 현재 위치의 상위폴더를 의미한다. 만약 두단계 상위 폴더로 가고 싶다면 ../../ 

      - 현재 페이지 : http://xxx.xxx.xxx.xxx/xxxx/i/haha/FilOne

      - 이동 후 페이지 : http://xxx.xxx.xxx.xxx/xxxx/i/FileTwo


loction.href을 사용해서 어떻게 어디로 이동하는지에 대해 내용을 정리해 보았다.


이를 통해 우리는 역으로 location.href="~~"라는 코드를 보고 어디로 이동하지도 알 수 있을 것이다.

예를 들면 location.href="FileTwo" 라는 코드를 보고 기준 파일의 경로를 기준으로 같은 디렉토리내의 파일인 FileTwo로 이동하는 것을 알 수 있으며 기준 페이지의 url이  https://xxx.xxx.xxx.xxx/xxxx/i/index.html 였다면  http://xxx.xxx.xxx.xxx/xxxx/i/FileTwo로 이동하는 것 또한 알 수 있다.


Create by Gae Ko


'WEB > Web' 카테고리의 다른 글

Proxy 서버와 조작  (0) 2017.12.18
base64  (0) 2017.11.06
자바스크립트 용어  (0) 2017.10.28
아스키 코드(ASCII)  (0) 2017.10.16
javascript indexOf 함수와 lastindexOf 함수  (0) 2017.09.25

base64 개념

 

 

base64는 데이터를 64종류의 인쇄 가능한 숫자만을 이용하여 인코딩하는 방식으로, 그 외의 문자를 처리할 수 없는 통신 환경에서 멀티바이트 문자나 이진 데이터를 처리하는 것을 목적으로 한다. A-Z, a-z, 0-9까지의 62개 문자와 +, /의 2가지 기호가 사용되며, 남은 부분을 포장하기 위한 패딩(padding)을 위해 = 기호가 사용된다.

 

 

 

base64 인코딩 원리

 

 

1. 문자열을 ASCII의 십진수로 변경한다.
2. 십진수를 8bit에 맞춰서 이진수로 표현한다.
3. 수치를 6bit 단위로 자른다. 뒤에 부족한 부분은 6bit를 맞추기 위해 0으로 채워넣는다.
4. 6bit의 이진수를 십진수로 변환한다.
5. 십진수를 base64 table의 문자로 변경한다.
6. base64는 24bit 그룹 수를 가지기 때문에 총 bit의 수를 24의 배수에 맞추어야 한다. 남은 부분을 포장하기 위한 패딩(padding)을 위해 = 기호가 사용된다. 원 문자열의 비트수 %3만큼 = 기호를 붙여준다.

 

 

 

base64 인코딩 예시

 

 

원리만 적어놓으면 이해하기 힘든 부분도 있을 수 있으니, 'ARGOS'로 예시를 들어 base64 인코딩을 해보았다.

 

1. 문자열을 ASCII의 십진수로 변경한다.

위의 아스키코드 표를 통해 ARGOS를 십진수로 변경하면, 각각 65 82 71 79 83이 된다.

2. 십진수를 8bit에 맞춰서 이진수로 표현한다.

위에서 나온 65 82 71 79 83을 8bit에 맞춰서 이진수로 변경하면, 각각 01000001 01010010 01000111 01001111 01010011이 된다.

3. 수치를 6bit 단위로 자른다. 뒤에 부족한 부분은 6bit를 맞추기 위해 0으로 채워넣는다.

위에서 나온 01000001 01010010 01000111 01001111 01010011를 6bit 단위로 자르면, 각각 010000 010101 001001 000111 010011 110101 0011이 나온다. 뒤에 0011은 4bit밖에 되지 않으므로, 6bit를 맞추기 위해 0으로 채워넣는다. 즉, 010000 010101 001001 000111 010011 110101 001100이 된다.

4. 6bit의 이진수를 십진수로 변환한다.

위에서 나온 010000 010101 001001 000111 010011 110101 001100를 십진수로 변환한다. 각각 16 21 9 7 19 53 12이 된다.


5. 십진수를 base64 table의 문자로 변경한다.

위의 base64 table을 통해 위에서 나온 16 21 9 7 19 53 12을 문자로 변경한다. 각각 Q V J H T 1 M이 된다.

 

6. base64는 24bit 그룹 수를 가지기 때문에 총 bit의 수를 24의 배수에 맞추어야 한다. 남은 부분을 포장하기 위한 패딩(padding)을 위해 = 기호가 사용된다. 원 문자열의 비트수 %3만큼 = 기호를 붙여준다.

위의 Q V J H T 1 M은 42bit이므로, 24의 배수인 48bit에 맞추어 6bit를 패딩 한다. 즉, 원 문자열의 비트수인 40%3인 1만큼 뒤에 = 기호를 붙여준다. 즉, 결론적으로 ARGOS를 base64로 인코딩하면 QVJHT1M=가 나오게 된다. 확실성을 위하여 base64 인코딩 사이트에서 확인해보았다.

 

이를 표로 만들면 다음과 같다.

 

 

 

 

 

 

Create by harnag_25

 

 

 

참고

http://terms.naver.com/entry.nhn?docId=3440158&cid=40942&categoryId=32828

http://cattool.tistory.com/9

http://blog.naver.com/jae1zzang/220163588084

http://blog.naver.com/fjrzlgnlwns/220018324874

http://coderstoolbox.net/string/#!encoding=base64&action=encode&charset=us_ascii

'WEB > Web' 카테고리의 다른 글

Proxy 서버와 조작  (0) 2017.12.18
페이지 이동 Loction.href  (0) 2017.11.20
자바스크립트 용어  (0) 2017.10.28
아스키 코드(ASCII)  (0) 2017.10.16
javascript indexOf 함수와 lastindexOf 함수  (0) 2017.09.25

초보자가 java를 이용해 html파일을 작성할 때 모르는 용어가 많아 어려움이 생길 수가 있다.

다음 코드는 java를 이용해 작성한 html파일들이다.

 

그래서 이번에는 처음 접하는 사람들을 위한 가장 기본적인 자바스크립트용어들을 알아보려고 한다.

 

- document.바꾸고싶은 부분.innerHTML="B"   //바꾸고 싶은 부분을 B로 변경해 준다.

 

- function 이름(변수) { 함수내용 }   // 함수를 선언한다.

 

- Math.round     //반올림

- Math.ceil        //올림

- Math.floor      //버림

- Math.random()*a   //0~a까지의 수가 무작위로 나온다.

 

- x.charCodeAt(a)    //x안에 있는 a번째 문자를 유니코드로 변환한다.

 

- fromCharCode(아스키코드)   //아스키코드를 문자로 변환한다.

 

- onmouseenter
마우스 포인터가 요소 또는 자식 요소 안으로 들어올 때 발생하는 이벤트로,

한 번 들어오면 다시 나갔다 들어오지 않는 한 계속 발생하지 않는다.

 

 

 

 

 

- onmouseover
onmouseout 의 반대 개념으로,
마우스 포인터가 요소 안으로 들어올 때 + 자식 요소 출입시 발생하는 이벤트로,

해당 영역을 벗어나지 않아도 자식 요소에 들어가거나 나올 때 발생한다.

 

- onmouseout
onmouseover 의 반대 개념으로,
마우스 포인터가 요소 밖으로 나갈 때 + 자식 요소 출입시 발생하는 이벤트로,
요소 영역을 벗어나지 않아도 자식 요소에 들어가거나 나올 때 발생한다.

 

- onmousemove
마우스 포인터가 요소 또는 자식 요소 위에서 움직일 때 발생하는 이벤트로,
요소 위에서 마우스를 움직이면 계속 발생한다.

 

- indexOf(문자) //   해당 문자가 몇번쨰 글자에 있는지 찾아내고,

일치하는 값이 없으면 -1을 반환함.

 

- substr
 + (X)   // X번째 문자부터 출력한다.
 + (X, Y)   // X번째 문자부터 Y개 출력한다.
 + (음수)   // 오른쪽부터 출력한다.

 

- x.replace("a","b") : x의 내용 중 a를 b로 바꾼다.

 

- focus() : 해당 요소에 포커스를 부여하여
텍스트 창의 경우 커서를 위치시켜 바로 입력가능

쉽게 말해, 마우스를 입력창에 클릭할 때 나타나는 깜박이는 표시를 말한다.
버튼의 경우, 엔터 기능을 한다.

 

- blur() : focus와 반대로 창의 경우에는, 최소화한다.

 

- alert(document.cookie="변수명 = 값") : 변수의 쿠키값을 변경한다.

 

 

 - created by dlrudfh

'WEB > Web' 카테고리의 다른 글

페이지 이동 Loction.href  (0) 2017.11.20
base64  (0) 2017.11.06
아스키 코드(ASCII)  (0) 2017.10.16
javascript indexOf 함수와 lastindexOf 함수  (0) 2017.09.25
HTTP(HyperText Transfer Protocol)이란?  (0) 2017.04.16

아스키 코드(ASCII)

 

 

 우리가 일상에서 사용하는 문자를 컴퓨터에서 표현하기 위해서는 문자를 디지털 형태로 바꿔주어야 한다. 처음에는 이와 같은 작업에 다양한 부호를 사용했는데, 다른 사용자와 사용하는 부호가 달라 호환되지 않는 문제가 발생했다. 이 문제를 해결하기 위해 표준 부호를 만들어 모두가 동일하게 사용하도록 했는데 그 대표적인 예 중 하나가 아스키 코드이다.

 

 

 아스키 코드(ASCII / American standard code for information interchange code)란 ANSI(국 표준 협회)에서 1962년 제정한 미국 표준 정보 교환 코드로, 후에 ANSI가 국제표준화기구(ISO)에 제안하여 이를 기반으로 국제부호체계가 만들어지기도 했다.

 

 아스키 코드는 7비트로 128(2의 7제곱)개의 문자를 표현할 수 있는 것이 특징이고 여기에 1비트의 패리티 비트를 추가하여 8비트로 사용한다. 이는 3개출력 불가능한 제어 문자들과 공백을 비롯한 95개의 출력 가능한 문자들로 이루어져 있으며 제어 문자들은 역사적인 이유로 남아 있고 대부분은 더 이상 사용되지 않는다. 이 중 출력 가능한 문자들은 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자로 이루어진다.

 

 

 

아스키 코드의 표기는 다음의 표를 따른다.

(표 출처 : http://www.theasciicode.com.ar/ )

 

 

하지만 이로는 세계 각국의 고유 언어를 표현하기에는 턱없이 부족했기 때문에 유니코드라는 또 다른 이진 코드가 개발되었는데, 유니코드는 아스키코드보다 훨씬 많은 6만 5536개(2의 16승)개의 문자를 표현할 수 있는 코드이다. 이를 사용하여 한글도 표현할 수 있다.

 

 

 

*패리티 비트 : 정보 전달과정에서 오류가 발생했는지 검사하기 위해 추가적으로 붙이는 비트

 

 

출처

http://www.newscj.com/news/articleView.html?idxno=455436

http://terms.naver.com/entry.nhn?docId=784747&cid=41828&categoryId=41828

http://penne.kr/220718441221

 

-create by yamcha

'WEB > Web' 카테고리의 다른 글

페이지 이동 Loction.href  (0) 2017.11.20
base64  (0) 2017.11.06
자바스크립트 용어  (0) 2017.10.28
javascript indexOf 함수와 lastindexOf 함수  (0) 2017.09.25
HTTP(HyperText Transfer Protocol)이란?  (0) 2017.04.16

string.indexOf(searchvalue,start)


javascript에서 indexOf함수는 지정된 문자열에서 searchvalue로 특정한 문자(열)에서 start시작위치에서 부터의 위치값으로, 위치 값을 숫자로 리턴합니다.


만약 특정한 문자(열)을 찾지 못한다면 -1을 반환하게 됩니다.


start가 생략이 되면 0부터 시작하여 위치값을 얻을 수 있습니다.


예를 들면 아래와 같습니다.



위의 예시에서는 시작위치가 생략되어 0부터 시작해 "two" 문자의 시작 인덱스를 반환 한 결과로, 11이 출력됩니다.


시작위치를 지정하게 된다면 아래와 같습니다.



10이후로 탐색하도록 했기 때문에, 처음의 apple은 무시되고, 두 번째 apple의 위치값이 결과값으로 나옵니다.


배열의 경우에는 



arr[0]=apple, arr[1]=orange, arr[2]=banana, arr[3]=nut, arr[4]=graph이므로 orange의 결과값이 1로 나오게 됩니다.


lastindexOf함수는 뒤에서 부터 탐색을 하는데, 위치값은 앞에서 부터 인덱싱 한 값이 나오게 됩니다.


예를 들자면 아래와 같습니다.



뒤에서부터 탐색하기 때문에 세 번째 apple의 위치를 반환하지만, 결과값인 인덱스 값은 앞에서부터 수를 세기 때문에 28을 반환합니다.


만약 시작위치를 주어주면 아래와 같습니다.



시작위치에서부터 뒤에서 세어나가게 됩니다. 결과값은 당연히 앞에서 세어간 위치값을 받게 됩니다. 


참고:http://blog.naver.com/chsmanager/140202656859


'WEB > Web' 카테고리의 다른 글

페이지 이동 Loction.href  (0) 2017.11.20
base64  (0) 2017.11.06
자바스크립트 용어  (0) 2017.10.28
아스키 코드(ASCII)  (0) 2017.10.16
HTTP(HyperText Transfer Protocol)이란?  (0) 2017.04.16

HTTP 란?



HTTP는 HyperText Transfer Protocol의 약자로, www(World Wide Web)에서 쓰이는 핵심 통신 프로토콜이다.


거의 모든 웹 애플리케이션에서 사용되고 있으며, 메시지 기반 모델로서 클라이언트가 요청 메시지(Request)를 보내면 서버에서 응답 메시지(Response)를 보내는 형태로 이루어져 있다.




즉, 사용자가 웹 페이지의 링크를 클릭했을 때 브라우저(클라이언트)는 HTTP의 형태로 메시지를 작성하여 웹 서버에 전송한다.


웹 서버에서는 받은 메시지에 대하여 HTTP의 응답 형태로 메시지를 작성 해 브라우저에 보내면, 브라우저는 이를 해석 해 화면에 보여주게 된다.



HTTP 구조


HTTP는 Header와 빈 공백, Body로 나누어 지며, Header에는 주소 정보 등이, Body에는 메시지 정보가 포함된다.


아래에서 HTTP Request와 HTTP Response에 대하여 자세하게 설명한다.


1. HTTP Request



위의 사진은 현재 블로그(4rgos.tistory.com)로 접속을 요청할 때의 HTTP Header이다.


한줄 씩 설명하면 다음과 같다.


GET / HTTP/1.1 - HTTP 전송 방법, 기본 페이지(/)와 프로토콜 버전. 일반적으로 웹서버로부터 자료를 가져오는 기능을 하는 GET 방식을 많이 사용한다. GET 방식의 경우, 별도의 메시지 Body를 사용하지 않는다. 따라서 Body 부분에는 공백이 존재한다.


Host : 4rgos.tistory.com - 요청한 서버의 Host.


Proxy-Connection: keep-alive - HTTP 1.1부터 지원하는 기능. 서버와 클라이언트가 서로 연결이 되어있는 상태에서 지정된 시간동안 서로 패킷의 교환이 없더라도 패킷 교환을 대기하는 구조이다. 즉, 지정된 시간 내에 패킷 교환이 이루어진다면 계속해서 연결된 상태를 유지한다. 이 경우, 웹 프록시 툴을 통해 Request 메시지를 전송 해 Proxy-Connection 이라고 표시되었지만, 브라우저가 웹서버에 직접 요청하는 경우 Connection이라고 표시된다.


Upgrade-Insecure-Requests : 1 - HTTPS : 1과 동일한 표현. HTTP 메시지 전송 시 보안을 적용한다.


User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) ~ - 사용자의 웹 브라우저 종류나 기타 클라이언트의 소프트웨어 정보를 보여준다. 위의 예시에선 클라이언트가 윈도우 10 64비트 환경에서 크롬 브라우저를 사용했다는 것을 알 수 있다.


Accept : text/html,application/xhtml+xml, ~ - 웹 서버로부터 수신되는 데이터 중 웹 브라우저가 처리할 수 있는 데이터 타입을 의미. text/html은 text, html 형태의 문서를 처리할 수 있다는 것이고, 끝 부분에 */*은 모든 문서를 처리할 수 있다는 의미이다.


Accept-Encoding : gzip, deflate, sdch - 전송할 수 있는 인코딩


Accept-Language : ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4 - 전송할 수 있는 언어


Cookie : ~ - 클라이언트가 서버에게 추가 정보를 보낼 때 사용한다.


2. HTTP Response


다음은 위의 Request를 전송했을 때 웹 서버로부터 받은 HTTP Response의 모습이다.



HTTP/1.1 200 OK - 웹 프로토콜 버전 및 응답 코드 정보. 200 OK가 표시되면 요청이 성공적으로 이루어졌고 요청한 자료가 클라이언트에게 보내졌다는 것을 의미한다.


Date: Sun, 16 Apr 2017 07:43:13 GMT - Response를 전송 한 날짜 및 시간을 나타낸다.


Server : Apache - 웹 서버로 사용하고 있는 소프트웨어의 이름을 나타낸다.


X-UA-Compatible: IE-Edge - 호환성과 관련하여 사용중인 IE 브라우저의 최신 버전의 엔진을 사용해야 한다는 의미이다.


Expires: Thu, 19 Nov 1981 08:52:00 GMT - 예전에 응답한 내용이 만기 시 캐시에 저장되지 못하게 지시한다.


Cache-Control: ~ / Pragma: ~ - 두 Header 모드 브라우저로 하여금 요청 시 캐시된 문서를 사용하지 말고 매 번 서버로부터 새로운 문서를 다시 전송받아 사용하도록 하는 Header이다.


P3P: CP='ALL DSP COR MON LAW OUR LEG DEL' - 사용자들이 허용하는 정보만 웹 사이트가 수집할 수 있도록 하는 도구. 클라이언트에게 웹 사이트의 프라이버시 보호 정책을 전달한다. 세 개의 문자로 구성된 토큰을 사용한다. (참고 : https://www.w3.org/TR/P3P11/#compact_policies)


Access-Control-Allow-Origin: http://4rgos.tistory.com - 서버 리소스에 대한 접근을 제한하는 Header이다. 이 예시의 경우 리소스에 대한 접근을 http://4rgos.or.kr에게만 허용한다. 만약 * 일 경우에는 모든 도메인으로부터의 접근이 가능하다.


Set-Cookie: visited= ~ - 클라이언트에게 쿠키 정보를 알려준다. 이 경우, visited라는 쿠키가 생성 되었으며 이 값을 클라이언트에게 알려주기 위해 사용되었다.


Vary: Accept-Encoding - 응답에 영향을 줄 수 있는 헤더의 목록을 클라이언트에게 알려준다.


Content-Length: 117851 - Body의 길이를 나타낸다.


Content-Type: text/html; charset=utf-8 - body에 적혀있는 것이 어떤 종류의 문서인지를 나타낸다. 이 경우, Body에는 text/html 형태의 문서가 적혀있다.


공백 - Header와 Body를 구분짓는 공백이다.


<!DOCTYPE html> ~ - 서버가 클라이언트에게 전송하는 메시지의 본문(Body)이다.



Created by ccoma

'WEB > Web' 카테고리의 다른 글

페이지 이동 Loction.href  (0) 2017.11.20
base64  (0) 2017.11.06
자바스크립트 용어  (0) 2017.10.28
아스키 코드(ASCII)  (0) 2017.10.16
javascript indexOf 함수와 lastindexOf 함수  (0) 2017.09.25

+ Recent posts