Fetching resources such as HTML documents
It is a client-server protocol
Request
: a message sent by the user client (e.g., a browser)Response
: a message sent by the server as an answer Requests
- HTTP Methods (GET, POST, PUT, etc.)
- Path of the resource (domain & port)
- The version of HTTP
- Headers
Responses
Alternatives are a token (that piggyback on HTTP Header) such as JWT and Web Storage API such as localStorage or sessionStorage)
웹 페이지가 여러 다른 출처에서 가져온 정보를 조합하고 표시해야 하는 경우가 있을 수 있습니다. 이때, HTTP 헤더를 사용하여 서버 측에서 엄격한 동일 출처 제한을 완화시킬 수 있습니다. 이를 통해 서로 다른 출처에서 가져온 리소스를 하나의 웹 문서로 조합할 수 있게 됩니다.
예를 들어, Cross-Origin Resource Sharing (CORS)라고 불리는 메커니즘을 사용하여 서버 측에서 다른 도메인에서 온 리소스를 현재 페이지와 공유하도록 허용할 수 있습니다. 이를 통해 웹 페이지가 다른 도메인에서 가져온 정보를 조합하여 사용자에게 표시할 수 있습니다.
The same-origin policy is a critical security mechanism that restricts how a document or script loaded by one origin can interact with a resource from another origin.(protocol, host, port)가 동일할때 same-origin policy라고 한다.
동일 출처 정책(same-origin policy)은 어떤 출처에서 불러온 문서나 스크립트가 다른 출처에서 가져온 리소스와 상호작용하는 것을 제한하는 중요한 보안 방식입니다.
동일 출처 정책은 웹 브라우저 보안을 위해 프로토콜, 호스트, 포트가 동일한 서버로만 ajax 요청을 주고 받을 수 있도록 한 정책
ajax란 javaScript를 사용한 비동기 통신, 클라이언트와 서버간에 XML 데이터를 주고받는 기술이다.
즉, 쉽게 말하자면 자바스크립트를 통해서 서버에 데이터를 요청하는 것이다
http://store.company.com/dir/page.html:
과 동일한 same origin은?세번째는 https여서 탈락
네번째는 81포트 나머지는 80포트(디폴트값)
다섯번째는 store.company가 아니라 news.company이므로 host가 다르다.
브라우저가 리소스 load를 허용해야 하는 서버 자신 이외의 다른 오리진(도메인, 스킴 또는 포트)을 표시할 수 있도록 허용하는 HTTP 헤더 기반 메커니즘입니다.
CORS란 cross-Origin 즉, 출처가 다른 도메인에서의 AJAX요청이라도 서버 단에서 데이터 접근 권한을 허용하는 정책이다
A simple request is one that meets all the following conditions:
GET
, HEAD
, POST
Accept
, Accept-Language
, Content-Language
, Content-Type
Content-Type
header는 다음인 경우 가능:application/x-www-form-urlencoded
, multipart/form-data
, text/plain
simple request와 달리, preflighted
요청의 경우 브라우저는 실제 요청을 전송해도 안전한지 여부를 확인하기 위해 OPTIONS 메서드를 사용하여 HTTP 요청을 다른 오리진의 리소스로 먼저 보냅니다
CORS request -> server confirms -> response header (access-control-allow-origin)
Request contains 'origins' header and CORS response header information should be matched with this info.
Access-Control-Allow-Origin
값과 이 'origins' 헤더 값이 일치해야 합니다.레스트는 표준이 아니다.
REST의 원칙을 따르는 RESTful API는 일반적으로 명확하고 일관성 있게 설계되어야 하지만, 표준이라기보다는 이러한 원칙을 따르는 방식을 지칭하는 개념으로 사용되고 있습니다. 때때로 특정 회사나 프로젝트에서는 REST의 일부 원칙을 더 유연하게 해석하거나 적용할 수 있습니다. 이로 인해 "RESTful"이라는 용어가 표준이 아니라고 표현되는 것입니다
서로 떨어져 있는데 영향력을 줘서 일을하게 만드는 것. 모두 포함.
서로 다른 두 프로그램의 연결.
안좋다. DB technology에 따라 performance가 다르다. 스키마와 로직을 다 고쳐야 하므로 좋지 않다.
"client call to procedure": 클라이언트에서 원격 서버에 있는 특정 프로시저(함수 또는 메서드)를 호출하려고 합니다. 이것은 로컬에서 직접 호출하는 것이 아니라 원격으로 호출하려는 시도입니다.
"stub builds message": 클라이언트 측에서는 호출하려는 원격 프로시저와 함께 필요한 매개 변수 및 정보를 가진 메시지를 생성합니다. 이 메시지는 원격 서버로 전달됩니다.
"message is sent across the network": 클라이언트에서 생성된 메시지는 네트워크를 통해 원격 서버로 전송됩니다. 이 메시지는 클라이언트와 서버 사이의 통신을 위한 매개체 역할을 합니다.
"server OS hands message to server stub": 원격 서버에서는 메시지가 도착하면 서버의 운영 체제(OS)가 이 메시지를 서버 스텁(Stub)으로 전달합니다. 스텁은 메시지를 해석하고 처리하기 위한 역할을 합니다.
"stub unpacks message": 서버 스텁은 메시지를 해독하고 어떤 원격 프로시저가 호출되어야 하는지, 그리고 어떤 매개 변수와 데이터가 필요한지 파악합니다.
"stub makes local call to 'doit'": 서버 스텁은 메시지를 언패킹하고 원격 프로시저를 실제로 호출합니다. 이것은 원격에서 호출될 함수 또는 메서드인 'doit'을 실행합니다. 'doit'은 서버 측에서 실행되고, 결과를 계산하고 반환합니다.
REST (REpresentational State Transfer) is web standards-based architecture that uses HTTP Protocol.
In REST architecture, a REST Server simply provides access to resources and REST client accesses and modifies the resources.
Stateless:
each request from client to server must contain all of the information necessary to understand the request and cannot take advantage of any stored [session] context on the server. Session state is therefore kept entirely on the client.
Cache:
data within a response to a request [must] be implicitly or explicitly labeled as cacheable or non-cacheable.
Uniform interface:
A RESTful URI is self-contained, i.e. includes an identification of the resource and what to do. If we have representation of a resource, we have enough information to modify it (including delete that resource). Responses may include hyperlinks to discover additional RESTful resources (termed Hypermedia As The Engine Of Application State or HATEOAS).
(왜 rest가 인기가 있냐, 스스로 설명할 수 있어야 한다.) 하이퍼 미디어를 요구할 뿐이다. 리소스 스스로가 ...
Layered system:
각 구성 요소는 직접적으로 옆에 있는 다음 계층 이상을 볼 수 없으며, 중간 계층은 로드 밸런싱 및 기타 최적화를 지원할 수 있게 합니다.
HTTP Verb | Path | action | used for | 비고 |
---|---|---|---|---|
GET | /photos | index | display a list of all photos | |
GET | /photos/new | new | return an HTML form for creating a new photo | |
POST | /photos | create | create a new photo | |
GET | /photos/:id | show | display a specific photo | |
GET | /photos/:id/edit | edit | return an HTML form for editing a photo | |
PUT | /photos/:id | update | update a specific photo | |
DELETE | /photos/:id | destory | delete a specific photo |
rest style로 만들게 된다면 장점은 front에서 어떤 technology stack을 쓰더라도 무관함.
url도 이해하고 http도 이해할 수 있어.
client에서 server로 functionality를 요구할 수 있음
restful API가 그래서 프론트와 백엔드에 인터페이싱 역할을 제공한다.
POST — Add items to the to-do list
GET — Display a listing of the current items, or display the details of a specific item
cURL command line tool and library for transferring data with URLs
a powerful command-line HTTP client that can be used to send requests to a target server.
<data>
curl의 역할이 뭐지?
클라이언트에서 커맨드 라인이나 소스코드로 손 쉽게 웹 브라우저 처럼 활동할 수 있도록 해주는 기술(커맨드라인 Tool 혹은 라이브러리)
서버와 통신할 수 있는 커맨드 명령어 툴이다
웹 애플리케이션에서 새 항목을 생성하는 작업을 나타냅니다
순서 설명하라고 나오려나?
const http = require('http');
const url = require('url');
const items = []; // array in memory
const server = http.createServer( function(req, res) {
if (req.method === 'POST') {
var item = ''; // buffer for the incoming
req.setEncoding('utf8');
req.on('data', function (chunk) { // EventEmitter
item += chunk;
});
req.on('end', function () {
items.push(item); // push to array
});
res.end('Okay\n');
}
postman 말고 curl을 사용하여 post 보내는법 -d 옵션이고..
put,delete,update는 뭐 쓰는지 확인해보자.
else if (req.method === 'GET') {
var item = ''; // buffer for the incoming
items.forEach(function (item, i) {
res.write(i + ') ' + item + '\n');
});
res.end();
}
}).listen(1337, “127.0.0.1”);
마이크로 서비스를 위한..
By default, the gRPC API’s model uses Protocol Buffers to describe the service interface.
Protocol Buffers is used for the communication between gRPC servers and clients.
기본적으로 gRPC API 모델은 서비스 인터페이스를 설명하는 데 Protocol Buffers를 사용합니다.
Protocol Buffers는 gRPC 서버와 클라이언트 간의 통신에 사용됩니다.
즉, gRPC API에서는 서비스 인터페이스를 정의하기 위해 Protocol Buffers를 사용하며, 이를 통해 구조화된 데이터를 효율적으로 직렬화하고 통신할 수 있습니다. 개발자는 프로토콜 버퍼 컴파일러를 사용하여 코드를 자동으로 생성하고, 이를 기반으로 gRPC 서버와 클라이언트를 간편하게 구현할 수 있습니다.