1.HTTP协议

超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

在浏览器地址栏键入URL,按下回车之后会经历以下流程:

1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2. 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
3. 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5. 释放 TCP连接;
6. 浏览器将该 html 文本并显示内容;


1.1 HTTP协议特性

1)支持客户/服务器模式。

2)简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

3)灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。

4)无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

5)无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

1.2 HTTP请求协议与响应协议


  1. 请求协议
    请求首行 GET: URL路径?数据 POST:数据在请求体
    请求头
    请求体
    import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('127.0.0.1', 8000)) sock.listen(3) while True: conn, addr = sock.accept() data = conn.recv(1024) print("has data:", data.decode()) conn.sendall("HTTP/1.1 200 ok \r\n\r\n Hello world!".encode()) conn.close()

    has data: GET / HTTP/1.1 Host: 127.0.0.1:8000 Upgrade-Insecure-Requests: 1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15 Accept-Language: zh-cn Accept-Encoding: gzip, deflate Connection: keep-alive # 空数据 has data: GET /favicon.ico HTTP/1.1 # 图标请求 Host: 127.0.0.1:8000 Connection: keep-alive Accept: */* User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15 Accept-Language: zh-cn Referer: http://127.0.0.1:8000/ Accept-Encoding: gzip, deflate
  2. 响应报文
    HTTP/1.1 200 OK
    协议版本 状态码 状态码的原因
    响应首部字段
    主体即显示内容

2.HTML概述


  • HTML 超文本标记语言,也叫web页面
  • HTML不是编程语言,只是标记语言

2.1HTML标准结构

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>

</body>
</html>


2.2 标签语法

<h1> 内容 </h1>    闭合标签
<img src=''/> 自闭合标签

块级标签(block)--独占一行
h,div

内联标签(inline)--按内容占位
br,b,strong,i,em,del,span,a

原则上:
块级标签可以嵌套块级和内联
内联标签只可以嵌套内联
<标签名 属性1="属性值" 属性2="属性值"...>内容部分</标签名>


2.3 基本标签

<!--标题标签-->
<h1>标题1</h1>
<h2>标题2</h2>
<h3>标题3</h3>
<h4>标题4</h4>
<h5>标题5</h5>
<h5>标题6</h5>
<!--换行标签-->
本是后山人 <br>
偶做前堂客。<br>
醉舞经阁半卷书,<br>
坐井说天阔。<br>
<!--文本格式化标签-->
not Bold
<b>Bold</b>
<strong>Bold</strong>

<i>inline</i>
<em>inline</em>

<del>划线</del>
<!--特殊符号-->
word&nbsp;&nbsp;tex


2.4 div标签和span标签

<div></div>   块级标签
<span></span> 内联标签
这二者都是无样式的标签


2.5 超链接标签

<a href="https://www.baidu.com">点击此处进入百度</a>
<a href="本地标签.html">本地资源</a>
target="_blank"打开新窗口
title="内容" 悬停显示内容


客户端(游览器)向服务端发送请求的形式:


  • 地址栏请求 get
  • 超链接标签 get
  • form表单 get,post
  • ajax

2.6 锚点应用

<a  href="#c1">第1章</a><br>
<a href="#c2">第2章</a><br>
<a href="#c3">第3章</a>
<span id="b1">返回顶部</span>

<div id="c1">第一章内容<a href="#b1">返回顶部</a></div>
<div id="c2">第二章内容<a href="#b1">返回顶部</a></div>
<div id="c3">第三章内容<a href="#b1">返回顶部</a></div>


2.7 img标签

<img height="300px" width="500" src="background_pic.jpg" title="背景">
属性:
src:资源所在位置
height,width:高度和宽度
title:悬停时显示内容
border:边框粗细
alt:图片无法加载显示内容


2.8 列表

<!--unordered list 无序列表-->
<ul>
<li>张三</li>
<li>李四</li>
<li>王五</li>
</ul>

<!--order list 有序列表-->
<ol>
<li>张三</li>
<li>李四</li>
<li>王五</li>
</ol>


2.9 表单标签

表单主要用来收集用户信息,是web中间信息沟通的桥梁

表单三要素:


  • 表单标签
    包含了表单处理程序所在的URL以及数据提交到服务器的方法等表单信息
  • 表单域
    包含文本库,密码框,隐藏框等表单控件
  • 表单按钮
    提交表单

<form action="" method="" enctype=""></form>
action代表域名
method代表请求方式
enctype代表打包方式


数据打包格式

Content_Type:multipart/form-data 发送文件

Content_Type:application/x-www-form-urlencoded

Content_Type:json

部分标签的属性:


  • 明文:input+text
  • 密文:input+password
  • 复选框:input+checkbox
  • 单选框:input+radio
  • 日期:input+date
  • 下拉菜单:select+option
  • 多行文本框:textarea
  • 按钮:input+button
  • 重置:input+reset
  • label属性:label+for