• Http协议基本知识


    一,http协议简介

    超文本传输协议,提供一种发布和接受HTML页面的方法。

     其中我们应该知道的是两个协议格式。客户端发送到服务器的请求协议,服务器发送给客户端的响应协议。

    http的特点是:

      http是基于请求/响应模式的

      http是无状态协议

    (http是一个客户端服务端请求和应答标准,默认端口都为80端口

    URL:统一资源定位器,它包括:      协议名://域名:端口/路径。

    二,请求协议

    请求协议的格式:

      请求首行://请求方式,请求路径,协议版本。GET方式     /favicon.ico路径       HTTP/1.1协议版本

      请求头信息://请求头名称:请求头内容,即为key:value键值对格式   Host: 127.0.0.1:9000

      空行://用来与请求体分隔开

      请求体://get方式没有请求体,POST方式有请求体

    2,GET请求

      HTTP默认的请求方法是GET

        没有请求体

        数据必须在1K内

        GET请求数据会暴露在浏览器的地址栏中

      GET请求常用操作:

        1.在浏览器的地址栏中直接给出URL

        2.点击页面上道德超链接也一定是GET请求

        3.提交表单是,表单默认使用GET请求,也可设置为POST方式

      GET操作的集体信息

       
    GET 127.0.0.1:8090/login HTTP/1.1:GET请求,请求服务器路径为 127.0.0.1:8090/login ,协议为1.1
    Host:localhost:请求的主机名为localhost;
    *User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0:与浏览器和OS相关的信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取User-Agent头信息而来的;
    Accept: text
    /html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8:告诉服务器,当前客户端可以接收的文档类型,其实这里包含了*/*,就表示什么都可以接收;
    Accept
    -Language: zh-cn,zh;q=0.5:当前客户端支持的语言,可以在浏览器的工具选项中找到语言相关信息
    Accept
    -Encoding: gzip, deflate:支持的压缩格式。数据在网络上传递时,可能服务器会把数据压缩后再发送;
    Accept
    -Charset: GB2312,utf-8;q=0.7,*;q=0.7:客户端支持的编码;
    Connection: keep
    -alive:客户端支持的链接方式,保持一段时间链接,默认为3000ms;
    Cookie: JSESSIONID
    =369766FDF6220F7803433C0B2DE36D98:因为不是第一次访问这个地址,所以会在请求中把上一次服务器响应中发送过来的Cookie在请求中一并发送去过;这个Cookie的名字为JSESSIONID。

    3,POST请求 

      post请求的特点:

        数据不会出现在地址栏中

        数据的大小没有上限

        有请求体

        请求体中如果存在中文,会使用URL编码

      http协议中参数的传递是使用键值对的方式进行传输,如果有多个键值对情况下需要用&进行分割。这样服务端在收到这样的的字符串的时候会先使用&进行分割键值对然后使用=分割参数值。

    POST请求是可以有体的,而GET请求不能有请求体。

    • Referer: http://localhost:8080/hello/index.jsp请求来自哪个页面,例如你在百度上点击链接到了这里,那么Referer:http://www.baidu.com;如果你是在浏览器的地址栏中直接输入的地址,那么就没有Referer这个请求头了;
    • Content-Type: application/x-www-form-urlencoded表单的数据类型,说明会使用url格式编码数据;url编码的数据都是以“%”为前缀,后面跟随两位的16进制。
    • Content-Length:13请求体的长度,这里表示13个字节。
    • keyword=hello请求体内容!hello是在表单中输入的数据,keyword是表单字段的名字。

     Referer头的使用,可以统计网站访问信息,可以用来防盗链。

    三,响应协议

      响应协议格式:

        响应首行

        响应头信息

        空行

        响应体

    响应内容是由服务器发送给浏览器的内容,浏览器会根据响应内容来显示。遇到<img src=''>会开一个新的线程加载,所以有时图片多的话,内容会先显示出来,然后图片才一张张加载出来


    • HTTP/1.1 200 OK响应协议为HTTP1.1,状态码为201,表示请求成功,OK是对状态码的解释;
    • Server:WSGIServer/0.2 CPython/3.5.2:服务器的版本信息;
    • Content-Type: text/html;charset=UTF-8响应体使用的编码为UTF-8
    • Content-Length: 724响应体为724字节;
    • Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello响应给客户端的Cookie

    3.2 状态

    响应头对浏览器来说很重要,它说明了响应的真正含义。例如200表示响应成功了,302表示重定向,这说明浏览器需要再发一个新的请求。

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

     

    一个简单的服务端示例代码:

    #服务端代码示例
    import socket
    
    sock = socket.socket()
    
    sock.bind(("127.0.0.1",9000))
    
    sock.listen(5)
    
    while True:
        conn,addr = sock.accept()
    
        data=conn.recv(1024)
        print(data.decode("utf8"))
        with open("server_test.html",encoding="utf8") as f:
            data=f.read()
            conn.send(b"HTTP/1.1 201 OK
    
     %s" %data.encode("utf8"))
    
        conn.close()
    
    #服务端html页面
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>这是一个测试段</title>
    </head>
    <h1>测试语句</h1>
    <body>测试段内容,显示信息确认页面读取正常<br>
    <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1495439831&di=36446826d88460cfa0c7662d8bac6e1a&imgtype=jpg&er=1&src=http%3A%2F%2F5.26923.com%2Fdownload%2Fpic%2F000%2F322%2F855cf0bca1a9b9e3067b8a575b430f26.jpg">
    
    </body>
    </html>

    http传输协议传输数据都是bytes数据,一定要注意文件读取时编解码问题。

  • 相关阅读:
    第15周作业
    迟到的第14周作业
    第13周作业集
    第11次作业--字符串处理
    找回感觉的练习
    第9次作业--接口及接口回调
    20194684 + 自动生成四则运算题第一版报告
    css的calc在less文件中计算有误问题
    react 细节整理
    js async属性
  • 原文地址:https://www.cnblogs.com/lzh1118/p/6856899.html
Copyright © 2020-2023  润新知