HTTP原理

cs模式
bs模式browser — server

Http协议

超文本传输协议
是无状态的,每一次的请求是和上一次的没有关系

http协议包括两部分:
请求协议:客户端(浏览器)发给服务端
响应协议: 服务端发送给客户端(浏览器)

URL:统一资源定位符,就是一个网址协议名://域名:端口/路径

请求协议

  • 1 请求首行 GET /favionico HTTP1.1(HTTP协议的版本)
  • 2 请求头信息
    referer:信息中包含数据的真实地址 容易盗链
    Cookie:(里面是键值对)

    因为http是无状态的协议,所以通过cookie保存信息,下一次登录的时候发送给服务端
    
  • 3 空行

  • 4 请求体(请求数据 post数据)–getget放在url地址后面)不存在 ,默认的是post

GET请求

HTTP的默认请求是GET

  • 没有请求体
  • 数据大小限制 1K
  • GET会暴露在地址栏中
GET 操作
  • URL
  • 点击超链接
  • 表单默认,但是通常修改成POST

POST请求

  • 请求中存在中文,会使用URL编码

响应协议

响应首行(解析HTTP协议的版本)
响应头信息
空行
响应体

200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;
404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
500:请求资源找到了,但服务器内部出现了错误;
302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;
304:重定向

Last-Modified 是index.html的最后修改时间

HTML

HTTP/1.1 201 OK\r\n\r\n

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import socket
def main():
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 8081))
sock.listen(5)
while True:
print("server is working.....")
conn, address = sock.accept()
request = conn.recv(1024)
with open("index.html", encoding="utf-8") as f:
data = f.read() # data 读取的是str数据
conn.sendall(bytes("HTTP/1.1 201 OK\r\n\r\n%s" % data, "utf-8")) # 发送的是字节数据
# conn.send(b"HTTP/1.1 201 OK\r\n\r\n%s" % data.encode("utf-8"))
# conn.sendall(b"HTTP/1.1 201 OK\r\n\r\n%s" % data.encode("utf-8"))
# conn.sendall(bytes("%s" % data, "utf-8"))
conn.close()
if __name__ == '__main__':
main()
© 2018 Peter's Blog Center All Rights Reserved.
Theme by hiero