你得知道的HTTP协议!!!

一. 简介

  • HTTP(Hypertext Transfer Protocol)即超⽂本传输协议,其位于应用层,基于TCP/IP协议来完成数据的传输,规定了客户端与服务端的通信格式。
  1. 基于“请求-响应”模式
    客户端发起请求,服务器收到请求后,服务器才会响应。
  2. 无连接
    每次连接只处理一个请求。处理完请求后,不是立即断开连接,会有一个等待时间。
  3. 无状态保存
    不保存请求和响应之间的通信状态。

二. 请求处理流程

在这里插入图片描述

  1. 用户通过浏览器输入网址(如:http://www.muzi.cn),发起请求(1到2之间隐藏了:通过DNS将域名解析为IP地址);
  2. 浏览器发起TCP连接请求,通过IP地址找到对应的web服务器;
  3. 服务器接受请求后,通过TCP三次握手建立连接;
  4. 浏览器将请求数据打包成HTTP格式的数据包;
  5. 浏览器发送请求数据包;
  6. 服务器解析HTTP格式的数据包;
  7. 执行相应的请求;
  8. 将响应结果(可能是图片或者HTML等)打包成HTTP格式的数据包;
  9. 将数据包通过网络发送给浏览器;
  10. 浏览器解析HTTP格式的数据包(假设数据是HTML);
  11. 浏览器呈现HTML响应给用户。

三. HTTP请求方法

  1. 八种方法
    GETPOST、 HEAD、TRACE、OPTIONS、CONNECT、DELETE、PUT

  2. GET和POST
    「功能介绍」
    (1)GET主要功能:
    从服务器中获取用户所需资源,并将其作为响应返回给客户端。
    ⚠️是获取资源,故不能修改资源。
    ⚠️虽然GET也可以上传资源到服务器,但一般不建议。
    (2)POST主要功能:
    既能够从服务器获取资源,也可以向服务器上传资源。

    「上传资源对比」
    (1)采用GET方法向服务器上传资源时,一般将数据添加到URL的后面,并使用“?”连接,各个变量之间用“&”连接,由于URL长度存在限制,故采用此方法上传的数据很小,通常是1024Byte左右;
    而POST方法传递数据是通过HTTP请求的附件进行的,传送数据量更大,一般不受限。
    (2)由于GET方法上传数据时是添加在URL中,故数据被“暴露”,存在安全隐患;故POST安全性更好。

四. HTTP状态码

  1. 大类别
    在这里插入图片描述
  2. 细分
    在这里插入图片描述

五. 报文组成

在这里插入图片描述

  1. 请求报文
    在这里插入图片描述
    请求行:请求方法,请求URL(不包括域名),HTTP协议版本;
    请求头部:由关键字/值对组成,每行一对
    空行:通知服务器以下不再有请求头
    请求体:GET没有请求数据,POST有。与请求数据相关的最常使用的请求头是 Content-Type 和 Content-Length 。
    在这里插入图片描述

  2. 响应报文
    在这里插入图片描述

     <status-line>   //状态行
     
     <headers>   //消息报头
     
     <blank line>   //空行
     
     <response-body>    //响应体	
    

在这里插入图片描述
3. 请求头

    Accept:指定客户端能够接收的内容类型。
	
	Accept-Charset:浏览器可以接受的字符编码集。
	
	Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。
	
	Accept-Language:浏览器可接受的语言。
	
	Accept-Ranges:可以请求网页实体的一个或者多个子范围字段。
	
	AuthorizationHTTP:授权的授权证书。
	
	Cache-Control:指定请求和响应遵循的缓存机制。
	
	Connection:表示是否需要持久连接。(HTTP 1.1默认进行持久连接)
	
	CookieHTTP:请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
	
	Content-Length:请求的内容长度。
	
	Content-Type:请求的与实体对应的MIME信息。
	
	Date:请求发送的日期和时间。
	
	Expect:请求的特定的服务器行为。
	
	From:发出请求的用户的Email。
	
	Host:指定请求的服务器的域名和端口号。
	
	If-Match:只有请求内容与实体相匹配才有效。
	
	If-Modified-Since:如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码。
	
	If-None-Match:如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变。
	
	If-Range:如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。
	
	If-Unmodified-Since:只在实体在指定时间之后未被修改才请求成功。
	
	Max-Forwards:限制信息通过代理和网关传送的时间。
	
	Pragma:用来包含实现特定的指令。
	
	Proxy-Authorization:连接到代理的授权证书。
	
	Range:只请求实体的一部分,指定范围。
	
	Referer:先前网页的地址,当前请求网页紧随其后,即来路。
	
	TE:客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息。
	
	Upgrade:向服务器指定某种传输协议以便服务器进行转换(如果支持。
	
	User-AgentUser-Agent:的内容包含发出请求的用户信息。
	
	Via:通知中间网关或代理服务器地址,通信协议。
	
	Warning:关于消息实体的警告信息

  1. 响应头
	Accept-Ranges:表明服务器是否支持指定范围请求及哪种类型的分段请求。
	
	Age:从原始服务器到代理缓存形成的估算时间(以秒计,非负)。
	
	Allow:对某网络资源的有效的请求行为,不允许则返回405。
	
	Cache-Control:告诉所有的缓存机制是否可以缓存及哪种类型。
	
	Content-Encodingweb:服务器支持的返回内容压缩编码类型。。
	
	Content-Language:响应体的语言。
	
	Content-Length:响应体的长度。
	
	Content-Location:请求资源可替代的备用的另一地址。
	
	Content-MD5:返回资源的MD5校验值。
	
	Content-Range:在整个返回体中本部分的字节位置。
	
	Content-Type:返回内容的MIME类型。
	
	Date:原始服务器消息发出的时间。
	
	ETag:请求变量的实体标签的当前值。
	
	Expires:响应过期的日期和时间。
	
	Last-Modified:请求资源的最后修改时间。
	
	Location:用来重定向接收方到非请求URL的位置来完成请求或标识新的资源。
	
	Pragma:包括实现特定的指令,它可应用到响应链上的任何接收方。
	
	Proxy-Authenticate:它指出认证方案和可应用到代理的该URL上的参数。
	
	refresh:应用于重定向或一个新的资源被创造,在5秒之后重定向(由网景提出,被大部分浏览器支持)
	
	Retry-After:如果实体暂时不可取,通知客户端在指定时间之后再次尝试。
	
	Serverweb:服务器软件名称。
	
	Set-Cookie:设置Http Cookie。
	
	Trailer:指出头域在分块传输编码的尾部存在。
	
	Transfer-Encoding:文件传输编码。
	
	Vary:告诉下游代理是使用缓存响应还是从原始服务器请求。
	
	Via:告知代理客户端响应是通过哪里发送的。
	
	Warning:警告实体可能存在的问题。
	
	WWW-Authenticate:表明客户端请求实体应该使用的授权方案。
发布了70 篇原创文章 · 获赞 4 · 访问量 6384

猜你喜欢

转载自blog.csdn.net/qq_44837912/article/details/104323934