HTTP请求头部+响应码

本篇博文主要介绍HTTP请求-响应的系列过程,包括四个部分,是在陆续学习中觉着之间有关联总结下来的,以便自己今后忘记后可以快速查看也为各位看到这篇文章的朋友们梳理一下知识。下面,正文开始:

作为一个前端开发人员,我们每天都在与页面打交道,那么,当你输入一个网址的时候,实际究竟会发生什么呢?下面,就先来解答一下这个问题。

一、当在浏览器输入一个网址后,实际会发生什么?

回答之前,先摘一段《淘宝技术这十年》中的“你刚才在淘宝上买了一件东西”里的一段话,对我理解这个问题有启发。

你发现快过年了,于是想给你的女朋友买一件毛衣,你打开了 www.taobao.com,这时你的浏览器首先查询DNS服务器,将

www.taobao.com转换成IP地址。但是,你首先会发现,在不同的地区或者不同的网络下,转换后的IP地址很可能是不一样的,这首先涉及负载均衡的第一步,通过DNS解析域名时,将你的访问分配的不同的入口,同时尽可能的保证你所访问的入口时所有入口中较快的一个。

你通过这个入口成功的访问了www.taobao.com实际的入口IP地址,……经过一系列的复杂的逻辑运算和数据处理,用于给你看的淘宝首页HTML内容便生成了,浏览器下一步会加载页面中用到的CSS /JS/图片等样式、脚本和资源文件。

扯远一点,我平时喜欢看书,各种书都看,文学类的居多,最近也在看产品类的设计类的和技术类的,多看书生活愉快,哈哈。

好,切入第一个问题,这个问题的回答主要是翻译自这篇英文文章 http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/

那么,输入网址后,实际发生了什么呢?过程如下:

1、输入网址。

2、浏览器查找域名的IP地址。

 导航的第一步是通过访问的域名找出其IP地址。DNS查找过程如下:
  • 浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
  • 系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。
  • 路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
  • ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。

3. 浏览器给web服务器发送一个HTTP请求

4. 网站服务的永久重定向响应

    服务器给浏览器响应一个301永久重定向响应,为什么服务器一定要重定向而不是直接发会用户想看的网页内容呢?其中一个原因跟搜索引擎排名有关。如果一个页面有两个地址,就像http://www.igoro.com/ 和http://igoro.com/,搜索引擎会认为它们是两个网站,结果造成每一个的搜索链接都减少从而降低排名。而搜索引擎知道301永久重定向是什么意思,这样就会把访问带www的和不带www的地址归到同一个网站排名下。还有一个是用不同的地址会造成缓存友好性变差。当一个页面有好几个名字时,它可能会在缓存里出现好几次。

5. 浏览器跟踪重定向地址

   现在,浏览器知道了要访问的正确地址,所以它会发送另一个获取请求。请求头部一般包括:
   Accept
   Accept-language
   Accept-Encoding
   Connection
   User-Agent
   Cookie
   Host

6. 服务器“处理”请求

服务器接收到获取请求,然后处理并返回一个响应。

7. 服务器发回一个HTML响应

8. 浏览器开始显示HTML

9. 浏览器发送请求,以获取嵌入在HTML中的对象

    在浏览器显示HTML时,它会注意到需要获取其他地址内容的标签。这时,浏览器会发送一个获取请求来重新获得这些文件。这些文件就包括CSS/JS/图片等资源,这些资源的地址都要经历一个和HTML读取类似的过程。所以浏览器会在DNS中查找这些域名,发送请求,重定向等等…

10. 浏览器发送异步(AJAX)请求

二、三次握手的过程

这个问题,最初接触,是在本科学习计算机网络的时候,当时学什么TCP/IP,各种层,但是,学的不如忘得快啊,很多东西,还是需要常常的使用和回顾才行。

如下图,建立连接要三次握手,释放连接要四次握手,下面具体介绍一下:

需要说明的信息:

ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1

SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。

FIN (finis):完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。

三次握手,两次确认。

首先由Client发出请求连接,即 SYN=1 ACK=0, TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此声明自己的序号是 seq=x

然后 Server 进行回复确认,即 SYN=1 ACK=1 seq=y, ack=x+1,

再然后 Client 再进行一次确认,但不用SYN 了,这时即为 ACK=1, seq=x+1, ack=y+1.然后连接建立。为什么要进行三次握手,两次确认呢?我用我自己的理解来说。

考虑一种情况,A发送了一个连接请求,但是这个请求因为某种原因而滞留了,一直延误到连接释放后才到达B,而B收到连接请求后,就会发送确认信息,同意建立连接,如果不存在第三次握手的话,这个连接就成功了。而这是一个失效的连接请求,A不会向B发送数据,这样B的资源就会白白浪费了,因为B一直在等待A发送数据。

连接释放:四次握手

当客户A 没有东西要发送时就要释放 A 这边的连接,A会发送一个报文(没有数据),其中 FIN 设置为1, 服务器B收到后会给应用程序一个信,这时A那边的连接已经关闭,即A不再发送信息(但仍可接收信息)。 A收到B的确认后进入等待状态,等待B请求释放连接, B数据发送完成后就向A请求连接释放,也是用FIN=1 表示, 并且用 ack = u+1(如图), A收到后回复一个确认信息,并进入 TIME_WAIT 状态, 等待 2MSL 时间。

当客户端A没有数据要发送时,就要释放A的连接,A会发送一个FIN报文,然后主动关闭连接(不再发送信息但仍然可以接收信息)。服务器B收到FIN报文后,会给应用程序通信,并向A发送一个确认报文。A收到B的确认后进入等待状态,等待B请求释放连接。 B的数据发送完后,会向A发送FIN报文,请求释放连接。A收到后会回复一个确认信息,然后进入TIME_WAIT状态。

以上就是7次握手。

三、HTTP头部信息

说实话,这个部分是已经工作了的师姐让我面试前一定要准备一下的问题,说面试官会问道,所以就系统的学习了一下,现在总结如下:

   通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。

登录到CSDN后,随便点了一个资源,看看HTTP头部信息:

从上图可以看到,头部信息包括三部分:

1、通用头部
2、请求头部
3、响应头部
4、查询字符串参数

分别介绍:

1、通用头部

通用头域包含请求和响应消息都支持的头域。

Request URL:请求的URL地址
Request Method: 请求方法,get/post/put/……
Status Code:状态码,200 为请求成功
Remote Address:路由地址

2、请求头部

     1) Accept:  告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型;
     2)Accept-Charset:  浏览器申明自己接收的字符集
     Accept-Encoding:浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法  (gzip,deflate)
     3)Accept-Language:  浏览器申明自己接收的语言。语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等。
     4)Authorization:  当客户端接收到来自WEB服务器的 WWW-Authenticate 响应时,该头部来回应自己的身份验证信息给WEB服务器。
     5)Connection:表示是否需要持久连接。close(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本次连接的后续请求了)。keep-alive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求)。
     6)Referer:发送请求页面URL。浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 当前请求中的网址/URL。
     7)User-Agent: 浏览器表明自己的身份(是哪种浏览器)。
     8)Host: 发送请求页面所在域。
     9)Cache-Control:浏览器应遵循的缓存机制。
            no-cache(不要缓存的实体,要求现在从WEB服务器去取)
            max-age:(只接受 Age 值小于 max-age 值,并且没有过期的对象)
            max-stale:(可以接受过去的对象,但是过期时间必须小于 max-stale 值)
            min-fresh:(接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象)
     10)Pramga:主要使用 Pramga: no-cache,相当于 Cache-Control: no-cache。
     11)Range:浏览器(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分。
     12)Form:一种请求头标,给定控制用户代理的人工用户的电子邮件地址。
     13)Cookie:这是最重要的请求头信息之一

以上仅列出了我见过的请求头部,欢迎指正和补充!

3、响应头部

      1)Age:当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过多长时间了。
      2)Accept-Ranges:WEB服务器表明自己是否接受获取其某个实体的一部分(比如文件的一部分)的请求。bytes:表示接受,none:表示不接受。
      3) Cache-Control:服务器应遵循的缓存机制。
              public(可以用 Cached 内容回应任何用户)
              private(只能用缓存内容回应先前请求该内容的那个用户)
              no-cache(可以缓存,但是只有在跟WEB服务器验证了其有效后,才能返回给客户端)
              max-age:(本响应包含的对象的过期时间)
              ALL:  no-store(不允许缓存)
      4) Connection: 是否需要持久连接
              close(连接已经关闭)。
              keepalive(连接保持着,在等待本次连接的后续请求)。
              Keep-Alive:如果浏览器请求保持连接,则该头部表明希望 WEB 服务器保持连接多长时间(秒)。例如:Keep-Alive:300
      5)Content-Encoding:WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。 例如:Content-Encoding:gzip
      6)Content-Language:WEB 服务器告诉浏览器自己响应的对象的语言。
      7)Content-Length:WEB 服务器告诉浏览器自己响应的对象的长度。例如:Content-Length: 26012
      8)Content-Range:WEB 服务器表明该响应包含的部分对象为整个对象的哪个部分。例如:Content-Range: bytes 21010-47021/47022
      9)Content-Type:WEB 服务器告诉浏览器自己响应的对象的类型。例如:Content-Type:application/xml
     10)Expired:WEB服务器表明该实体将在什么时候过期,对于过期了的对象,只有在跟WEB服务器验证了其有效性后,才能用来响应客户请求。
     11) Last-Modified:WEB 服务器认为对象的最后修改时间,比如文件的最后修改时间,动态页面的最后产生时间等等。
     12) Location:WEB 服务器告诉浏览器,试图访问的对象已经被移到别的位置了,到该头部指定的位置去取。
     13)Proxy-Authenticate: 代理服务器响应浏览器,要求其提供代理身份验证信息。
     14)Server: WEB 服务器表明自己是什么软件及版本等信息。
     15)Refresh:表示浏览器应该在多少时间之后刷新文档,以秒计。

四、HTTP响应码

HTTP响应码响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行。

响应码分五种类型,由它们的第一位数字表示:

1xx:信息,请求收到,继续处理

2xx:成功,行为被成功地接受、理解和采纳

3xx:重定向,为了完成请求,必须进一步执行的动作

4xx:客户端错误,请求包含语法错误或者请求无法实现

5xx:服务器错误,服务器不能实现一种明显无效的请求

具体含义如下:

时间: 2024-08-27 19:44:59

HTTP请求头部+响应码的相关文章

http协议介绍及get与post请求、响应状态码

HTTP:  通信双方如果想要通信就必须遵循一定的规则,我们把这个规则称之为HTTP协议! 报文:  HTTP协议通信的内容我们称之为:报文 报文格式:    报文首部 空行 报文主体 1.请求报文 请求首部:请求首行和请求头部 空行 请求主体 2.响应报文: 响应首部 空行 响应主体 报文分类:  请求报文:浏览器发送给服务器端的内容 get请求    GET /Hello/index.jsp HTTP/1.1   Accept: */*    Accept-Language: zh-CN  

HTTP/NSURLConnection(请求、响应)、http响应状态码大全

一.网络基础 1.基本概念> 为什么要学习网络编程在移动互联网时代,移动应用的特征有几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将变成一潭死水 移动网络应用 = 良好的UI + 良好的用户体验 + 实时更新的数据新闻:网易新闻.新浪新闻.搜狐新闻.腾讯新闻视频:优酷.百度视频.搜狐视频.爱奇艺视频音乐:QQ音乐.百度音乐.酷狗音乐.酷我音乐LBS:百度地

http请求头响应头及状态码列表

HTTP响应头和请求头信息对照表 HTTP请求头提供了关于请求,响应或者其他的发送实体的信息.HTTP的头信息包括通用头.请求头.响应头和实体头四个部分.每个头域由一个域名,冒号(:)和域值三部分组成. 通用头标:即可用于请求,也可用于响应,是作为一个整体而不是特定资源与事务相关联. 请求头标:允许客户端传递关于自身的信息和希望的响应形式. 响应头标:服务器和于传递自身信息的响应. 实体头标:定义被传送资源的信息.即可用于请求,也可用于响应. 根据以上分类的HTTP请求头介绍可以参考此文,本工具

HTTP请求和响应3:状态码(status)

HTTP状态码被分为了五大类: 100-199:信息提示 200-299:成功 300-399:重定向 400-499:客户端错误 500-599:服务器错误 状态码为客户端提供了一种理解事务处理结果的便捷方式,下面对每一种状态码做了一个总结. 100-199----信息性状态码 信息性状态码用于信息提示,已定义的信息性状态码如下: 1)100 原因短语:Continue 含义:说明收到了请求的初始部分,请客户端继续,发送了这个状态码之后,服务端在收到请求之后必须进行响应.客户端需要发送一个携带

简述HTTP报文请求方法和状态响应码

1. Method 请求方法,表明客户端希望服务器对资源执行的动作: 1.1. GET 向服务器请求资源. 1.2 HEAD 和GET方法的行为类似,但服务器在响应中只返回首部,不会返回实体的主体部分.这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查. 可以做到: 不获取资源的情况下了解资源的情况(比如,判断器类型) 通过查看响应中的状态码,看看某个对象是否存在: 通过查看首部,测试资源是否被修改了: 1.3. PUT 与GET从服务器读取文件相反,PUT方法回向服务器写入文件.有些

Http协议请求头、响应头、响应码

Http部分请求头 Accept 客户机通过这个头,告诉服务器,它支持哪些数据类型 Accept-Charset 客户机通过这个头,告诉服务器,它支持的编码 Accept-Encoding 客户机通过这个头,告诉服务器,支持哪种数据压缩格式 Accept-Language 客户机采用的是哪个语言 application/x-www-form-urlencoded 浏览器提交 Web 表单时使用 Content-Type 在使用 REST 接口时,服务器会检查该值,用来确定 HTTP Body 中

http请求、响应和状态码

1.http 请求 http请求包含内容: 请求地址ur 请求方法:get.post等 http协议/版本:http 1.1 请求头:  2.http响应 http响应主要包含内容: 状态码:200 OK等: 响应头: 响应内容: 响应内容可以是响应报文,也可能是一个网页: 参考网址:https://www.cnblogs.com/nickjiang/p/9148136.html 3.http请求常见状态码 1)2开头:表示成功处理了请求的状态码 200 – 表示服务器已成功处理了请求: 201

http请求与响应全过程

HTTP 无状态性 HTTP 协议是无状态的(stateless).也就是说,同一个客户端第二次访问同一个服务器上的页面时,服务器无法知道这个客户端曾经访问过,服务器也无法分辨不同的客户端.HTTP 的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP 请求. HTTP 持久连接       HTTP1.0 使用的是非持久连接,主要缺点是客户端必须为每一个待请求的对象建立并维护一个新的连接,即每请求一个文档就要有两倍RTT 的开销.因为同一个页面可能存在多个对象,所以非持久连接可

初入网络系列笔记(4)HTTP请求和响应

一.借鉴说明,本博文借鉴以下博文 1.starok,HTTP必知必会,http://www.cnblogs.com/starstone/p/4890409.html 2.CareySon,HTTP协议漫谈,http://www.cnblogs.com/CareySon/archive/2012/04/27/HTTP-Protocol.html 3.逖靖寒,浅析HTTP协议,http://www.cnblogs.com/gpcuster/archive/2009/05/25/1488749.htm