什么是http协议
什么是超文本
HTTP的工作流程
常见的HTTP状态码
-
什么是HTTP协议
- http协议又称超文本传输协议,是一种用于分布式、协作式和超媒体信息系统的应用层协议。简单来说就是一个客户端终端(用户)和服务器端(网站)请求和应答的标准,它定义了web客户端如何从web服务器请求web页面,以及服务器如何把web页面传送给客户端。
-
什么是超文本
- 中文的超本文是直接英译单词HyperText的,超文本指的是,其内容不仅仅是文字,还包含HTML文件、JPEG图像、视频以及最重要的是对其他内容的引用(跳转链接,超链接(HyperLink))。
HTML是最常见的超本文了。如果我们去看HTML语言的编码格式,你就能够理解为什么说超文本语言是对图像、语音、视频的引用了。
- HTTP协议其实是对HTTP报文的结构形式、客户端和服务端进行报文交换的方式的一个定义。更通俗一点来说,HTTP协议定义了计算机网络中两点之间传输超文本数据的规范
-
HTTP的工作流程
-
我们以网页访问举一个例子。假如说,你在你浏览器的地址栏,输入里这串地址:http://gaia.cs.umass.edu/wireshark-labs/alice.txt,打开网址后,你的浏览器会返给你一串爱丽丝梦游仙境小说的文字。我们以这个访问过程,描述一下HTTP协议在其中发挥的作用
- 首先,HTTP协议是一个请求/应答协议。意思是,我们电脑上的浏览器作为客户端,向umass大学的保存有这个文本的服务器发出请求,请求的内容是我想要看爱丽丝小说;服务器接收到请求,返回给我们浏览器一段文字。这就是请求/应答协议。在经典的HTTP/1.1协议中,只有客户端向服务器发送请求,服务器才能返回响应给客户端(为了满足网页消息推送等功能需求等,在HTTP/2.0协议中允许服务器主动发送响应给客户端)
- 上文中提到了HTTP的请求/响应报文,是采用HTTP协议通信双方传递信息的方式。对于报文的格式,HTTP协议有作很详细的规范。HTTP/1.1协议的报文内容是ASCII明文,对于程序员来说,很轻松的能够理解传输的内容信息,清晰明了(但是不安全)。可以分成三个部分:一是请求行、二是首部行、三是实体行
请求行:请求行的最大的作用是指明请求的方法、请求的方法关键字有:GET\POST\PUT\HEAD\DELETE\OPTIONS\TRANCE\CONNECT,需要记住的是常用的GET和POST
GET和POST的差别
请求含义完全不同:GET是获取服务器的资源(浏览网页,下载图片等),POST是向服务器上传资源(网站留言等)
安全性不同:所谓的完全是指请求的方法不会破坏服务器上的资源。GET方法是下载资源,对服务器上的资源没有影响,所以是安全的;但是POST方法是往服务器上传资源,所以是不安全的。
幂等性不同:所谓的「幂等」,意思是多次执⾏相同的操作,结果都是「相同」的。 GET方法是幂等的,但POST方法不是,多次POST提交数据就会创建多个资源。
首部行:首部行中内容是客户端和服务器分别处理请求和响应提供所需的信息。比如说支持的语言啊、编码的格式啊、修改时间啊等等各种信息。一般来说,首部行可以分为通用首部字段(请求和响应报文都具有的)、请求首部字段、响应首部字段、实体首部字段。请求行和首部行一起组成了HTTP报文的首部(头部)。
通用首部字段:Connection、Cache-Control、Date、Pragma、Trailer、Transfer-Encoding、Upgrade、Via、Warning
请求首部字段:Accept、Accept-Encoding、Accept-language、Host、If-Modified-Since、Accept-Charset、Authorization、Expect、From、If-Match、If-None-Match、If-Range、If-Unmodified-Since、Max-Forwards、Proxy-Authorization、Range、Referer、TE、User-Agent
响应首部字段:Accept-Ranges、Age、ETag、Location、Proxy-Authenticate、Retry-After、Server、Vary、WWW-Authenticate
实体首部字段:Content-Type、Content-Encoding、Content-Length、Allow、Content-Encoding、Content-Location、Content-MD5、Content-Range、Expires、Last-Modified
实体行:传输的内容。一般采用Base 64进行内容编码
当我们的浏览器,按照第2点所描述的HTTP报文规范,发送了正确的报文后,服务器会根据自身实际情况,给予我们反馈。这个反馈,我们叫状态码,是写在HTTP响应报文的首部里的。不过,我们在日常生活生活中已经见过了他们的身影:404 Not Found
-
-
常见的HTTP状态码
- 1xx 信息性状态码 websocket upgrade
- 2xx 成功状态码
- 200 服务器已成功处理了请求
- 204 没有响应体
- 206 范围请求 暂停继续下载
- 3xx 重定向状态码
- 301 (永久):请求的页面以永久跳转到新的url
- 302 (临时): 允许各种各样的重定向 一般情况下都会实现到为GET的重定向 但是不确保POST会重定向为POST
- 303 只允许任意请求到GET的重定向
- 307 307和302一样除了允许POST 到GET 的重定向
- 4xx 客户端错误状态码
- 400 客户端参数错误
- 401 没有登录
- 403 登录了没有权限
- 404 页面不存在
- 405 禁用请求中指定的方法
- 5xx 服务端错误状态码
- 500 服务器错误 服务器内部错误 无法完成请求
- 502 错误网关 服务器作为网关或代理出现错误
- 503服务不可用 服务器目前无法使用
- 504 网关超时 网关或代理服务器 未及时获取请求