1.HTTP基础知识

HTTP是超文本传输协议的简称,它是web应用的核心,HTTP协议由两部分程序实现:一个客户端程序和一个服务器程序,它们运行在不同的端系统,通过交换HTTP报文进行会话。

1. HTTP请求和响应

HTTP所采用的是请求/响应模型,HTTP消息有两种:请求(request)和响应(response)。

用户的请求和Web应用程序的响应需要通过互联网从一台计算机发送到另一台计算机或服务器,之间使用的协议是HTTP协议,即超文本传输协议。HTTP协议是一个无状态协议,它基于C/S模型,其客户端需要与服务器建立一个连接并将一则请求消息通过连接发送到HTTP服务器,以请求需要的资源。之后服务器返回带有请求资源的响应消息,一旦回答了请求,服务器则断开与客户端的连接,这样便没有存储连接信息,因此,HTTP被称为无状态协议。

HTTP协议使用端口发送和接收消息,端口是协议发送、接收数据的信道。HTTP使用的端口为80端口,因浏览网页服务默认的端口号为80,所以只需输入URL,不用输入“80“。

1.1 HTTP请求

用户向服务器请求信息的过程,称为HTTP请求,请求消息由以下内容组成。

Get请求例子,使用Charles抓取的request:
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    img.mukewang.com
User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept    image/webp,image/*,*/*;q=0.8
Referer    http://www.imooc.com/
Accept-Encoding    gzip, deflate, sdch
Accept-Language    zh-CN,zh;q=0.8

(1)请求行。

包括方法、URI(统一资源标识符)和HTTP协议版本。

GET说明请求类型为GET,[/562f25980001b1b106000338.jpg]为要访问的资源,该行的最后一部分说明使用的是HTTP1.1版本。

(2)请求头部,紧跟着(请求行,即第一行)之后的信息,用来说明服务器要使用的附加信息。

从第二行起为请求头部,HOST将指出请求的目的地.User-Agent,服务器端和客户端脚本都能访问它,它是浏览器类型检测逻辑的重要基础.该信息由你的浏览器来定义,并且在每个请求中自动发送等等,Accept头提供有关客户端可以接受的MIME类型列表(接受所有类型用*/*表示)

(3)空行。请求头部后面的空行是必须的,指示请求消息的结束。

(4)请求数据,也叫主体,可以添加任意的其他数据这个例子的请求数据为空。

1.2 HTTP响应

响应消息由以下内容组成。

(1)状态行。HTTP/1.1 表示请求的版本号为1.1版,200为状态码,表示成功

(2)头信息。从第二行到结束分别表示为日期、请求消息正文的长度以及请求消息正文的类型等信息。

关于HTTP状态码:

HTTP状态码是用以表示网页服务器HTTP响应状态的3位数字代码。所有状态码的第一个数字代表了响应的五种状态之一。

1xx 消息:这一类型的状态码,代表请求已被接受,需要继续处理。

2xx 成功:这一类型的状态码,代表请求已成功被服务器接收、理解并接受。常用的如200表示请求已成功,请求所希望的响应头或数据体将随此响应返回。

3xx 重定向:这类状态码代表需要客户端采取进一步的操作才能完成请求,如对于搜索引擎比较友好的301跳转。

4xx 请求错误:这类状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理,除非响应的是一个HEAD请求,否则,服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。如常遇到的请求某些不存在的页面返回的404错误:请求失败,请求所希望得到的资源未在服务器上发现。

5xx 服务器错误:这类状态码代表了服务器在处理请求的过程中有错误或异常状态发生,也有可能是服务器意识到当前的软硬件资源无法完成对请求的处理。

1.3 GET和POST方法

HTTP定义了与服务器交互的不同方法,最基本的方法是GET和POST方法。

1.GET方法

GET方法适用于多数请求,根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。所谓安全意味着该操作用于获取信息而非修改信息。幂等则是多统一URL的多个请求应该返回同样的结果。

下面通过一个小例子来了解一下GET的用法。

**************************************************************************************

小A想自学Java编程,于是小A打开京东www.jd.com想购买一本Java编程思想,在搜索框中输入:Java编程思想,点击搜索以后,页面跳转至:https://search.jd.com/Search?keyword=java%E7%BC%96%E7%A8%8B%E6%80%9D%E6%83%B3&enc=utf-8&suggest=1.def.0.V03&wq=Java&pvid=1d0268866b744b908d187f748f9b299f,并显示出结果。

可以看出,搜索的关键词"Java编程思想”通过在URL后附加参数(keyword)以键值对的形式传递到了搜索页,其中"Java"被原样输出,而汉子"编程思想"被URL编码以百分号%用十六进制编码。

**************************************************************************************

 2.POST方法

POST是网页表单(FORM)中的提交方式之一,method="POST".POST方法在表单的主干包含名称/值对。

3.POST和GET方法比较

(1)提交方式,GET提交,请求的数据会附加在URL后,以"?"分割URL和传输数据,多个参数用"&"连接,如:

www.baidu.com/s?wd=java&search=ie。

POST提交:把提交的数据放置在HTTP包的包体中。

(2)传输数据的大小。

GET:特定浏览器和服务器对URL长度有限制,如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器而言,如FireFox,Chrome等,理论上没有长度限制,其限制取决于操作系统的支持。

POST:由于不是通过URL传值,理论上数据不受限制,但实际上各WEB服务器会规定POST提交数据大小进行限制,如Apache、IIS等都有各自的配置。

(3)安全性。

POST的安全性比GET的安全性高。

由于GET提交的方式决定了GET提交只适合提交一些非敏感性且不是太长的内容,而POST则可提交如用户密码等敏感信息。

1.4 HTTP工作原理

HTTP协议定义WEB客户端如何从WEB服务器请求WEB页面,以及服务器如何把WEB页面传送给WEB客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包括请求的方法,URL,协议版本,请求头部和请求数据,服务器以一个状态行作为响应,响应的内容包括协议版本、成功或者错误代码、服务器信息、响应头部和响应数据。

以下是请求/响应的步骤:

1.客户端连接到WEB服务器

一个HTTP客户端,通常是浏览器,与WEB服务器的HTTP端口(通常是80)建立TCP套接字连接。

2.发送HTTP请求

通过TCP套接字,客户端向WEB服务器发送一个文本的请求报文,一个请求报文由请求行,请求头部,空行和请求数据四个部分组成。

3.服务器接受请求并返回HTTP响应

WEB服务器解析请求,定位请求资源,服务器将资源复本写到TCP套接字,由客户端读取,一个响应包括状态行,响应头部,空行和响应数据四部分组成。

4.释放TCP连接

若connection模式为close,服务器主动关闭连接,客户端被动关闭连接,释放TCP连接;若connection模式为keepalive,则该连接会保持一段时间,期间可以继续接收请求。

5、客户端浏览器解析HTML内容

客户端首先解析状态行,查看表明请求是否成功的状态码,然后解析每一个响应头,响应头告诉以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口显示。

例如:在浏览器地址栏输入URL,到按下回车以后会经过以下流程,

1.浏览器向DNS服务器请求解析该URL中域名所对应的IP地址

2.解析出ip地址以后,根据ip地址和默认端口80,和服务器建立TCP连接

3.浏览器发出读取文件(URL域名后面部分对应文件)的HTTP请求,该请求报文作为TCP三次握手的第三个报文数据发送给服务器

4.服务器对浏览器请求做出响应,并把对应的html文本发送给浏览器

5.释放TCP连接

6.浏览器将该html文本内容显示

猜你喜欢

转载自www.cnblogs.com/blogforvi/p/9590837.html