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

HTTP协议

什么是协议

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

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

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

HTTP的请求协议及组成

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

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

properties 复制代码
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里面)

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

properties 复制代码
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选项里面)

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

组成 描述
请求方式 GET, POST, DELETE , PUT , HEAD , OPTIONS , TRACE
URI URI是统一资源标识符,代表网络中某个资源的名字,通过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响应协议的具体报文

properties 复制代码
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

													空白行

<!doctype html>                                     响应体(在Response选项里面)
<html>
    <head>
        <title>from get servlet</title>
    </head>
    <body>
        <h1>from get servlet</h1>
    </body>
</html>

状态行如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协议版本
相关推荐
‘’林花谢了春红‘’43 分钟前
计算机网络习题(第5章 网络层 第6章 传输层)
网络·计算机网络
哎呦不错哦.1 小时前
简单园区网拓扑实验
网络·智能路由器
hgdlip1 小时前
手机IP地址:定义、查看与切换方法
网络协议·tcp/ip·智能手机
dengjiayue5 小时前
tcp 的重传,流量控制,拥塞控制
网络协议·tcp/ip
咕德猫宁丶6 小时前
探秘Xss:原理、类型与防范全解析
java·网络·xss
黑子哥呢?6 小时前
Linux---防火墙端口设置(firewalld)
linux·服务器·网络
hellojackjiang20117 小时前
开源轻量级IM框架MobileIMSDK的鸿蒙NEXT客户端库已发布
网络·即时通讯·im开发·mobileimsdk-鸿蒙端
WebDeveloper20017 小时前
如何使用美国域名中心US Domain Center和WordPress创建商业网站
运维·服务器·css·网络·html
车载诊断技术9 小时前
电子电气架构 --- 什么是EPS?
网络·人工智能·安全·架构·汽车·需求分析
KevinRay_9 小时前
Python超能力:高级技巧让你的代码飞起来
网络·人工智能·python·lambda表达式·列表推导式·python高级技巧