TIL 44 , HTTP


HyperText Transfer Protocol


コンピュータ間でHTMLファイル(ドキュメントとドキュメントをタグでリンクする言語)のコミュニケーション方法や約束を交換できます.
WebブラウザとWebサーバとの間の通信規約とも呼ばれる.
htmlで作成したページをどのように交換するかについてのお話です.
クライアントとサーバは、個別のメッセージ交換によって通信します.通常、ブラウザクライアントによって送信されるメッセージを要求(要求)と呼び、サーバから応答に送信されるメッセージを応答(応答)と呼ぶ.
HTTPはコンピュータ間で通信を行うプロトコルです.
HTTP通信は要求と応答からなる.
HTTP通信における各要求や応答は以前の状態を知らない.(Stateless)

stateless


ステータス+less(なし)を表します.
各HTTP通信(リクエスト/レスポンス)は独立しているため、過去の通信(リクエスト/レスポンス)については何も知らない.
各通信には、要求を送信するために必要なすべての情報が含まれます.
複数回の通信(リクエスト/レスポンス)中に連続的なデータ処理(ex.オンラインショッピングモール登録後のカート機能)が必要な場合は、トークンやブラウザのクッキー、セッション、ローカルストレージなどの技術を登録する必要がある.

リクエストメッセージ構造


リクエストは実はただの情報です.
バックエンドがデータの処理を開始するために送信されるメッセージ.大体3つの部分からなる.

start line


リクエストの最初のローに相当します.この行も3つの部分から構成されています.
  • HTTPメソッド:要求される所望の動作の部分を定義する.主にGET、POST、DELETEに用いられる
  • リクエストターゲット:リクエストを送信するターゲットurl
  • HTTPバージョン:その名の通りHTTPバージョンです.主に1.1版
  • に用いられる
    GET/login HTTP/1.1
    説明:HTTP 1.1バージョンのGETメソッド登録リクエストターゲットにリクエストを送信します.

    headers


    要求に関する追加情報(メタデータ)の部分が含まれます.
    メタデータは情報に関する情報です.
    Key:値(JavaScriptのオブジェクト、Pythonのディック形式)
    一般的なリーダー情報は次のとおりです.
    Headers: {
    Host:リクエストを送信するターゲット(ターゲット)のアドレス.つまり、リクエストを送信するサイトのデフォルトアドレスです.
    (ex. www.apple.co.kr)
    User-Agent:要求を送信するクライアントに関する情報(ex.chrome,firefox,safari,explorer)
    コンテンツタイプ:送信を要求するメッセージボディのタイプ(ex.application/json)
    コンテンツ-長さ:bodyコンテンツの長さ
    ≪権限|Grant|ldap≫:メンバーの認証/認証を処理するためにログイン・トークンを認証に追加します.
    }

    body


    要求された実際の内容.主にBodyを使う方法はPOSTです.

    レスポンスメッセージ構造


    回答も同じメッセージです.

    Status Line


    回答の状態を減らす.応答はコンテンツを開始し、クライアント要求の処理ステータスを通知します.手紙の返事に「うん、よくやったね」と言ったように.回答のStatus Lineも3つの部分で構成されています.
  • HTTPバージョン:要求されたHTTPバージョンと同じ
  • ステータスコード:応答メッセージのステータスコード
  • Status Text:レスポンスメッセージの状態を記述するテキスト
  • HTTP/1.1 404 Not Found
    説明:HTTP 1.1バージョンに応答中、フロントエンドからの要求(ex.ログイン試行)
    プレイヤーの情報が見つからないため、404ステータス情報が送信される.
    HTTP/1.1 200 SUCCESS
    説明:フロントエンドからのリクエストに成功したため、HTTP 1.1のバージョンに応答しています.
    200件のステータス情報を送信します.

    Headers


    リクエストのタイトルと同じです.回答の付加情報(メタデータ)を含む部分.ただし、応答でのみ使用される情報もあります.(ex.ブラウザ情報を要求するユーザ-Agentではなく、サーバヘッダを使用します.)

    Body


    要求された本文と一般的に同じです.リクエストの方法によっては、Bodyが常に存在しないように.応答が応答の形式でデータを転送する必要がない場合、Bodyがない可能性があります.最も一般的なBodyデータ型はJSONです.
    ex)ログイン要求が成功したときに応答する内容
    Body: {
    "message": "SUCCESS"
    "token": "kldiduajsadm@9df0asmzm」(ユーザー情報の暗号化)
    }

    HTTP Request Methods


    よく使われるHTTPの方法はGET,POST,DELETEである.これらの方法は,クライアントの立場に立って,要求の意図を含んでいる.

    1) GET


    名前の通り、サーバからデータ(GET)を受信する際に主に使用する方法です.データのみを受信するために使用します.最も簡単で最もよく使われる方法です.
    事例)買い物かごの中の製品を調べる.
    (축약된 요청 메세지)
    GET /shop/bag HTTP/1.1
    Headers: {
    	"HOST": "https://www.apple.com/kr"
    	"Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
    }
    
    (축약된 응답 메시지)
    HTTP/1.1 200 SUCCESS
    Body: {
    	"message": "SUCCESS"
    	"carts": [
    		{
    			"productId": 10
    			"name": "Pro Display XDR - Nano-texture 글래스"
    			"price": "₩7,899,000"
    			"quantity": 1
    		},
    		{
    			"productId": 20
    			"name": "Mac Pro"
    			"price": "₩73,376,000"
    			"quantity": 2
    		}	
    	]
    }

    2) POST


    データの生成、変更に使用される主な方法.そのため、多くの場合、Bodyは含まれています.
    謝礼
    (축약된 요청 메세지)
    POST /shop/bag HTTP/1.1
    Headers: {
    	"HOST": "https://www.apple.com/kr"
    	"Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
    }
    Body: {
    	product: {
    		"productId": 30
    		"name": "12.9형 iPad Pro Wi-Fi + Cellular 128GB"
    		"color": "스페이스 그레이"
    		"price": "₩1,499,000"
    		"quantity": 1
    	}
    }
    
    (축약된 응답 메시지)
    HTTP/1.1 201 SUCCESS
    Body: {
    	"message": "SUCCESSFULLY CARTS UPDATED"
    }

    3) DELETE


    サーバから削除リクエストを送信するときに使用する方法
    謝礼
    (축약된 요청 메세지)
    DELETE /shop/bag HTTP/1.1
    Headers: {
    	"HOST": "https://www.apple.com/kr"
    	"Authroization": "kldiduajsadm@9df0asmzm" (유저가 본인임을 증명할 수 있는 인증/인가 토큰)
    }
    Body: {
    	productId: 30
    }
    
    (축약된 응답 메시지)
    HTTP/1.1 201 SUCCESS
    Body: {
    	"message": "productId 30 DELETED"
    }
    

    Response Status Codes


    これらは、実際のプロジェクトで最も多く見られる応答ステータスコードです.Status Codeの数字にはそれぞれ意味があります.このStatus Codeを見るだけで応答が正しいかどうかがわかります.

    200: OK


    最も一般的なStatus Code
    バックエンドサーバ上で要求を無停止処理する応答コード.
    私たちは200 OKがほしいです.

    201: Created


    正常に作成されたステータスコード
    ピアPOSTメソッドの要求に従ってバックエンドサーバ上でデータを生成または変更する際に送信されるコード.

    400: Bad Request


    要求が無効な場合に送信されるStatus Code
    要求Bodyに送信された無効なコード.
    デジタル文字列ではなく、電話番号を送信する必要がある場合は、Bodyに含まれます.

    401: Unauthorized


    このリクエストを行うには、ユーザーが先にログインまたは会員に加入する必要があることを意味します.
    ex)wishlist,賛機能は会員でなければリクエストを送信できません

    403: Forbidden


    ユーザーに要求する権限がないことを示します.
    アクセスできない情報にアクセスした場合.
    ex)有料会員のみがアクセスできるデータを請求する場合

    404: Not Found


    要求されたURIは存在しない

    500: Internal Server Error


    サーバエラー時のStatus Code
    APIを開発するバックエンド開発者が嫌うコード