一、简介  

01
HTTP简介
  • 全称:HyperText Transfer Protocol,中文:超文本传输协议

  • HTTP是客户端浏览器或其他程序与万维网服务器之间的应用层通信协议

  • HTTP是一个基于TCP/IP通信协议来传递数据

总结:HTTP是计算机之间的一个基于请求与响应模式,无状态的应用层协议(标准)


02
相关词语
  • 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,它指明了定位的信息,必须是绝对的


03
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详解  


H01
在TCP/IP协议中的位置


 

总结:TCP/IP协议总共有四层,HTTP与HTTPS是均在应用层,HTTP的默认端口为80,HTTPS的默认为443。



H02
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方法


H03
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部分为响应正文。


H04
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头信息中

 

H04
HTTP请求方法

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。


 

H04
其他

 

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、无法验证报文完整性,可能被篡改



参考:

[1]: https://en.wikipedia.org/wiki/Http

[2]: http://www.runoob.com/http/http-intro.html

[3]: http://baike.baidu.com/item/http?fromtitle=HTTP


转载说明

本文为Findyou基于以前笔记结合网络内容整理更新,如需转载,请在开篇显著位置注明作者Findyou和出处(这最先发在我自己玩的订阅号)。

  

posted on 2017-02-23 15:30  Findyou  阅读(1035)  评论(0编辑  收藏  举报