前端技术学习首页投稿(暂停使用,暂停投稿)

Http协议的详细总结

2017-12-18  本文已影响1783人  奔跑吧李博

HTTP协议

超文本传输协议HyperText Transfer Protocol),缩写HTTP。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

URI和URL

  1. 访问资源的命名机制
  2. 存放资源的主机名
  3. 资源自身的名称,由路径表示,着重强调于资源
  1. 协议
  2. 可访问该资源的主机IP地址(或带有端口号)
  3. 主机资源的具体地址(目录加文件名)

URL的构成:

  1. 协议部分:协议部分为http:
  2. 域名部分:域名部分例如"www.jianshu.com",当然域名也可以用IP地址,IP少一步用DNS服务器解析
  3. 端口部分:域名和端口之间使用":"分隔。端口不是URL必须的部分,如果端口省略,将采用默认端口号80,所以实际请求地址是http://www.jianshu.com:80
    4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。
  4. 文件名部分:指在服务器中访问的资源文件的路径。
  5. 锚部分:从“#”开始到最后,都是锚部分,也不是必须的部分。做过html的都知道,用于定位到页面的滑动位置。
  6. 参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。例如?page=1。

请求的种类:

HTTP协议中共定义了八种方法或者叫“动作”来表明对Request-URI指定的资源的不同操作方式。就类似操作数据库和文件系统一样,设计网络的请求也是一样。URL用于定位了网络资源,创造PUT,DELETE,POST,GET来对应增,删,改,查操作。但是我们在实际应用中常用的也就是get和post,其他请求方式也都可以通过这两种方式间接的来实现。

GET和POST的区别:

  1. 参数携带位置不同。
    GET提交的数据会附加家URL之后(即把数据放在请求行中),会在地址栏中显示,接?=传值,多个参数用&连接。POST提交的数据放在HTTP包体中,地址栏不显示。

  2. 传输数据大小限制不同。
    不同浏览器对URL的长度有限制,因此对于GET提交时,传输数据就会受到URL长度的限制。POST由于不是通过URL传值,理论上数据不受限。

  3. POST的安全性要比GET的安全性高。因为浏览器可能对请求地址做历史记录的存储,对于GET请求的登录,那其他人就可以直接在URL上拿到你的账号和密码了,而POST拿不到参数。

HTTP请求信息:

客户端发送一个HTTP请求到服务的请求信息包括以下格式:
请求行(request line)、请求头(header,常用于存放token)、空行和请求数据四个部分。

image.png

例如:

GET /8669504-c2641e8e6eed5904.png HTTP/1.1
Host www.jianshu.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 www.jianshu.com
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8
name=Professional%20Ajax&publisher=lili

  1. 第一行请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本。
  2. 第二部分,大括号之间的请求头部,用于提交服务器的附加信息。
  3. 第三部分,空行,请求头部后面的空行是必须的。
  4. 第四部分,请求数据也叫主体,可以添加任意的其他数据。

HTTP响应信息:

服务器接受请求回传响应信息也由四分部组成:
状态行,消息报头,空行和响应正文。
例如:

HTTP/1.1 200 OK
Date: Fri, 22 May 2017 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
</body>
</html>

  1. 第一行包括协议版本号,返回状态码
  2. 第二行为响应日期时间
  3. 第三行为响应消息报头,Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
  4. 响应正文,服务器返回给客户端的文本信息。

HTTP状态码:

状态码有三位数字,第一数字表示当前相应的类型,各个类型有:

总结HTTP一次请求的完整过程:

image.png
  1. 客户端与服务端建立TCP连接
  2. 通过TCP套接字连接,发送HTTP请求
  3. 服务器解析请求,定位请求资源,将查询资源然后返回HTML文本数据,由客户端读取。
  4. 释放TCP连接
    5.客户端浏览器解析HTML内容
浏览器输入网站发生的事件:

1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
5、释放 TCP连接;
6、浏览器将该 html 文本并显示内容;

以上是Http的全部总结,该篇文章不断完善不断更新。

上一篇下一篇

猜你喜欢

热点阅读