文档章节

HTTP 协议格式 和 HTTP Header

满小茂
 满小茂
发布于 2015/12/22 17:01
字数 1433
阅读 4587
收藏 168

HTTP请求数据:

HTTP 请求报文由请求行、请求头部、空行 和 请求包体 4 个部分组成

HTTP请求信息由3部分组成:   

    ① 请求方法 URI 协议/版本

    ② 请求头(Request Header)

    ③     请求正文

   HTTP 请求 数据 例子举例:

 

GET/sample.Jsp HTTP/1.1
Accept:image/gif.image/jpeg,*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate
 
username=jinqiao&password=1234


(1)请求方法URI协议/版本

  请求的第一行是“方法URL协议版本”:

GET/sample.jsp HTTP/1.1

 以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。

  根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、 PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。

 URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本 声明了通信过程中使用HTTP的版本。

(2)请求头(Request Header)

请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。

Accept:image/gif.image/jpeg.*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
Accept-Encoding:gzip,deflate.


(3)请求正文

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提 交的查询字符串信息:

username=jinqiao&password=1234

Http请求方法:

GET      请求获取由Request-URI所标识的资源。

POST Request-URI所标识的资源后附加新的数据。

HEAD 请求获取由Request-URI所标识的资源的响应消息报头。

OPTIONS 请求查询服务器的性能,或查询与资源相关的选项和需求。

PUT 请求服务器存储一个资源,并用Request-URI作为其标识。

DELETE 请求服务器删除由Request-URI所标识的资源。

TRACE 请求服务器回送收到的请求信息,主要用语测试或诊断。


HTTP响应数据:

Response Headers

响应头 

  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:

    Sun, 21 Sep 2014 06:18:21 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

    告诉缓存服务器,缓存压缩文件和非压缩文件两个版本,现在这个字段用处并不大,因为现在的浏览器都是支持压缩的。

   

© 著作权归作者所有

共有 人打赏支持
满小茂
粉丝 65
博文 117
码字总数 126840
作品 0
成都
程序员
加载中

评论(2)

满小茂
满小茂

引用来自“YangMiao”的评论

这个图里面,响应包体前面的“空行(回车符 或 换行符)”是不是不对啊,我记得应该是跟上面的一样,必须是“回车 + 换行”。
恩,对,准确的说是 回车+换行,先回到段首,再换行
YangMiao
YangMiao
这个图里面,响应包体前面的“空行(回车符 或 换行符)”是不是不对啊,我记得应该是跟上面的一样,必须是“回车 + 换行”。
动手做webserver的核心之http解析

简介 webserver往小里说核心功能就是socket管理、url处理、http协议处理、业务dll管理等;下面简介绍一下http协议:超文本传输协议(HTTP)是一种通信协议,当时就是为web传输设计的一个基于t...

yswenli
07/17
0
0
“服务器提交了协议冲突.Section=ResponseHeader Detail=CR 后面必须是LF”的一些疑问

程序要下载“http://www.infzm.com/voice”这个页面的时候执行到图1-1红框那段代码的时候 提示:服务器提交了协议冲突.Section=ResponseHeader Detail=CR 后面必须是LF 图1-1 如果你的是C#编...

EricWe
2013/05/02
0
0
PHP中header()函数详细使用说明

一、作用: ~ PHP只是以HTTP协议将HTML文档的标头送到浏览器,告诉浏览器具体怎么处理这个页面,至于传送的内容则需要熟悉一下HTTP协议了,与PHP无关了,可参照http://www.w3.org/Protocols...

小姚
2012/05/20
0
0
从日常开发说起,浅谈HTTP协议是做什么的。

引言      HTTP协议作为Web开发的基础一直被大多数人所熟知,不过相信有很多人只知其一不知其二。比如咱们经常用到的session会话机制是如何实现的,可能很多人都说不出来吧。其实session...

zuoxiaolong8810
2017/03/23
0
0
header函数使用

void header ( string $string [, bool $replace = true [, int $http_response_code ]] ) ----- 用于向客户端发送原生的 HTTP 报头, 注意 header() 必须在任何实际输出之前调用,不管是普通...

ITCHN
2016/11/24
19
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

kernel version does not match DSO version

错误信息: kernel version 384.11 does not match DSO version 384.130.0 原因是: cuda driver版本太低,不匹配DSO 简单有效的修复方法,升级nvidia driver, 步骤如下: 1. google seach ...

刘小米
今天
0
0
maven坐标和依赖

一、maven坐标详解 <groupId>com.fgt.club</groupId><artifactId>club-common-service-facade</artifactId><version>3.0.0</version><packaging>jar</packaging> maven的坐标元素说......

老韭菜
今天
1
0
springmvc-servlet.xml配置表功能解释

问:<?xml version="1.0" encoding="UTF-8" ?> 答: xml version="1.0"表示是此xml文件的版本是1.0 encoding="UTF-8"表示此文件的编码方式是UTF-8 问:<!DOCTYPE beans PUBLIC "-//SPRING//......

隐士族隐逸
今天
1
0
基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
今天
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部