HTTP

HTTP专项

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。

HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。

在TCP/IP协议栈中的位置

HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。如下图所示:
    HTTP

默认HTTP的端口号为80,HTTPS的端口号为443。

 

HTTP的请求响应模型

HTTP协议永远都是客户端发起请求,服务器回送响应。

HTTP

HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

 

 

 

TCP/IP协议:即三次握手和四次挥手

HTTP

SYN是请求同步的意思,synchronize(同步)的缩写

ACK是确认同步的意思,acknowledgement(确认)的缩写

---TCP(Transmission Control Protocol)传输控制协议---

TCP是主机对主机层的传输控制协议,提供可靠的连接服务

三次握手:

1.先发送一个带有SYN标志的数据包给对方

2.接受端收到后会回传一个带有SYN/ACK标志的数据包来表示传达确认信息

3.最后发送端再回传一个带有ACK标志的数据包,代表握手结束 

 

TCP的四次挥手:

客户端A发送一个FIN.用来关闭客户A到服务器B的数据传送(报文段4)

服务器B收到这个FIN. 它发回一个ACK,确认序号为收到的序号+1(报文段5)。和SYN一样,一个FIN将占用一个序号

服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)

客户端A发回ACK报文确认,并将确认序号设置为序号加1(报文段7)

 

起始行中的请求方法有哪些种呢? 

  GET: 完整请求一个资源 (常用)

  HEAD: 仅请求响应首部

  POST:提交表单  (常用)

  PUT: (webdav) 上传文件(但是浏览器不支持该方法)

  DELETE:(webdav) 删除

  OPTIONS:返回请求的资源所支持的方法的方法

  TRACE: 追求一个资源请求中间所经过的代理(该方法不能由浏览器发出)

 

HTTP

 

 

一次完整的http请求过程:

域名解析 --> 发起TCP3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如jscss、图片等) --> 浏览器对页面进行渲染呈现给用户

 

什么是URLURIURN

URI  Uniform Resource Identifier 统一资源标识符

URL  Uniform Resource Locator 统一资源定位符

 格式如下:  scheme://[username:[email protected]]HOST:port/path/to/source

                http://www.magedu.com/downloads/nginx-1.5.tar.gz

 URN  Uniform Resource Name 统一资源名称

 URLURN 都属于 URI

 为了方便就把URLURI暂时都通指一个东西

 

http请求报文和响应报文

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。

HTTP请求报文

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行请求数据4个部分组成,下图给出了请求报文的一般格式。

HTTP

or

request-line

headers

blank line

[request-body

1.请求头

请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1

HTTP协议的请求方法有GETPOSTHEADPUTDELETEOPTIONSTRACECONNECT

 

2.请求头部

请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

User-Agent:产生请求的浏览器类型。

Accept:客户端可识别的内容类型列表。

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

 

3.空行

最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。

 

4.请求数据

请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-TypeContent-Length

 

HTTP响应也由三个部分组成,分别是:状态行、消息报头、响应正文。

如下所示,HTTP响应的格式与请求的格式十分类似:

status-line

headers

blank line

[response-body]

HTTP

 正如你所见,在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。

 

 

状态行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

1xx:指示信息--表示请求已接收,继续处理。

2xx:成功--表示请求已被成功接收、理解、接受。

3xx:重定向--要完成请求必须进行更进一步的操作。

4xx:客户端错误--请求有语法错误或请求无法实现。

5xx:服务器端错误--服务器未能实现合法的请求。

常见状态代码、状态描述的说明如下。

200 OK:客户端请求成功。

400 Bad Request:客户端请求有语法错误,不能被服务器所理解。

401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。

403 Forbidden:服务器收到请求,但是拒绝提供服务。

404 Not Found:请求资源不存在,举个例子:输入了错误的URL

500 Internal Server Error:服务器发生不可预期的错误。

503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OKCRLF)。