目录
目录
一、HTTP简介
-
全称:HyperText Transfer Protocol,中文:超文本传输协议
-
HTTP是客户端浏览器或其他程序与万维网服务器之间的应用层通信协议
-
HTTP是一个基于TCP/IP通信协议来传递数据
总结:HTTP是计算机之间的一个基于请求与响应模式,无状态的应用层协议(标准)
相关词语
-
RFC:reqeust for comments 征求修正意见书
万维网协会(World Wide Web Consortium)和Internet工作小组IETF(Internet Engineering Task Force)合作发布了一系列的RFC,RFC1945定义了HTTP/1.0版本。其中最著名的就是RFC2616版本HTTP 1.1版本(2014更新废弃),2015年发布了RFC7540,即HTTP/2 。
-
URL:uniform resource location 统一资源定位符
-
URI:uniform resource identifier 统一资源标识符
URL与URI区别
URL也是一种URI
URI是一种抽象的资源标识,可以是绝对的,也可以是相对的
URL是一种URI,它指明了定位的信息,必须是绝对的
HTTP请求过程
-
1)客户端连接到Web服务器
浏览器与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。
-
2)发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文。一个请求由请求行、请求头部、空行和请求数据4部分组成。
-
3)服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源,服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
-
4)释放连接TCP连接
Web服务器主动关闭TCP套接字,释放TCP连接;客户端被动关闭TCP套接字,释放TCP连接。
-
5)客户端浏览器解析HTML内容
客户端浏览器先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
二、HTTP详解
1.在TCP/IP协议中的位置
总结:TCP/IP协议总共有四层,HTTP与HTTPS是均在应用层,HTTP的默认端口为80,HTTPS的默认为443。
2.Request(请求消息)
客户端发送一个HTTP请求到服务器,请求消息包括以下内容:
请求行(request line)、请求头(header)、空行和请求数据四个部分组成。
【举个栗子】
- Get 请求
GET /img/bd_logo1.png HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Accept: text/html,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.4 Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
-
第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本。此处用的GET方法,请求[/img/bd_logo1.png]资源,版本HTTP1.1
-
第二部分:请求头,请求行之后的部分,用来说明服务器要使用的附加信息。
-
第三部分:空行,请求头后面必须是空行,即使第四部分无数据。
-
第四部分:请求数据可以添加任意的其他数据,此例请求数据为空。
- POST请求
POST / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.4 Safari/537.36
Content-Length:10
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
res=awbrag
温馨提示:分析同上GET方法
3.Response(响应消息)
服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。响应消息也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
【举个栗子】
HTTP/1.1 200 OK
Date: Wed, 22 Feb 2017 17:12:59 GMT
Content-Type: text/html; charset=UTF-8
Last-Modified: Wed, 03 Sep 2014 10:00:27 GMT
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
-
第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息三部分组成。此例(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
-
第二部分:消息报头,用来知会客户端要使用的一些附加信息。Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
-
第三部分:空行,消息报头后面的空行是必须的
-
第四部分:响应消息正文,服务器返回给客户端的信息内容。空行之后的html部分为响应正文。
4.HTTP状态码
Response返回状态行中状态码,不同状态码代表不同含义,直接反映请求的情况。HTTP Status Code由三位数字(十进制)组成,第一个数字定义了响应的类别,共分五种。
五种类别
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
常见状态码
状态码 | 英文名称 | 中文描述 |
---|---|---|
200 | OK | 请求成功。一般用于GET与POST请求 |
301 | Moved Permanently | 永久重定向。 |
302 | Found | 临时重定向。有网址劫持风险,不建议使用。 |
304 | Not Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源. |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中 |
5.HTTP请求方法
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
6.其他
GET和POST请求的区别
1.定义不同:get重点在从服务器上获取资源,post重点在向服务器发送数据;
2.提交方式不同:get传输数据是通过URL请求,这个过程用户是可见的。而POST请求会把请求的数据放置在请求实体中。因此,GET请求的数据会暴露在地址栏中。
2.传输数据的大小不同:HTTP规范中均没有限制。Get传输的数据量小,是因为受URL长度限制,但效率较高;Post可以传输大量数据,所以上传文件时只能用Post方式。
3.安全性不同:get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等,post相对get安全性较高。
4.字符集支持不同:get方式只能支持ASCII字符,向服务器传的中文字符可能会乱码。post支持标准字符集,可以正确传递中文字符。
三、练习自测
1.说出最少4种常用的HTTP方法?
2.GET方法与POST方法的区别?
3.简述HTTP请求报文与响应报文格式?
4.说出以下常见的HTTP相应状态码含义:
200,301,302,400,403,404,500,503
5.HTTP的缺点与HTTPS?
1、2、3、4答案省略...
5.答:
a、通信使用明文不加密,内容可能被窃听
b、不验证通信方身份,可能遭到伪装
c、无法验证报文完整性,可能被篡改