• HTTP协议的请求协议和响应协议的组成,HTTP常见的状态信息


    HTTP协议

    什么是协议

    协议实际上是某些人或组织提前制定好的一套规范,大家只要都按照这个规范来就可以做到沟通无障碍

    HTTP协议是W3C(万维网联盟组织)制定的一种超文本传输通信协议(发送消息的模板和数据的格式),除了传送字符串,还有声音、视频、图片等流媒体等超文本信息

    Http协议游走在浏览器和服务器之间,浏览器和服务器在请求 (request) 或响应 (response) 数据的期间都要遵循HTTP协议,这样二者才能解耦合即不互相依赖

    HTTP的请求协议及组成

    使用浏览器,右击-->检查或直接按F12,找到network网络面板,通过这个面板查看浏览器发起的请求,ALL表示所有请求,XHR表示Ajax请求

    在这里插入图片描述

    HTTP请求协议GET请求的请求报文

    GET /servlet05/getServlet?username=lucy&userpwd=1111 HTTP/1.1                           #请求行
    Host: localhost:8080                                                                    #请求头
    Connection: keep-alive
    sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"
    sec-ch-ua-mobile: ?0
    sec-ch-ua-platform: "Windows"
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Sec-Fetch-Site: same-origin
    Sec-Fetch-Mode: navigate
    Sec-Fetch-User: ?1
    Sec-Fetch-Dest: document
    # 具体的来源页面,如执行操作后回到当前页面
    Referer: http://localhost:8080/servlet05/index.html
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9
                                                                                            #空白行
                                                                                            #请求体(在Query String parameters里面)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    HTTP请求协议的POST请求的具体报文

    POST /servlet05/postServlet HTTP/1.1                                                  #请求行
    Host: localhost:8080                                                                  #请求头
    Connection: keep-alive
    Content-Length: 25
    Cache-Control: max-age=0
    sec-ch-ua: "Google Chrome";v="95", "Chromium";v="95", ";Not A Brand";v="99"
    sec-ch-ua-mobile: ?0
    sec-ch-ua-platform: "Windows"
    Upgrade-Insecure-Requests: 1
    Origin: http://localhost:8080
    # 请求参数的内容类型,application/x-www-form-urlencoded表示表单传参
    Content-Type: application/x-www-form-urlencoded
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Sec-Fetch-Site: same-origin
    Sec-Fetch-Mode: navigate
    Sec-Fetch-User: ?1
    Sec-Fetch-Dest: document
    Referer: http://localhost:8080/servlet05/index.html
    Accept-Encoding: gzip, deflate, br
    Accept-Language: zh-CN,zh;q=0.9
                                                                                          #空白行
    username=lisi&userpwd=123                                          					  #请求体(在Form Date选项里面)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    请求行如POST /servlet05/postServlet HTTP/1.1包括请求方式,URI,HTTP协议版本号三部分

    组成描述
    请求方式GET, POST, DELETE , PUT , HEAD , OPTIONS , TRACE
    URIURI是统一资源标识符,代表网络中某个资源的名字,通过URI是无法定位资源的
    URL是统一资源定位符,代表网络中某个具体的资源,通过URL是可以定位到资源,如http://localhost:8080/servlet05/index.html
    HTTP协议版本号描述当前HTTP协议的版本

    请求头包含很多属性,如请求的主机和端口(Host) ,浏览器信息,cookie等信息

    空白行: 空白行是用来区分请求头请求体

    浏览器向服务器发送的具体数据,可以是键值对格式或者JSON格式的数据**

    请求体: 浏览器发送到服务器的请求参数有name=value&...(键值对){"key":value,...}(json对象)两种格式

    • URL请求会将请求参数以键值对的格式拼接到请求地址后面,form表单的GET和POST请求会将请求参数以键值对的格式存储到请求报文的请求体中
    • 发起Ajax请求时,可以将请求参数以Json的格式存储到请求报文的请求体中

    HTTP响应协议及组成

    HTTP响应协议的具体报文

    在这里插入图片描述

    HTTP/1.1 200	ok(状态的描述信息)	 			       状态行
    Server: nginx
    Date: Mon, 09 Oct 2023 00:37:57 GMT
    #Content-Type: application/json						响应头
    Content-Type: text/html;charset=UTF-8    
    Transfer-Encoding: chunked
    Keep-Alive: timeout=20
    Connection: keep-alive
    Set-Cookie: JSESSIONID=6E8E893C9662C7A90DDF97FF61856F99; Path=/; HttpOnly
    
    													空白行
    
                                         响应体(在Response选项里面)
    
        
            from get servlet
        
        
            

    from get servlet

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    状态行如HTTP/1.1 200 ok由协议版本号,状态码,状态的描述信息三部分组成

    • 状态码: 不同的响应结果对应不同的响应状态码,以4开始的一般是浏览器端的错误导致的 , 以5开始的一般是服务器端的错误导致的
    • 状态描述信息: ok 表示正常成功结束,not found表示资源找不到

    响应头包含很多属性,如响应体的内容类型,响应体的内容长度,响应的时间…

    空白行: 用来分隔响应头和响应体的

    响应体: 响应体就是服务器响应到浏览器的具体数据,响应内容可以是JSON格式或HTMl等字符串,这些字符串被浏览器渲染解释并执行,最终展示出效果

    HTTP状态信息

    1xx: 信息

    消息:描述:
    100 Continue服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求
    101 Switching Protocols服务器转换协议:服务器将遵从客户的请求转换到另外一种协议

    2xx: 成功

    消息:描述:
    200 OK请求响应成功正常结束,其后是对GET和POST请求的应答文档
    201 Created请求被创建完成,同时新的资源被创建
    202 Accepted供处理的请求已被接受,但是处理未完成
    203 Non-authoritative Information文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝
    204 No Content没有新文档,浏览器应该继续显示原来的文档,如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的
    205 Reset Content没有新文档,但浏览器应该重置它所显示的内容,用来强制浏览器清除表单输入内容
    206 Partial Content客户发送了一个带有Range头的GET请求,服务器完成了它

    3xx: 重定向

    消息:描述:
    300 Multiple Choices多重选择,链接列表,用户可以选择某链接到达目的地,最多允许五个地址
    301 Moved Permanently所请求的页面已经转移至新的url
    302 Found所请求的页面已经临时转移至新的url
    303 See Other所请求的页面可在别的url下被找到
    304 Not Modified未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用
    305 Use Proxy客户请求的文档应该通过Location头所指明的代理服务器提取
    306 Unused此代码被用于前一版本。目前已不再使用,但是代码依然被保留
    307 Temporary Redirect被请求的页面已经临时移至新的url

    4xx: 客户端错误

    消息:描述:
    400 Bad Request服务器未能理解请求
    401 Unauthorized被请求的页面需要用户名和密码
    402 Payment Required此代码尚无法使用
    403 Forbidden对被请求页面的访问被禁止
    404 Not Found表示访问的资源不存在,服务器无法找到被请求的页面
    通常是因为路径写错了或服务器中对应的资源并没有启动成功
    405 Method Not Allowed请求中指定的方法不被允许,前端发送的请求方式与后端请求的处理方式不一致时发生的错误
    406 Not Acceptable服务器生成的响应无法被客户端所接受
    407 Proxy Authentication Required用户必须首先使用代理服务器进行验证,这样请求才会被处理
    408 Request Timeout请求超出了服务器的等待时间
    409 Conflict由于冲突,请求无法被完成
    410 Gone被请求的页面不可用
    411 Length Required“Content-Length” 未被定义。如果无此内容,服务器不会接受请求
    412 Precondition Failed请求中的前提条件被服务器评估为失败
    413 Request Entity Too Large由于所请求的实体的太大,服务器不会接受请求
    414 Request-url Too Long由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况
    415 Unsupported Media Type由于媒介类型不被支持,服务器不会接受请求
    416服务器不能满足客户在请求中指定的Range头
    417 Expectation Failed

    5xx: 服务器错误

    消息:描述:
    500 Internal Server Error请求未完成,服务器端的程序出现了异常,一般会认为是服务器端的错误导致的
    501 Not Implemented请求未完成,服务器不支持所请求的功能
    502 Bad Gateway请求未完成,服务器从上游服务器收到一个无效的响应
    503 Service Unavailable请求未完成,服务器临时过载或当机
    504 Gateway Timeout网关超时
    505 HTTP Version Not Supported服务器不支持请求中指明的HTTP协议版本
  • 相关阅读:
    three.js r146动态加载fbx文件,非module模式
    【Java面试题】《尚硅谷经典Java面试题第一季(java面试精讲)》学习笔记
    内部排序算法的比较
    大模型,教培机构要过窄门
    计算机毕业设计之微信小程序美容理发店预约系统app
    助力项目快捷实现国际化,造个多语言轮子
    人均瑞数系列,瑞数 6 代 JS 逆向分析
    14.3.1 语法格式
    使用 AWS boto3 库从 s3 桶中批量下载数据
    DSOX3012A是德科技keysight DSOX3012A示波器
  • 原文地址:https://blog.csdn.net/qq_57005976/article/details/133715807