request 请求头
1.Host (主机和端口号)
Host:对应网址URL中的Web名称和端口号,用于指定被请求资源的Internet主机和端口号,通常属于URL的一部分。
2.Connection (链接类型)
Connection:表示客户端与服务连接类型
Client 发起一个包含 Connection:keep-alive 的请求,HTTP/1.1使用 keep-alive 为默认值。
Connection 头(header) 决定当前的事务完成后,是否会关闭网络连接。如果该值是“keep-alive”,网络连接就是持久的,不会关闭,使得对同一个服务器的请求可以继续在该连接上完成。
3. Server收到请求后
如果 Server 支持 keep-alive,回复一个包含 Connection:keep-alive 的响应,不关闭连接;
如果 Server 不支持 keep-alive,回复一个包含 Connection:close 的响应,关闭连接。
如果client收到包含 Connection:keep-alive 的响应,向同一个连接发送下一个请求,直到一方主动关闭连接。
keep-alive在很多情况下能够重用连接,减少资源消耗,缩短响应时间,比如当浏览器需要多个文件时(比如一个HTML文件和相关的图形文件),不需要每次都去请求建立连接。
4. Upgrade-Insecure-Requests (升级为HTTPS请求)
Upgrade-Insecure-Requests:升级不安全的请求,意思是会在加载 http 资源时自动替换成 https 请求,让浏览器不再显示https页面中的http请求警报。
HTTPS 是以安全为目标的 HTTP 通道,所以在 HTTPS 承载的页面上不允许出现 HTTP 请求,一旦出现就是提示或报错。
如果在https的页面需要加载http的资源,那么浏览器就会报错或者提示,为了促进用户升级协议,同时不需要网站开发者劳师动众地把整个网站的http资源改成https资源,chrome增加一个Upgrade-Insecure-Requests:1头,告诉服务器,浏览器可以处理https协议,然后服务器返回Content-Security-Policy:upgrade-insecure-requests头,或者通过meta头设置,告诉浏览器,对于页面的http资源,请求时可以自动升级到https,比如在https的网站上有一张图片url是http://localhost/1.jpg,浏览器请求时会把url变成https://localhost/1.jpg,所以这里首先需要服务器在端有相对应的资源。但是有一种情况例外,那就是https网站中a标签对应的外站资源不会被升级,比如a网站有一张b网站的链接,那么这个链接对应的url不会升级。
5.User-Agent (浏览器名称)--重要
User-Agent:是客户浏览器的名称,代表浏览器身份,有些时候同样的网站使用不同浏览器访问返回的数据会不一样。
6.Accept (传输文件类型)
Accept的作用
Accept:指浏览器或其他客户端可以接受的MIME(MultipurposeInternet Mail Extensions(多用途互联网邮件扩展))文件类型,服务器可以根据它判断并返回适当的文件格式。
举例:
Accept: */*:表示什么都可以接收。
Accept:image/gif:表明客户端希望接受GIF图像格式的资源;
Accept:text/html:表明客户端希望接受html文本。
Accept: text/html, application/xhtml+xml;q=0.9,image/*;q=0.8:表示浏览器支持的 MIME 类型分别是 html文本、xhtml和xml文档、所有的图像格式资源。
q是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容。若没有指定q值,则默认为1,按从左到右排序顺序;若被赋值为0,则用于表示浏览器不接受此内容类型。
text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;application:用于传输应用程序数据或者二进制数据。
7.Referer (页面跳转处)
Referer:表明产生请求的网页来自于哪个URL,用户是从该 Referer页面访问到当前请求的页面。这个属性可以用来跟踪Web请求来自哪个页面,是从什么网站来的等。
有时候遇到下载某网站图片,需要对应的referer,否则无法下载图片,那是因为人家做了防盗链,原理就是根据referer去判断是否是本网站的地址,如果不是,则拒绝,如果是,就可以下载;
8.Accept-Encoding(文件编解码格式)
Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件并加速文件传递速度。浏览器在接收到Web响应之后先解码,然后再检查文件格式,许多情形下这可以减少大量的下载时间。
举例:Accept-Encoding:gzip;q=1.0,identity; q=0.5, *;q=0
如果有多个Encoding同时匹配, 按照q值顺序排列,本例中按顺序支持gzip, identity压缩编码,支持gzip的浏览器会返回经过gzip编码的HTML页面。 如果请求消息中没有设置这个域服务器假定客户端对各种内容编码都可以接受。
9. Accept-Language(语言种类)
Accept-Langeuage:指出浏览器可以接受的语言种类,如en或en-us指英语,zh或者zh-cn指中文,当服务器能够提供一种以上的语言版本时要用到。
10. Accept-Charset(字符编码)
Accept-Charset:指出浏览器可以接受的字符编码。
举例:Accept-Charset:iso-8859-1,gb2312,utf-8
· ISO8859-1:通常叫做Latin-1。Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符,英文浏览器的默认值是ISO-8859-1.
· gb2312:标准简体中文字符集;
· utf-8:UNICODE 的一种变长字符编码,可以解决多种语言文本显示问题,从而实现应用国际化和本地化。
如果在请求消息中没有设置这个域,缺省是任何字符集都可以接受。
GB2312 <GBK < GB18030
11.Cookie (Cookie)--重要
Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能,以后会详细讲。
12.Content-Type (POST数据类型)
Content-Type:POST请求里用来表示的内容类型。
举例:Content-Type = Text/XML; charset=gb2312:
指明该请求的消息体中包含的是纯文本的XML类型的数据,字符编码采用“gb2312”。
内容类型:http://tool.oschina.net/commons
response 请求头
1.Cache-Control:must-revalidate,no-cache, private
这个值告诉客户端,服务端不希望客户端缓存资源,在下次请求资源时,必须要从新请求服务器,不能从缓存副本中获取资源。
Cache-Control是响应头中很重要的信息,当客户端请求头中包含Cache-Control:max-age=0请求,明确表示不会缓存服务器资源时,Cache-Control作为作为回应信息,通常会返回no-cache,意思就是说,"那就不缓存呗"。
当客户端在请求头中没有包含Cache-Control时,服务端往往会定,不同的资源不同的缓存策略,比如说oschina在缓存图片资源的策略就是Cache-Control:max-age=86400,这个意思是,从当前时间开始,在86400秒的时间内,客户端可以直接从缓存副本中读取资源,而不需要向服务器请求。
2.Connection:keep-alive
这个字段作为回应客户端的Connection:keep-alive,告诉客户端服务器的tcp连接也是一个长连接,客户端可以继续使用这个tcp连接发送http请求。
3.Content-Encoding:gzip
告诉客户端,服务端发送的资源是采用gzip编码的,客户端看到这个信息后,应该采用gzip对资源进行解码。
4.Content-Type:text/html;charset=UTF-8
告诉客户端,资源文件的类型,还有字符编码,客户端通过utf-8对资源进行解码,然后对资源进行html解析。通常我们会看到有些网站是乱码的,往往就是服务器端没有返回正确的编码。
5.Date: Tue, 03 Apr 2018 03:52:28 GMT
这个是服务端发送资源时的服务器时间,GMT是格林尼治所在地的标准时间。http协议中发送的时间都是GMT的,这主要是解决在互联网上,不同时区在相互请求资源的时候,时间混乱问题。
6.Expires:Sun, 1 Jan 2000 01:00:00 GMT
这个响应头也是跟缓存有关的,告诉客户端在这个时间前,可以直接访问缓存副本,很显然这个值会存在问题,因为客户端和服务器的时间不一定会都是相同的,如果时间不同就会导致问题。所以这个响应头是没有Cache-Control:max-age=*这个响应头准确的,因为max-age=date中的date是个相对时间,不仅更好理解,也更准确。
7.Pragma:no-cache
这个含义与Cache-Control等同。
8.Server:Tengine/1.4.6
这个是服务器和相对应的版本,只是告诉客户端服务器的信息。
9.Transfer-Encoding:chunked
这个响应头告诉客户端,服务器发送的资源的方式是分块发送的。一般分块发送的资源都是服务器动态生成的,在发送时还不知道发送资源的大小,所以采用分块发送,每一块都是独立的,独立的块都能标示自己的长度,最后一块是0长度的,当客户端读到这个0长度的块时,就可以确定资源已经传输完了。
10.Vary: Accept-Encoding
告诉缓存服务器,缓存压缩文件和非压缩文件两个版本,现在这个字段用处并不大,因为现在的浏览器都是支持压缩的。
常见的http状态码
100 | 客户端可以继续 |
101 | 指示服务器正根据 Upgrade 头切换协议 |
200 | 请求正常成功 |
201 | 指示请求成功并在服务器上创建了一个新资源 |
202 | 指示已接受请求进行处理但处理尚未完成 |
203 | 指示客户端呈现的元信息并不源自服务器 |
204 | 指示请求成功但没有返回新信息 |
205 | 指示代理应该 重置导致请求被发送的文档视图 |
206 | 指示服务器已完成对资源的部分 GET 请求 |
300 | 请求的资源对应于表示形式集合中的某种表示形式,每种表示形式都有自己的特定位置 |
301 | 指示已经将资源永久地移动到了某个新位置,并且将来的引用应将新 URI 用于其请求 |
302 | 指示已经将资源暂时地移动到了另一个位置,但将来的引用仍应使用原来的 URI 访问该资源。 保留此定义是为了向后兼容。SC_FOUND 现在是首选定义 |
303 | 指示可在另一个 URI 之下找到该请求的响应 |
304 | 指示条件 GET 操作发现资源可用但不可修改 |
305 | 指示必须 通过 Location 字段给定的代理访问请求资源 |
307 | 指示请求的资源暂时驻留在另一个 URI 之下。临时 URI 应该 通过响应中的 Location 字段提供 |
400 | 指示客户端发送的请求在语法上不正确 |
401 | 指示请求需要进行 HTTP 验证 |
402 | 保留此代码以备将来使用 |
403 | 指示服务器理解请求但拒绝完成它 |
404 | 指示请求的资源不可用 |
405 | 指示 Request-Line 中指定的方法不支持 Request-URI 标识的资源 |
406 | 指示请求标识的资源只能生成响应实体,根据请求中发送的 accept 头,这些响应实体具有不可接受的内容特征 |
407 | 指示客户端必须 首先通过代理验证其自身 |
408 | 指示客户端没有在服务器准备等待的时间内生成请求 |
409 | 指示由于与当前资源状态冲突请求无法完成 |
410 | 指示资源在服务器上不再可用并且不知道转发地址。应该 认为此条件是永久性的 |
411 | 指示在没有定义 Content-Length 的情况下无法处理请求 |
412 | 指示在服务器上测试一个或多个请求头字段中给出的前提时,该前提被求值为 false |
413 | 指示因为请求实体大于服务器愿意或能够处理的实体,所以服务器拒绝处理请求 |
414 | 指示因为 Request-URI 的长度大于服务器愿意解释的 Request-URI 长度,所以服务器拒绝为请求提供服务 |
415 | 指示因为请求实体的格式不受请求方法的请求资源支持,所以服务器拒绝为请求提供服务 |
416 | 指示服务器无法服务于请求的字节范围 |
417 | 指示服务器无法服务于请求的字节范围 |
500 | 指示 HTTP 服务器内存在错误使服务器无法完成请求 |
501 | 指示 HTTP 服务器不支持完成请求所需的功能 |
502 | 指示 HTTP 服务器在充当代理或网关时从它参考的服务器接收到一个无效响应 |
503 | 指示 HTTP 服务器暂时过载,并且无法处理请求 |
504 | 指示服务器在充当网关或代理时没有从上游服务器接收到及时的响应 |
505 | 指示服务器不支持或拒绝支持请求消息中使用的 HTTP 协议版本 |