Atsuhiko / Web-App

Webアプリ研究会
2 stars 2 forks source link

HTTP通信 #18

Open yuyuyuriko78 opened 4 years ago

yuyuyuriko78 commented 4 years ago

そもそもHTTP通信とは

①ブラウザ→Webサーバ TCPプロトコルで接続 ②ブラウザ→Webサーバ HTTPリクエスト発行(この情報が欲しいです) ③Webサーバが検索を行い要求された情報を集める。 ④Webサーバ→ブラウザ ③で集めた情報をHTTPレスポンスとして渡す

参考 https://qiita.com/7968/items/4bf4d6f28284146c288f

yuyuyuriko78 commented 4 years ago

HTTPリクエスト

「リクエストライン」「ヘッダ(リクエストメッセージ)」「メッセージボディ(リクエストメッセージ)」の3つからなる。

GET http://localhost:54734/neko.html HTTP/1.1
Host: localhost:54734
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://localhost:54734/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ja,en-US;q=0.8,en;q=0.6,ru;q=0.4,zh-CN;q=0.2,zh;q=0.2,fr;q=0.2,it;q=0.2,zh-TW;q=0.2,pt;q=0.2

①リクエストライン

GET http://localhost:54734/neko.html HTTP/1.1

yuyuyuriko78 commented 4 years ago

HTTPレスポンス

HTTPステータス

yuyuyuriko78 commented 4 years ago

HTTPメソッド

name=sato

- レスポンスメッセージ
```html
HTTP/1.1 200 OK
Content-Type: text/html
Vary: Accept-Encoding
Server: Microsoft-IIS/8.0
X-Powered-By: PHP/5.4.45
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcaGFrb3pha2lcRG9jdW1lbnRzXE15IFdlYiBTaXRlc1xwb3N0LWdldFxjaGVjay5waHA=?=
X-Powered-By: ASP.NET
Date: Mon, 25 Jul 2016 14:52:37 GMT
Transfer-Encoding: chunked

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>check</title>
</head>
<body>
<p>Name sato</p>
</body>
</html>
yuyuyuriko78 commented 4 years ago

クライアント側(html)

form要素

例:絶対URL×GET

<form action="http://example.com" method="get">

例:相対URL×POST

<form acrion="/somewhere_else" method="post">

POSTのときの例(bodyの中身)

image

<html>
<head>
  <title>テスト</title>
</head>
<body>
  <!-- フォームが送信されたら`/hello`にリダイレクトし、POSTでリクエストを送る  -->
  <form action="{{ url_for('hello') }}" method="post">
    <div>
     テキストボックス:<input type="text" name="text_name"/><br/>
     パスワード:<input type="password" name="password_name"/><br/>
    </div>
    <div>
      <button>送信</button>
    </div>
  </form>
</body>
</html>

参考:https://developer.mozilla.org/ja/docs/Learn/HTML/Forms/Sending_and_retrieving_form_data

yuyuyuriko78 commented 4 years ago

サーバ側(python)

from flask import Flask, render_template, request
app = Flask(__name__)

# 「/」:ルートとなるページ
@app.route('/', methods=['GET', 'POST'])
def form():
  return render_template("form.html")

# 「/hello」と付くURL
@app.route('/hello', methods=['GET','POST'])

# index.htmlには{{ text_name }},{{ password_name }}を表示させるHTMLが記述されている
# HTTPリクエストで受けとったtext_nameとpassword_nameを、index.htmlの変数に代入し、index.htmlを表示させるということ。

def hello():
  return render_template('index.html', text_name=request.form['text_name'], password_name=request.form['password_name'])

if __name__ == "__main__":
  app.run()