-
Notifications
You must be signed in to change notification settings - Fork 8.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
20 changed files
with
267 additions
and
157 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,51 +1,47 @@ | ||
--- | ||
title: 안전함 (HTTP 메서드) | ||
slug: Glossary/Safe/HTTP | ||
l10n: | ||
sourceCommit: ada5fa5ef15eadd44b549ecf906423b4a2092f34 | ||
--- | ||
|
||
{{GlossarySidebar}} | ||
|
||
HTTP 메서드가 서버의 상태를 바꾸지 않으면 그 메서드가 **안전**하다고 말합니다. 다른 말로 하면, 읽기 | ||
작업만 수행하는 메서드는 안전합니다. 흔히 쓰이는 HTTP 메서드 중에서는 {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}}, | ||
{{HTTPMethod("OPTIONS")}}가 안전합니다. 모든 안전한 메서드는 [멱등성](/ko/docs/Glossary/Idempotent) 또한 | ||
갖지만, 모든 멱등성을 지닌 메서드가 안전한 것은 아닙니다. 예컨대 {{HTTPMethod("PUT")}}과 {{HTTPMethod("DELETE")}}는 둘 | ||
다 멱등성을 가졌지만 안전하지는 않은 메서드입니다. | ||
{{HTTPMethod("OPTIONS")}}가 안전합니다. 모든 안전한 메서드는 {{glossary("idempotent", "멱등성")}} 또한 | ||
갖지만, 모든 멱등성을 지닌 메서드가 안전한 것은 아닙니다. 예컨대 {{HTTPMethod("PUT")}}과 {{HTTPMethod("DELETE")}}는 둘 다 멱등성을 가졌지만 안전하지는 않은 메서드입니다. | ||
|
||
그러나, 안전한 메서드가 읽기 전용의 의미를 내포하긴 하지만, 서버가 요청 정보와 통계 등을 기록함으로써 자신의 상태에 | ||
변경을 가하는 것도 가능합니다. 안전함의 중요점은 그 메서드를 호출해도 클라이언트가 서버의 상태 변화를 직접 요청하는 | ||
것이 아니므로 서버에 불필요한 부하를 주지 않을 것이란 점입니다. 즉 브라우저 입장에서는, 안전한 메서드라면 서버에 해를 | ||
끼치지 않을 것임을 알 수 있기 때문에 자유롭게 호출할 수 있습니다. 이런 점을 활용해서 브라우저가 별다른 위험 없이도 | ||
변경을 가하는 것도 가능합니다. 안전한 메서드 호출의 중요한 부분은 그 메서드를 호출해도 클라이언트가 서버의 상태 변화를 직접 요청하는 | ||
것이 아니므로 서버에 불필요한 부하를 주지 않을 것이란 점입니다. 브라우저는 안전한 메서드라면 서버에 해를 끼치지 않을 것임을 알 수 있기 때문에 자유롭게 호출할 수 있습니다. 이런 점을 활용해서 브라우저가 별다른 위험 없이도 | ||
프리페칭과 같은 동작을 수행할 수 있는 것입니다. 웹 크롤러 역시 안전한 메서드의 호출에 의존합니다. | ||
|
||
안전한 메서드가 정적 파일만 제공해야 할 필요는 없으며, 요청에 대해 응답을 필요에 따라 생성하는 것도 가능합니다. 다만 | ||
생성 과정은 안전해야 하므로, 다른 이커머스 웹 사이트에 주문을 넣는 것과 같이 외부 이펙트를 유발하는 것은 안됩니다. | ||
안전한 메서드가 정적 파일만 제공해야 할 필요는 없습니다. 생성된 스크립트가 안전함을 보장하는 한, 서버는 안전한 메서드에 대한 응답을 즉시 생성할 수 있습니다. 다른 전자 상거래 웹 사이트에 주문을 넣는 것과 같이 외부 효과를 유발하는 것은 안됩니다. | ||
|
||
메서드의 안전함을 준수하는 것은 온전히 서버 어플리케이션의 책임으로, Apache, Nginx, IIS 등 웹 서버 스스로는 안전함을 | ||
강제하지 못합니다. 서버 어플리케이션은 특히 {{HTTPMethod("GET")}} 요청을 받았을 때 자신의 상태가 바뀌지 않도록 해야 합니다. | ||
메서드의 안전함을 준수하는 것은 온전히 서버 애플리케이션의 책임으로, Apache, Nginx, IIS 등 웹 서버 스스로는 안전함을 | ||
강제하지 못합니다. 서버 애플리케이션은 특히 {{HTTPMethod("GET")}} 요청을 받았을 때 자신의 상태가 바뀌지 않도록 해야 합니다. | ||
|
||
다음은 서버 상태를 바꾸지 않는, 안전한 메서드의 호출입니다. | ||
|
||
``` | ||
GET /pageX.html HTTP/1.1 | ||
```http | ||
GET /pageX.html HTTP/1.1 | ||
``` | ||
|
||
다음은 서버 상태를 바꿀 수도 있는, 안전하지 않은 메서드의 호출입니다. | ||
|
||
``` | ||
POST /pageX.html HTTP/1.1 | ||
```http | ||
POST /pageX.html HTTP/1.1 | ||
``` | ||
|
||
마지막으로 멱등성을 가졌지만 안전하지는 않은 메서드의 호출입니다. | ||
|
||
```http | ||
DELETE /idX/delete HTTP/1.1 | ||
``` | ||
DELETE /idX/delete HTTP/1.1 | ||
``` | ||
|
||
## 더 알아보기 | ||
|
||
### 일반 지식 | ||
|
||
- HTTP 명세에서 [안전함](https://datatracker.ietf.org/doc/html/rfc7231#section-4.2.1)의 정의. | ||
|
||
### 기술 지식 | ||
## 같이 보기 | ||
|
||
- HTTP 명세에서 [안전함](https://httpwg.org/specs/rfc9110.html#safe.methods)의 정의. | ||
- 일반적으로 쓰이는 안전한 메서드: {{HTTPMethod("GET")}}, {{HTTPMethod("HEAD")}}, {{HTTPMethod("OPTIONS")}} | ||
- 일반적으로 쓰이는 안전하지 않은 메서드: {{HTTPMethod("PUT")}}, {{HTTPMethod("DELETE")}}, {{HTTPMethod("POST")}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,12 @@ | ||
--- | ||
title: 안전함 | ||
slug: Glossary/Safe | ||
l10n: | ||
sourceCommit: ada5fa5ef15eadd44b549ecf906423b4a2092f34 | ||
--- | ||
|
||
{{GlossarySidebar}} | ||
|
||
**안전함**은 맥락에 따라 여러가지를 의미할 수 있습니다. 아래의 용어를 가리키는 경우도 있습니다. | ||
|
||
{{GlossaryDisambiguation}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,12 @@ | ||
--- | ||
title: Self-Executing Anonymous Function | ||
slug: Glossary/Self-Executing_Anonymous_Function | ||
l10n: | ||
sourceCommit: ada5fa5ef15eadd44b549ecf906423b4a2092f34 | ||
--- | ||
|
||
정의되자마자 실행되는 {{glossary("JavaScript")}} {{glossary("function")}}입니다. (a.k.a. {{glossary("IIFE")}} (즉시실행함수)) | ||
{{GlossarySidebar}} | ||
|
||
정의되자마자 실행되는 {{glossary("JavaScript")}} {{glossary("function", " 함수")}}입니다. (a.k.a. {{glossary("IIFE")}} (즉시실행함수)) | ||
|
||
링크된 즉시실행함수 페이지에서 더 많은 정보를 얻을 수 있습니다. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.