HTTP请求报文由3部分组成(请求行+请求头部+请求正文)
HTTP请求结构:
请求行: 是由 请求字段、URL字段、HTTP协议版本字段
三个字段组成,他们用空格分隔,例如:GET/material/index HTTP/1.1\r\n
根据HTTP标准,HTTP请求可以使用多种请求方法
HTTP1.0定义了三种请求方法:GET,POST,HEAD
方法。HTTP1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE,CONNECT
方法
方法:
1.GET:请求指定的页面信息,并返回实体主体
2.POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中,POST请求可能会导致新的资源的建立或已有资源的修改
3.HEAD:类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头
4.PUT:从客户端向服务器传送的数据取代指定的文档的内容
5.DELETE:请求服务器删除指定的页面
6.CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
7.OPTIONS:允许客户端查看服务器的性能
8.TRACE:回显服务器收到的请求,主要用于测试或诊断
3.2 请求头部向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请求体中,POST请求可能会导致新的资源的建立或已有资源的修改
请求头部: HTTP客户程序(例如浏览器),向服务器发送请求的时候必须指明请求类型(一般是GET或者 POST),如有必要,客户程序还可以选择发送其他的请求头。大多数请求头并不是必需的,但Content-Length除外,对于POST请求来说 Content-Length必须出现
请求报头通知服务器关于客户端求求的信息,典型的请求头有:
方法名: Content-Length 描述: 表示请求消息正文的长度
方法名: Host 描述: 请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
方法名: User-Agent 描述: 发送请求的浏览器类型、操作系统等信息
方法名: Accept 描述: 客户端可识别的内容类型列表,用于指定客户端接收那些类型的信息
方法名: Accept-Encoding 描述: 客户端可识别的数据编码
方法名: Accept-Language 描述: 表示浏览器所支持的语言类型
方法名: Connection 描述: 允许客户端和服务器指定与请求/响应连接有关的选项,例如这是为Keep-Alive则表示保持连接
方法名: Transfer-Encoding 描述: 告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式
方法名: Cookie 描述: 客户端可以向服务器带数据,只是非常重要的信息之一
方法名: Referer 描述: 发出请求的页面的URL
3.3 空行
他的作用是告诉服务器 请求头部信息到此为止
3.4 请求正文
案例:
HTTP响应结构:
HTTP的响应报文是由( 状态行、响应头部、响应正文
) 三部分组成
4.1 响应行
响应行: 描述了响应的状态,一般由协议版本、状态码及其描述组成 比如 HTTP/1.1200OK\r\n
,其中协议版本HTTP/1.1或者HTTP/1.0,200就是它的状态码,OK则为它的描述。
五种可能的取值:
状态码:1XX 描述: 指示信息——表示请求已接收,继续处理
状态码:2XX 描述: 成功——表示请求已被成功接收,理解,接收
状态码:3XX 描述: 重定向——要完成请求必须进行更进一步的操作
状态码:4XX 描述: 客户端错误——请求有语法错误或请求无法实现
状态码:5XX 描述: 服务端错误——服务器未能实现合法的请求
常见状态码:
状态码:200 OK 描述: 正常返回信息
状态码:400 Bad Request 描述: 客户端请求有语法错误,不能被服务器所理解
状态码:401 Unauthorized 描述: 请求未经授权,这个状态代码必须和WWW--Authenticate报头域一起使用
状态码:403 Forbidden 描述: 服务器收到请求,但是拒绝提供服务
状态码:404 Not Found 描述: 请求资源不存在,eg,输入了错误的URL
状态码:500 Internal Server Error 描述: 服务器发生不可预期的错误
状态码:503 Server Unavailable 描述: 服务器当前不能处理客户端的请求,一段时间后可能恢复正常
4.2 响应头部
响应头部: 用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
方法: Server 描述: 服务器通过这个头告诉浏览器服务器的类型
方法: Date 描述: 表示消息发送的时间
方法: Allow 描述: 服务器支持哪些请求方法(如GET、POST等)
方法: Content-Encoding 描述: 文档的编码(Encode)方法
方法: Content-Length 描述: 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据
方法: Content- Type 描述: 表示后面的文档属于什么MIME类型
方法: Expires 描述: 告诉浏览器把回送的资源缓存多长时间,-1或0则是不缓存
方法: Server 描述: 服务器通过这个头告诉浏览器服务器的类型
方法: WWW-Authenticate 描述: 客户应该在Authorization头中提供什么类型的授权信息
方法: Transfer-Encoding
描述: 告诉浏览器数据的传送格式
方法: Access-Control-Allow-Origin 描述: 它的值要么是请求时Origin字段的值,要么是一个*,表示接受任意域名的请求
方法: Access-Control-Allow-Credentials 描述:该字段可选。它的值是一个布尔值,表示是否允许发送Cookie
4.3 响应体响应体就是响应的消息体,它包含了响应的内容。它可以包含HTML代码,图片,等等。主体是由传输在HTTP消息中紧跟在头部后面的数据字节组成的。
案例:
1. DNS解析:
当我们浏览器会首先搜索浏览器自身的DNS缓存,也就是我们的hosts文件中去查找,如果浏览器自身缓存找不到则会查看系统的DNS缓存,如果找到且没有过期则停止搜索解析到此结束,而如果本机没有找到DNS缓存,则浏览器会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器发起域名解析请求,最终会找到我们域名对应的IP地址。
2. TCP解析:拿到域名对应的IP地址之后,User-Agent(一般是指浏览器)会以一个随机端口(1024< 端口 < 65535)向服务器的WEB程序(常用的有httpd,nginx等)80端口发起TCP的连接请求。这个连接请求到达服务器端后,进入到网卡,然后是进入到内核的TCP/IP协议栈,最终到达WEB程序,最终建立了TCP/IP的连接
3. 发送HTTP请求: 建立了TCP连接之后,发起一个http请求
4. 服务器处理请求并返回HTTP报文: 服务器接受并处理完请求,返回 HTTP 响应,一个响应报文格式基本等同于请求报文,由响应行、响应头、空行、实体组成
5. 浏览器解析渲染页面
6. 连接结束: TCP四次挥手,端口连接
Cookie的设置以及发送过程:
到这里呢,HTTP协议就讲解完成了,以上就是小农对于HTTP的认识,有小伙伴觉得不对或者可以更优化的地方,可以在留言提出,对于文中有不懂的小伙伴可以留言进行提问,今天的HTTP协议详解就到这里了,大家加油~
Copyright© 2013-2020
All Rights Reserved 京ICP备2023019179号-8