우리는 대체로 이렇게 생각한다.

ctime : create time , mtime = modify time , atime = access time 이라고 생각한다. 

하지만 이렇게 생각하면 안된다.

ctime : 파일이나 inode 값이 바뀐 시점이다. 다시말해 속성값이 바뀐시점이다. 퍼미션이나 소유주, 파일크기 등 파일 속성값이 변경되었을 때 ctime 은 갱신된다.

mtime : 파일의 수정시간이다. 이는 속성이 아닌 파일의 내용이 바뀌었을때 이 값이 바뀐다. 주의할 것은 파일 내용이 바뀌면 파일의 크기가 달라진다. 이때 파일의 크기가 속성이므로 ctime도 갱신된다. 만약 파일 내용을 수정했는데 파일 크기가 바뀌지 않았을수 있다. 이때는 ctime이 바뀌지 않을까? 파일이 수정되면 mtime 이 바뀐다. mtime 은 파일의 속성이다. 때문에 ctime이 바뀐다.

** mtime은 대체로 ctime 과 같다. mtime이 갱신되면 ctime도 갱신된다. 하지만 ctime이 변경된다고 mtime이 변경되지는 않는다.

atime : 파일을 오픈하면 atime이 갱신된다. grep , sort, cat 등등 명령을 주거나 open() 함수로 열었을때 

파일의 ctime, mtime, atime을 쉘에서 ls로 확인법

ls의 옵션으로 -u 는 atime, -c는 ctime,  옵션이 없다면 mtime을 출력한다.

-u 와 -c 는 동시에 사용될 수 없다.

아래 포스팅을 참조하면 도움이 된다.

https://mapoo.net/os/oslinux/find%eb%a1%9c-%ea%b2%80%ec%83%89%ec%8b%9c-%ec%98%b5%ec%85%98%ec%9d%98-atime-ctime-mtime%ea%b3%bc-%ec%a1%b0%ed%95%a9%eb%90%98%eb%8a%94-%ec%8b%9c%ea%b0%84-%ea%b8%b0%ec%a4%80%ed%91%9c/

 

find로 검색시 옵션의 atime, ctime, mtime과 조합되는 시간 기준표 – mapoo's blog

-atime +n/-n/n 엑세스 시점으로 검색. cat, sort, open() 등을 하였을 때 -ctime +n/-n/n 파일의 속성값이 바뀐 시점으로 검색. (권한,inode,소유주 등) -mtime +n/-n/n 파일의 내용이 바뀐 시점으로 검색. 파일의 크

mapoo.net

 

출처 : https://mapoo.net/os/oslinux/%eb%a6%ac%eb%88%85%ec%8a%a4-ctime-mtime-atime-%eb%8b%a4%eb%a5%b8-%ec%a0%90-%ec%84%a4%eb%aa%85/

아래처럼 파이프로 넘겨서 간단하게 확인이 가능 합니다.

whois 주소 | iconv -f utf-8 -t euc-kr

가능하면 새로 설치하는것은 utf-8로 하는것이 좋겠습니다.

하지만 이전 시스템이 euc-kr 이라면 위와 같은 방법으로 한글 확인 하는데 조금 신경을 써 주셔야 합니다.

아래와 같은 방법으로 인코딩을 변경하는 방법도 있습니다.

LANG="ko_KR.eucKR"; /usr/bin/locale
LANG="ko_KR.UTF-8"; /usr/bin/locale

앨리어스를 줘서 전환을 쉽게 하는 방법을 사용해 보는것도 좋겠습니다.

/usr/bin/locale

명령은 설정하는것이 아니라 현재것 확인하는것입니다.

 

출처 : https://chamsora.tistory.com/3

리눅스를 이용해 서버를 운영하다 보면 버퍼/캐시가 쌓여 메모리를 점유하는 것을 top 또는 free -m 명령어로 확인할 수 있는데요.

버퍼와 캐시 메모리는 자주 사용하는 파일 내용이나 파일 위치등을 저장하기 때문에 캐시로 저장되어 있으면 디스크의 I/O를 줄여서 퍼포먼스를 빠르게 유지할 수 있는 장점이 있지만 장착된 램의 용량이 부족한 경우 스왑을 사용할 수도 있기 때문에 간헐적으로 메모리를 많이 사용하는 타이밍에는 성능 저하로 연결되게 됩니다.

이럴때 주기적으로 캐시 메모리를 비워 서버를 관리할 수 있습니다.

캐시 메모리 비우기

캐시 메모리를 비우기 위해서 /proc/sys/vm/drop_caches 를 사용합니다. 경로 때문에 파일 처럼 보이지만 바이너리 명령어로 다음과 같이 사용할 수 있습니다.

sync

echo 1 > /proc/sys/vm/drop_caches

echo 2 > /proc/sys/vm/drop_caches

echo 3 > /proc/sys/vm/drop_caches

메모리를 비우기 전 sync 명령어로 메모리에 올라간 데이터를 디스크로 옮겨줍니다. 이 과정을 거치지 않으면 흡사 프로그램을 강제 종료한 것 처럼 데이터가 유실될 수도 있습니다.

/proc/sys/vm/drop_caches 명령어는 위 처럼 3단계로 사용할 수 있는데 1은 Page Cache 비우기, 2는 dentries, inodes 비우기, 3은 모두 비우는 명령어 입니다.

페이지 캐시는 파일의 내용을 메모리에 올리는 구조이고 dentries는 데이터의 위치(directory Entry) , inodes는 파일과 디렉토리의 정보를 담고 있는 자료 구조를 담당합니다.

자동으로 캐시 메모리 비우기

위 명령어로 관리자가 수동으로 캐시 메모리를 비울 수 있지만 만일 주기적으로 캐시를 삭제하고 싶은 경우에는 크론탭(crontab)에 명령어를 등록할 수 있습니다.

0 7 * * 0 sync && echo 3 > /proc/sys/vm/drop_caches # 매일 오전 7시에 캐시 비우기
0 * * * * sync && echo 3 > /proc/sys/vm/drop_caches # 매 시간 캐시 비우기

crontab -e 명령어로 크론탭을 실행한 다음 맨 마지막 줄에 위 명령어 둘 중 하나를 추가한 다음 저장합니다.

출처 : https://extrememanual.net/29711#%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C_%EC%BA%90%EC%8B%9C_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%B9%84%EC%9A%B0%EA%B8%B0

 1.  mod_unique_id module 추가
    기본적으로 mod_unique_id 모듈을 apache install 시 설치해야되나 빠져있다면
    apache source를 다운받아서 해당 모듈만 복사한다.
   
    # cd /usr/local/src
    # wget http://mirror.apache-kr.org/httpd/httpd-2.2.27.tar.gz
    # tar xvfz httpd-2.2.27.tar.gz
    # cd httpd-2.2.27/modules/metadata
    # /usr/local/apache/bin/apxs -cia mod_unique_id.c
    # /etc/rc.d/init.d/httpd restart (/usr/local/apache/bin/apachectl restart)

2. 컴파일전 설치되어야할 라이브러리들이 다 설치되어 있는지 확인한다.
   https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Installation_for_Apache
   해당 사이트를 참고

3. 컴파일
   # ./autogen.sh
   #./configure \
    --with-apxs=/usr/local/apache/bin/apxs \
    --with-libxml=/usr \
    --with-apr=/usr/local/apache/bin/apr-1-config \
    --with-apu=/usr/local/apache/bin/apu-1-config
   # make
   # make install

4. https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project 에서 최근 롤셋을 다운
   INSTALL text 파일안 설명대로 설치
   krcert.or.kr 에서 제공하는 룰셋은 오래전 룰셋이라 OWASP에서 제공하는 룰셋으로 셋팅한다.

5. httpd.conf 에 아래 내용 추가

   LoadModule unique_id_module   modules/mod_unique_id.so
   LoadFile  /usr/lib64/libxml2.so
   LoadFile  /usr/lib64/liblua-5.1.so
   LoadModule security2_module    modules/mod_security2.so

    <IfModule security2_module>
       Include conf/crs/modsecurity_crs_10_setup.conf
       Include conf/crs/activated_rules/*.conf
    </IfModule>

6. crs/activated_rules 디렉토리의 modsecurity_crs_10_setup.conf 심볼릭 링크 삭제
   httpd.conf 에 include되는 modsecurity_crs_10_setup.conf 파일을 아래 activated_rules/*.conf 으로 모든 파일을
   불러오는데 modsecurity_crs_10_setup.conf이 2번 불려오게 되서 apache error_log에
   ModSecurity: Found another rule with the same id 에러가 발생하게 된다.
   Include conf/crs/activated_rules/*.conf 만 하던지 심볼릭 링크를 삭제하던지 2번 불려지지 않게 한다.

7. httpd restart

8. www.your-domain.com/?foo=/etc/passwd 해서 apache error_log에 ModSecurity: Access denied.....이런 메세지가 나오면
   제대로 작동하는것이다.

9. 개발서버 IP로 접속이 안되면  modsecurity_crs_21_protocol_anomalies.conf 파일의 98번 라인을 주석처리하여 롤을
   없앤다.
   error_log를 보면 어떤 롤파일의 몇번째 롤 때문에 오류가 나는지 나오므로 그걸보고 하나씩 롤을 수정하면 된다.

출처 : https://kkamagistory.tistory.com/532

가끔 크롬 브라우저를 통해 인터넷 검색을 하다 보면, 특정 사이트 페이지에 'http error 400' 오류 문구가 노출되면서, 페이지가 열리지 않을 때가 있습니다. 오늘 이러한 http error 400 오류에 대처하여 해결하는 방법을 간단하게 알려드리니, 참고 바랍니다.

이러한 http error 400 오류는 쉽게 얘기하여, 브라우저 cookie가 충돌을 일으켜서 발생하는 오류인데요. 열림을 원하는 특정 사이트의 누적된 cookie와의 문제로 인해서 발생한 것이기 때문에, 해당 cookie를 삭제하면 해결이 됩니다.

즉, 오늘의 내용은, 크롬 브라우저에서 특정 사이트의 cookie를 지우는 창을 찾아, http error 400 오류를 해결하는 것이 주목적입니다. 해당 크롬 브라우저의 메뉴 위치만 확인하면 해결이 되는 아주 간단한 방법입니다.

http error 400 해결 방법

1. 크롬 브라우저의 설정 메뉴로 이동

  • 크롬 브라우저 우측 상단 모서리에 '전체 메뉴(:)' 클릭
  • 펼침 메뉴에서 '설정' 클릭

 

2. 쿠키 및 기타 사이트 데이터 메뉴 클릭

  • 설정 - '보안 및 개인정보 보호 클릭.
  • 펼침 메뉴에서 '쿠키 및 기타 사이트 데이터' 메뉴 클릭

 

3. '모든 쿠키 및 사이트 데이터 보기' 메뉴 클릭

 

4. 차단된 사이트의 쿠키 선별

  • 우측 검색란에 차단된 '특정 사이트 도메인' 입력 (사진 참조)

 

5. 해당 사이트 쿠키 데이터 삭제

  • 특정 사이트의 모든 쿠키를 삭제하려면 우측 상단 '표시된 항목 모두 삭제'
  • 선택하여 삭제를 원하시면, 쿠키를 선별하여 삭제 가능

 

6. http error 400 문제 해결

  • 크롬 브라우저 주소란에 해당 사이트명 입력 후 접속 확인
  • (저의 경우 tistory.com 페이지가 차단되었었는데요! 해결)

 

이상 http error 400 크롬 브라우저 접속 오류 해결방법에 대한 정보를 정리하여 드렸습니다. 실제 오류를 해결하는데 드는 시간은 1분도 안 걸릴 정도로 매우 간단합니다.

출처 : https://hongejae.tistory.com/entry/http-error-400-%ED%81%AC%EB%A1%AC-%EC%98%A4%EB%A5%98-%EA%B0%84%EB%8B%A8-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95

'Works > Network' 카테고리의 다른 글

100Mbps, MB/s로 변환 방법 및 변환한 속도  (0) 2018.04.25
통신사별 DNS 서버 정리  (0) 2017.04.21
서버호스팅 트래픽 계산  (0) 2016.11.08
랜선 만들기 (Direct & Cross Cable)  (0) 2016.07.07

* login shell & non-login shell 이란

/etc/profile, ~/.bash_profile, ~/.bashrc, /etc/bashrc 파일들은 장치 관리 및 사용자 환경을 위한 설정 파일입니다.

위 파일들의 차이점을 알기 위해선 먼저 login shell과 non-login shell을 알아야 합니다.

 ·  login shell : 처음 리눅스를 부팅하고 터미널을 켰을 경우 특정 shell로 접속이 되면 login shell.

 ·  non-login shell : 터미널을 켰을 때 특정 shell로 들어가지 않고 직접 sh 등의 명령어로 특정 shell에 들어가야 할 경우 non-login shell.

=> 예를 들어 새로운 환경변수를 설정할 때 non-login shell 일 경우 .bashrc 파일을 이용해야 합니다.

 

* login shell (profile)

시스템에 로그인하면 login shell로 동작한다고 보면 됩니다. 기본 로그인 쉘인 bash는 login shell로 동작할 때 profile을 읽습니다.

/etc/profile은 /etc/profile.d 디렉토리 안에 존재하는 모든 쉘 스크립트를 실행시는 역할을 합니다.
/etc/profile.d 디렉토리에는 vim, qt, lang, colorls 등 다양한 설정이 sh 파일 형태로 존재하고 최초 로그인 시 /etc/profile을 통해 실행됩니다. (로그인 시 /etc/profile을 먼저 읽고 이후 홈디렉토리의 ~/.profile을 읽음)

 

· 실행 순서

   1. /etc/profile
   2. ~/.bash_profile    or    ~/.bash_login    or    ~/.profile
   3. ~/.bashrc
   4. /etc/bashrc

 

/etc/profile 과 .profile은 shell이 bash 쉘이 아니라도 로그인 시 적용되고, 

.bashrc와 .bash_login, .bash_profile은 bash 쉘로 로그인 되었을 경우만 적용이 됩니다.

리눅스의 기본 로그인 쉘은 bash 쉘로 bashrc는 bash 쉘에서 사용하는 run command 라는 의미를 가집니다. 
사용자가 임의로 로그인 쉘을 변경할 경우 변경한 쉘에 맞는 cshrc, tcshrc, kshrc 파일이 bashrc와 같은 역할을 합니다.

/etc/profile 과 .profile은 shell이 bash가 아니라도 로그인하면 로드되어 적용되고,

.bashrc 와 .bash_login, .bash_profile은 bash shell로 로그인 되었을 경우만 적용이 됩니다.

 

- /etc/profile

: 시스템 전역(모든 사용자)에 대한 환경설정 파일. 로그인시 설정 내용을 읽어들임. 시스템 전반적인 환경값들을 설정.

- ~/.bash_profile

: 개인 사용자에 대한 환경설정 파일. 로그인시 설정 내용을 읽어들임. 각 사용자 환경에 맞는 설정.

 

bashrc 파일을 수정해도 로그인 할 때 반영되는 이유는 /etc/profile이 /etc/bashrc 파일을 읽어오고

~/.profile이 ~/.bashrc 파일을 읽어오도록 구현되어 있기 때문입니다.

=> 환경 설정은 profile 파일에 alias 및 함수 설정은 bashrc 파일 저장하는 것을 권장하고 있습니다.

 

* interactive (rc file)

bash가 아닌 다른 shell에서 bash를 호출할 때 interactive로 동작합니다. 이 때 bash는 rc file을 읽습니다.

bashrc 파일은 bash가 수행될 때 실행되는 함수를 제어하는 지역적인 시스템 설정과 관련된 파일입니다. 

 

- /etc/bashrc

: 시스템 전역(모든 사용자)에 대한 환경설정 파일. 새로운 bash가 실행될 때 마다 내용을 읽어들임.

- ~/.bashrc

: 개인 사용자에 대한 환경설정 파일. bash가 실행될 때 마다 내용을 읽어들임.

 

/etc/profile은 부팅후에 적용되며

~/.bash_profile은 재로그인 하면 적용되나

source 명령어를 이용하여 바로 적용할 수 있습니다.

출처 : https://coding-chobo.tistory.com/72

※ 요약
필자는 간간이 ssh를 이용하고 있고, 가끔 접속 장애가 일어난다. 접속 장애가 일어났을때 매번 찾지 않기 위해 블로그에 정리해둔다. 출처는 땡깡님의 블로그이다.
 
※ 정리
1. 접속 대상이 없을 경우
ssh: connect to host 192.168.0.10 port 22: No route to host
서버가 down 상태이거나 ip 정보가 틀린 경우
 
2. netfilter(iptables)로 막아 놓았을 경우
ssh: connect to host 192.168.0.200 port 22: No route to host
웹서비스는 정상 접속되는 상태에서 ssh 접속이 안되는 경우
 
3. ssh 서비스가 구동중이지 않은 경우
ssh: connect to host 192.168.0.200 port 22: Connection refused
 
4. tcp_wrapper(/etc/hosts.deny)로 막아 놓은 경우
ssh_exchange_identification: Connection closed by remote host
 
5. 서비스 포트가 틀린 경우
ssh: connect to host 192.168.0.200 port 22: Connection refused
 
1번, 2번의 경우 접속 에러 로그는 동일하나 ping test 또는 다른 서비스 접속을 통해 어느 원인인지 확인 가능
3번, 5번의 경우 에러로그 상으로는 파악 불가

출처 : https://shaeod.tistory.com/582

아래와 같은 시스템로그가 계속 발생하는 것은 문제 없는, Info성 메시지이다. 하지만 이 부분이 거슬릴 경우 해당 메시지가 쌓이지 않도록 설정할 수 있다.

 

1. 아래 커맨드 입력을 통해 해당 로그가 쌓이지 않도록 설정해주자.

echo 'if $programname == "systemd" and ($msg contains "Starting Session" or $msg contains "Started Session" or $msg contains "Created slice" or $msg contains "Starting user-" or $msg contains "Starting User Slice of" or $msg contains "Removed session" or $msg contains "Removed slice User Slice of" or $msg contains "Stopping User Slice of") then stop' >> /etc/rsyslog.d/ignore-systemd-session-slice.conf

 ( 한줄이다. )

 

2. 설정파일 적용을 위해 rsyslog 재시작을 해주자.

systemctl restart rsyslog

 

출처 : https://growingsaja.tistory.com/217

RockyLinux8 이상에서 부팅시 생성되는 /var/log/dmesg 파일이 존재하지 않는 현상이 있었다.
이를 해결하기 위해 아래 방법을 수행하면 된다.

1) vi /etc/systemd/system/dmesg.service 파일에 아래 내용 추가  (해당 파일은 없으니 만들어야 함)

 [Unit]
 Description=Create /var/log/dmesg on boot
 ConditionPathExists=/var/log/dmesg

 [Service]
 ExecStart=/usr/bin/dmesg
 StandardOutput=file:/var/log/dmesg

 [Install]
 WantedBy=multi-user.target

2) /var/log/dmesg 파일 생성 및 SeLinux 컨텍스트 확인 (Selinux가 비활성화 상태면 dmesg파일만 만들면 된다.)

 # touch /var/log/dmesg
 # restorecon -v /var/log/dmesg (selinux 비활성화면 이 라인은 스킵)

3) 부팅 시 서비스가 시작되도록 활성화

 # systemctl enable dmesg

4) 시스템 재시작 (재부팅 후 /var/log/dmesg 파일 생성 및 파일 내용 확인 할 것)

 #shutdown -r now


참조 : https://www.getpagespeed.com/solutions/the-var-log-dmesg-file-is-not-created-during-boot-for-rocky-linux-8

HTTP 응답 코드 종류

 응답 코드 설명 
100   Continue (클라이언트로 부터 일부 요청을 받았으며 나머지 정보를 계속 요청함)
 101  Switching protocols
 200  OK(요청이 성공적으로 수행되었음)
 201  Created (PUT 메소드에 의해 원격지 서버에 파일 생성됨)
 202  Accepted(웹 서버가 명령 수신함)
 203  Non-authoritative information (서버가 클라이언트 요구 중 일부만 전송)
 204  No content, (사용자 요구 처리하였으나 전송할 데이터가 없음)
 301  Moved permanently (요구한 데이터를 변경된 타 URL에 요청함)
 302  Not temporarily
 304  Not modified (컴퓨터 로컬의 캐시 정보를 이용함, 대개 gif 등은 웹 서버에 요청하지 않음)
 400  Bad request (사용자의 잘못된 요청을 처리할 수 없음)
 401  Unauthorized (인증이 필요한 페이지를 요청한 경우)
 402  Payment required(예약됨)
 403  Forbidden (접근 금지, 디렉터리 리스팅 요청 및 관리자 페이지 접근 등을 차단)
 404  Not found, (요청한 페이지 없음)
 405  Method not allowed (혀용되지 않는 http method 사용함)
 407  Proxy authentication required (프락시 인증 요구됨)
 408  Request timeout (요청 시간 초과)
 410  Gone (영구적으로 사용 금지)
 412  Precondition failed (전체 조건 실패)
 414  Request-URI too long (요청 URL 길이가 긴 경우임)
 500  Internal server error (내부 서버 오류)
 501  Not implemented (웹 서버가 처리할 수 없음)
 503  Service unnailable (서비스 제공 불가)
 504  Gateway timeout (게이트웨이 시간 초과)
 505  HTTP version not supported (해당 http 버전 지원되지 않음)

 

 

HTTP 메소드 종류

 HTTP Method 전송 형태  설명 
 GET GET [request-uri]?query_string
HTTP/1.1\r\n
Host:[Hostname] 혹은 [IP] \r\n 
 GET 요청 방식은 URI(URL)가 가진 정보를
 검색하기 위해 서버 측에 요청하는형태이다

 

 HTTP Method 전송 형태  설명 
 POST POST [request-uri]?query_string
HTTP/1.1\r\n
HOST:[Hostname] 혹은 [IP] \r\n
Content-Lenght:[Lenght in Bytes] \r\n 
\r\n
[query-string] 혹은 [데이터]
POST 요청 방식은 요청 URI(URL)에
폼 입력을 처리하기 위해 구성한 서버 측 스크립트
(ASP, PHP, JSP 등) 혹은 CGI 프로그램으로
구성되고 Form Action과 함께 전송되는데,
이때 헤더 정보에 포함되지 않고 데이터 부분에 요청 정보가 들어가게 된다.

 

 HTTP Method 전송 형태  설명 
 HEAD HEAD [request-uri] HTTP/1.1\r\n
Host:[Hostname] 혹은 [IP] \r\n 
HEAD 요청 방식은 GET과 유사한 방식이나 웹 서버에서 헤더 정보 이외에는 어떤 데이터도 보내지 않는다.
웹 서버의 다운 여부 점검(Health Check)이나 웹 서버 정보(버전 등)등을 얻기 위해 사용될 수 있다. 

 

 HTTP Method 전송 형태  설명 
 OPTIONS OPTIONS [request-ri]
HTTP/1.1\r\n
Host:[Hostname] 혹은 [IP] \r\n 
해당 메소드를 통해 시스템에서 지원되는 메소드 종류를 확인할 수 있다. 

 

 HTTP Method 전송 형태  설명 
 PUT PUT [request-uri] HTTP/1.1\r\n
Host:[Hostname] 혹은 [IP] \r\n
Content-Lenght:[Length in Bytes] \r\n
Content-Type:[Content Type] \r\n
\r\n
[데이터] 
 POST와 유사한 전송 구조를 가지기 때문에 헤더 이외에 메시지(데이터)가 함께 전송된다.
원격지 서버에 지정한 콘텐츠를 저장하기 위해 사용되며 홈페이지 변조에 많이 악용되고 있다.

 

 HTTP Method 전송 형태  설명 
 DELETE DELETE [request-uri] HTTP/1.1\r\n
Host:[Hostname] 혹은 [IP] \r\n
\r\n 
 원격지 웹 서버에 파일을 삭제하기 위해 사용되며 PUT과는 반대 개념의 메소드이다.

 

 HTTP Method 전송 형태  설명 
 TRACE TRACE [request-uri] HTTP/1.1\r\n
Host:[Hostname] 혹은 [IP] \r\n
\r\n 
원격지 서버에 Loopback(루프백) 메시지를 호출하기 위해 사용된다. 

 

 HTTP Method 전송 형태  설명 
 CONNECT CONNECT [request-uri] HTTP/1.1\r\n
Host:[Hostname] 혹은 [IP] \r\n
\r\n 
 웹 서버에 프락시 기능을 요청할 때 사용된다.


출처 : https://gyrfalcon.tistory.com/m/entry/HTTP-%EC%9D%91%EB%8B%B5-%EC%BD%94%EB%93%9C-%EC%A2%85%EB%A5%98-HTTP-%EB%A9%94%EC%86%8C%EB%93%9C-%EC%A2%85%EB%A5%98