HTTP协议详解

一、HTTP协议介绍

概念
HTTP 协议的全称是(HyperText Transfer Protocol,超文本传输协议),是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片、音乐、视频、超链接等等都属于超文本。传输 HTTP 协议格式的数据是基于 TCP 传输协议的,发送数据之前需要先建立连接。

作用
它规定了浏览器和 Web 服务器通信数据的格式,也就是说浏览器和web服务器通信需要使用http协议。

特点

  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

二、 HTTP 请求报文

HTTP请求报文组成:
请求行、请求头、空行和请求体

2.1请求行
请求行必须在http请求格式的第一行。
请求行(请求方式 资源路径 协议/版本)

2.2请求方式
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

请求方式说明特点
GET获取web服务器数据将请求参数追加在url后面,相对不安全;url长度限制get请求方式数据的大小;没有请求体;一般的HTTP请求大多都是GET。常见get请求:地址栏直接访问、< a href="" >、< img src="" >等
POST向web服务器提交数据请求参数在请求体处,较安全;请求数据大小没有显示;只有表单设置为method=“post”才是post请求,其他都是get请求
HEAD与GET相似服务端接收到HEAD请求时只返回响应头,不发送响应内容。所以,如果只需要查看某个页面的状态时,用HEAD更高效,因为省去了传输页面内容的时间。
DELETE删除某一个资源
OPTIONS用于获取当前URL所支持的方法若请求成功,会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
PUT指定资源位置更新内容本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。
TRACE回显服务器收到的请求主要用于测试或诊断。
CONNECT是HTTP/1.1协议预留的能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接与非加密的HTTP代理服务器的通信。
  • GET方式的请求报文没有请求体,只有请求行、请求头、空行组成。
  • POST方式的请求报文可以有请求行、请求头、空行、请求体四部分组成,注意:POST方式可以允许没有请求体,但是这种格式很少见。

2.3请求头
开发者工具查看HTTP请求头(GET请求方式)
在这里插入图片描述
GET 请求报文说明:

---- 请求行 ----
GET /weixin_45455015 HTTP/1.1    # GET请求方式 请求资源路径 HTTP协议版本
---- 请求头 -----
Host: blog.csdn.net     # 服务器的主机地址和端口号
Connection: keep-alive   # 和服务端保持长连接
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1   # 让浏览器升级不安全请求,使用https请求
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36    # 用户代理,也就是客户端的名称
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3    # 可接受的数据类型
Accept-Encoding: gzip, deflate, br   # 可接受的压缩格式
Accept-Language: zh-CN,zh;q=0.9    #可接受的语言
Cookie: xxxx...          # 登录用户的身份标识

---- 空行 ----
因为GET没有正文,所以下面为空

请求原始报文的每项数据之间使用:\r\n

三、HTTP响应报文

HTTP请求报文组成:
响应行、响应头、空行和响应体
3.1响应行
响应行是由三部分组成:HTTP协议版本 状态码 状态描述
3.2状态码

状态码的类别:

状态码类别原因短语
1XXInformational(通知状态码)接受的请求正在处理
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要进行附加操作以完成请求
4XXClient Error(客户端错误状态码)服务器无法处理请求
5XXServer Error(服务器错误状态码)服务器处理请求出错

状态码大全

状态码名称原因短语
100Continue请求者应当继续提出请求,服务器返回此代码表示已收到初始的请求,正在等待其余部分
101Switching Protocols切换协议, 请求者已要求服务器切换协议,服务器已确认并准备切换
200OK服务器已成功处理了请求。通常,这表示服务器提供了请求的网页,对GET和POST请求的应答文档跟在后面。
201Created已创建,请求成功并且服务器创建了新的资源,Location头给出了它的URL。
202Accepted已接受,服务器已接受请求,但尚未处理。该请求最终可能会或可能不会被执行,因为在实际处理时可能不允许该请求。
203Non-Authoritative Information非授权信息,服务器已成功处理了请求,但返回的信息可能来自另一来源。
204No Content无内容,服务器成功处理了请求,但没有返回任何内容
205Reset Content没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。
206Partial Content客户发送了一个带有Range头的GET请求(分块请求),服务器成功处理了部分 GET 请求。
300Multiple Choices多种选择, 针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301Moved Permanently永久移动,请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
302Moved Temporatily类似于301,但是移动是临时的。服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
303See Other查看其它位置,请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。即该状态码存在的最主要意义是为了处理POST请求重定向到GET请求的情况
304Not Modified未修改,自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
305Use Prox使用代理,请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
307Temporary Redirect临时重定向,服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
400Bad Request错误请求,服务器不理解请求的语法。
401Unauthorized未授权,访问被拒绝, 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403Forbidden禁止访问, 服务器拒绝请求。
404Not Found未找到, 服务器找不到请求的网页。是一个常见的状态码。
405Method Not Allowed方法禁用,禁用请求中指定的方法。
406Not Acceptable不接受,指定资源已找到,但无法使用请求的内容特性响应请求的网页。
407Proxy Authentication Required需要代理授权验证,此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
408Request Timeout请求超时,服务器等候请求时发生超时
409Conflict冲突,服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。
410Gone已删除,如果请求的资源已永久删除,服务器就会返回此响应。返回410表示文档永久地离开了指定的位置,而404表示由于未知的原因文档不可用。
411Length Required需要有效长度,服务器不接受不含有效内容长度标头字段的请求。
412Precondition Failed未满足前提条件, 服务器未满足请求者在请求中设置的其中一个前提条件。
413Request Entity Too Large请求实体过大,服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
414Request URI Too Long请求的 URI(通常为网址)过长,服务器无法处理。
415不支持的媒体类型请求的格式不受请求页面的支持。
416Requested Range Not Satisfiable请求范围不符合要求,如果页面无法提供请求的范围,则服务器会返回此状态代码。
417未满足期望值服务器未满足"期望"请求标头字段的要求。
423锁定的错误
500Internal Server Error服务器内部错误,服务器遇到错误,无法完成请求
501Not Implemented尚未实施, 服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码。
502Bad Gateway错误网关, 服务器作为网关或代理,从上游服务器收到无效响应。
503Service Unavailable服务不可用, 服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。
504Gateway Timeout网关超时,服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505HTTP Version Not SupportedHTTP 版本不受支持,服务器不支持请求中所用的 HTTP 协议版本。

3.3响应头
开发者工具查看HTTP响应头
在这里插入图片描述
响应报文说明::

--- 响应行/状态行 ---
HTTP/1.1 200 OK     # HTTP协议版本 状态码 状态描述
--- 响应头 ---
Date: Wed, 04 Sep 2019 09:47:27 GMT   #  服务端的响应时间
Content-Type: text/html; charset=UTF-8   # 内容类型
Transfer-Encoding: chunked   # 发送给客户端内容不确定内容长度,发送结束的标记是0\r\n, Content-Length表示服务端确定发送给客户端的内容大小,但是二者只能用其一。
Connection: keep-alive    # 和客户端保持长连接
Server: openresty   # 服务器名称
--- 空行 ---
--- 响应体 ---
<!DOCTYPE html><html lang=“en”> …</html> # 响应给客户端的数据

原始响应报文的每项数据之间使用:\r\n

四、浏览器访问

web服务器的通信过程
在这里插入图片描述

五、URL

URL的英文全拼是(Uniform Resoure Locator),统一资源定位符,通俗理解就是网络资源地址,也就是我们常说的网址。

URL例子:
https://blog.csdn.net/weixin_45455015

  • 协议部分: https://、http://、ftp://
  • 域名端口部分: www.csdn.net (https端口默认443,http默认80)
  • 资源路径部分:/weixin_45455015
  • 查询参数部分: ?page=1&count=10 (?后面的参数)

六、短连接和长连接

  • 短连接
    短连接的操作步骤是: 建立连接- ->数据传输- ->关闭连接… …建立连接- ->数据传输- ->关闭连接
    如果客户请求频繁,将在TCP的建立和关闭操作上浪费较多时间和带宽。

  • 长链接
    长链接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。

    长链接操作步骤: 建立连接- ->数据传输…(保持连接)…数据传输- ->关闭连接

    长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值