http协议:请求协议,响应协议。请求方法的get和post。响应码

简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议,基于TCP/IP协议之上的应用层协议。

浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

HTTP是一种不保存状态,即无状态(stateless)协议。自身不对请求和响应之间的通信状态进行保存。

限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。

http协议包含:

  • 请求协议,由浏览器发送数据到服务器需要遵循的
  • 响应协议,与服务器发送数据到浏览器需要遵循的。

用于HTTP协议交互的信被为HTTP报文,由多行数据构成的字文本。请求端(客户端)的HTTP报文做请求报文,响应端(服务器端)的做响应报文。

请求协议

  • 请求首行:方法(post和get),url,协议版本,get请求没有请求体。只有post请求才有。
  • 请头部
  • 请求体
    在这里插入图片描述
    请求协议就是一堆字符串,以\r\n 区分,与请求体以\r\n\r\n区分。

b’GET / HTTP/1.1\r\n
Host: 127.0.0.1:8880\r\n
Connection: keep-alive\r\n

Cookie:…\r\n\r\n’

请求方式: get与post请求

  • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连。
    浏览器地址栏输入:127.0.0.1:8800/yuan?name=yuan&age=22
    socket服务端打印接收data显示 b'GET /yuan?name=yuan&age=22 HTTP/1.1\r\n

  • POST方法是把提交的数据放在HTTP包的Body中。 \r\n\r\nuser=bisheng&pwd=456'

  • GET提交的数据大小有限制(因为浏览器对URL的长度有限制)

  • POST方法提交的数据没有限制。

  • GET与POST请求在服务端获取请求数据方式不同。

  • GET方式提交数据,会带来安全问题,通过GET方式提交数据时,用户名和密码将出现在URL上

  • 一般查询操作用get,提交数据用post

模拟post请求

login.html

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

<form action="http://127.0.0.1:8080" method="post">
    用户名 <input type="text" name="user">
    密码 <input type="password" name="pwd">
    <input type="submit">
</form>

</body>
</html>
import socket
sock=socket.socket()
sock.bind(('127.0.0.1', 8080))
sock.listen(5)

while True:
    conn,addr=sock.accept()
    data=conn.recv(1024)  
    print(data) # 查看post请求
    with open("login.html","rb") as f:
        data=f.read()
    conn.send(b"HTTP/1.1 200 OK\r\n\r\n %s" % data)

    conn.close()

查看post请求,post请求,数据放在请求体中。

b'POST / HTTP/1.1\r\n
Host: 127.0.0.1:8080\r\n
Connection: keep-alive\r\n
Content-Length: 15\r\
...
Accept-Language: zh-CN,zh;q=0.9\r\n\r\n
user=in&pwd=122'  # 利用html中input name属性值拼接

响应协议

 conn.send(b"HTTP/1.1 200 OK\r\n\r\n %s" % data)
  • 响应首行
  • 响应头
  • 响应体:浏览器解析的文本内容

在这里插入图片描述

响应状态码

是当客户端向服务器端发送请求时, 返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求还是出现了错误。

  • 1XX 请求正在处理
  • 2XX 正常处理完毕
  • 3XX 重定向:发送请求访问某个网址时,如果该网址换了地址,就会重定向跳转到新的网址,涉及到两次请求。
  • 4XX 请求地址无法找到
  • 5XX 服务器处理请求出错

猜你喜欢

转载自blog.csdn.net/Light__1024/article/details/87969132