原文链接:http://www.java3z.com/cwbwebhome/article/article2/2406.html

目录

一、连接至Web服务器
二、发送HTTP请求
三、服务端接受请求并返回HTTP响应
四、服务器关闭连接,浏览器解析响应
五、无状态连接
六、实例
(附录)
HTTP参考

一、连接至Web

 一个客户端应用(如Web浏览器)打开到Web服务器的HTTP端口的一个套接字(缺省为80)。     
例如:http://www.myweb.com:8080/index.html
在Java中,这将等同于代码:
Soceet socket=new Socket("www.myweb.com",8080); 
InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();

二、发送HTTP请求

通过连接,客户端写一个ASCII文本请求行,后跟0或多个HTTP头标,一个空行和实现请求的任意数据。 一个请求由四个部分组成:请求行、请求头标、空行和请求数据

1.请求行:

请求行由三个标记组成:请求方法、请求URI和HTTP版本,它们用空格分隔。
例如:GET /index.html HTTP/1.1

HTTP规范定义了8种可能的请求方法:

GET                检索URI中标识资源的一个简单请求

HEAD              与GET方法相同,服务器只返回状态行和头标,并不返回请求文档

POST              服务器接受被写入客户端输出流中的数据的请求

PUT                服务器保存请求数据作为指定URI新内容的请求

DELETE          服务器删除URI中命名的资源的请求

OPTIONS         关于服务器支持的请求方法信息的请求

TRACE            Web服务器反馈Http请求和其头标的请求

CONNECT        已文档化但当前未实现的一个方法,预留做隧道处理

2.请求头标:

由关键字/值对组成,每行一对,关键字和值用冒号(:)分隔。 请求头标通知服务器有关于客户端的功能和标识,典型的请求头标有:

User-Agent          客户端厂家和版本

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

Content-Length    附加到请求的数据字节数

3.空行:

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

4.请求数据:

使用POST传送数据,最常使用的是Content-Type和Content-Length头标。



三、服务端接受请求并返回HTTP响应

Web服务器解析请求,定位指定资源。服务器将资源副本写至套接字,在此处由客户端读取。

一个响应由四个部分组成;状态行、响应头标、空行、响应数据

1.状态行:

状态行由三个标记组成:HTTP版本、响应代码和响应描述。

HTTP版本:向客户端指明其可理解的最高版本。
响应代码:3位的数字代码,指出请求的成功或失败,如果失败则指出原因。
响应描述:为响应代码的可读性解释。
例如:HTTP/1.1 200 OK
HTTP响应码: 
1xx:信息,请求收到,继续处理
2xx:成功,行为被成功地接受、理解和采纳
3xx:重定向,为了完成请求,必须进一步执行的动作
4xx:客户端错误:

2.响应头标:

像请求头标一样,它们指出服务器的功能,标识出响应数据的细节。

3.空行:

最后一个响应头标之后是一个空行,发送回车符和退行,表明服务器以下不再有头标。

4.响应数据:

HTML文档和图像等,也就是HTML本身。

四、服务器关闭连接,浏览器解析响应

1.浏览器首先解析状态行,查看表明请求是否成功的状态代码。

2.然后解析每一个响应头标,头标告知以下为若干字节的HTML。

3.读取响应数据HTML,根据HTML的语法和语义对其进行格式化,并在浏览器窗口中显示它。

4.一个HTML文档可能包含其它需要被载入的资源引用,浏览器识别这些引用,对其它的资源再进行额外的请求,此过程循环多次。

五、无状态连接

HTTP模型是无状态的,表明在处理一个请求时,Web服务器并不记住来自同一客户端的请求。

六、实例

实例1:

浏览器发出请求

GET /index.html HTTP/1.1

服务器返回响应:

HTTP /1.1 200 OK

Date: Apr 11 2006 15:32:08 GMT

Server: Apache/2.0.46(win32)

Content-Length: 119

Content-Type: text/html

<HTML>

<HEAD>

<LINK REL="stylesheet" HREF="index.css">

</HEAD>

<BODY>

<IMG SRC="image/logo.png">

</BODY>

</HTML>

(附录)

1.HTTP规范:

Internet工程制定组织(IETF)发布的RFC指定Internet标准,这些RFC被Internet研究发展机构广泛接受。因为它们是标准文档,故一般用正规语言编写,如立法文标一样。

2.RFC:

RFC一旦被提出,就被编号且不会再改变,当一个标准被修改时,则给出一个新的RFC。作为标准,RFC在Internet上被广泛采用。

3.HTTP的几个重要RFC:

RFC1945    HTTP 1.0 描述

RFC2068    HTTP 1.1 初步描述

RFC2616    HTTP 1.1 标准

4.资源标识符URI(Uniform Resource Identifter,URI)

HTTP参考

一、HTTP码应码

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

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

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

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

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

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

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

二、HTTP头标

头标由主键/值对组成。它们描述客户端或者服务器的属性、被传输的资源以及应该实现连接。

四种不同类型的头标:

1.通用头标:即可用于请求,也可用于响应,是作为一个整体而不是特定资源与事务相关联。

2.请求头标:允许客户端传递关于自身的信息和希望的响应形式。

3.响应头标:服务器和于传递自身信息的响应。

4.实体头标:定义被传送资源的信息。即可用于请求,也可用于响应。

头标格式:

<name>:<value><CRLF>

下表描述在HTTP/1.1中用到的头标 (删减)

Accept

定义客户端可以处理的媒体类型,按优先级排序;

在一个以逗号为分隔的列表中,可以定义多种类型和使用通配符。例如:Accept: image/jpeg,image/png,*/*

Accept-Charset

定义客户端可以处理的字符集,按优先级排序;

在一个以逗号为分隔的列表中,可以定义多种类型和使用通配符。例如:Accept-Charset: iso-8859-1,*,utf-8

Accept-Encoding     定义客户端可以理解的编码机制。例如:Accept-Encoding:gzip,compress

Accept-Language    定义客户端乐于接受的自然语言列表。例如:Accept-Language: en,de

Accept-Ranges

一个响应头标,它允许服务器指明:将在给定的偏移和长度处,为资源组成部分的接受请求。

该头标的值被理解为请求范围的度量单位。例如Accept-Ranges: bytes或Accept-Ranges: nonea

Age

允许服务器规定自服务器生成该响应以来所经过的时间长度,以秒为单位。

该头标主要用于缓存响应。例如:Age: 30

Contern-Type        标明发送或者接收的实体的MIME类型。例如:Content-Type: text/html

Server            一种标明Web服务器软件及其版本号的头标。例如:Server: Apache/2.0.46(Win32)

User-Agent

定义用于产生请求的软件类型(典型的如Web浏览器)。

例如:User-Agent: Mozilla/4.0(compatible; MSIE 5.5; Windows NT; DigExt)

 

[转]HTTP请求模型和头信息的更多相关文章

  1. [转]HTTP请求模型和头信息参考

    [转]HTTP请求模型和头信息参考 参考: http://blog.csdn.net/baggio785/archive/2006/04/13/661410.aspx模型: http://blog.c ...

  2. HTTP请求模型和头信息参考

    发送HTTP请求:一个请求由四个部分组成:请求行.请求头标.空行和请求数据 请求行 请求行由三个标记组成:请求方法.请求URI和HTTP版本,它们用空格分隔.例如:GET /index.html HT ...

  3. curl get请求添加header头信息

    function get($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPGET, true); curl_setopt($ch, CU ...

  4. curl/wget 测试http请求的响应头信息

    1. wget –debug wget可以使用debug信息来查看信息头,如下: [root@localhost ~]# wget --debug http://192.168.1.101:8080/ ...

  5. nginx反向代理导致请求header头信息丢失

    背景:前端与后端调试接口,后端拿不到前段发过去的请求头信息,导致接口不通.(但是在本地是可以拿到的) 原因:nginx做了反向代理,没有请求时候加头信息的配置 报错如下: 解决方法: 方法一:NGIN ...

  6. php设置http请求头信息和响应头信息

    php设置http请求头信息和响应头信息 设置请求服务器的头信息可以用fsockopen,curl组件,header函数只能用来设置客户端响应的头信息,不能设置服务器的头信息. 例子;  一.head ...

  7. js获取response头信息

    当我们使用ajax发起请求时,经常需要获取请求返回的头信息.默认情况下,js货可以获取如下头信息: Cache-Control Content-Language Content-Type Expirs ...

  8. ajax--->http头信息的content-type是application/x-www-form-urlencoded或application/json区别

    ajax请求时http头信息的content-type是application/x-www-form-urlencoded或application/json区别 content-type请求头是干嘛的 ...

  9. js获取HTTP的请求头信息

    以下为js获取HTTP的全部请求头信息: var req = new XMLHttpRequest(); req.open('GET', document.location, false); req. ...

随机推荐

  1. ASP.NET MVC学习之视图篇(2)

    继ASP.NET MVC学习之视图(1)学习 4.HTML辅助器 虽然在ASP.NET MVC中我们已经摆脱了ASP.NET的控件,但是对于页面中需要循环标签的情况依然还是存在,可能很多人认为用for ...

  2. 【ASP.NET Web API教程】6.3 内容协商

    本文是Web API系列教程的第6.3小节 6.3 Content Negotiation 6.3 内容协商 摘自:http://www.asp.net/web-api/overview/format ...

  3. requests发送HTTP请求

    requests库是一个流行的用于发送Http请求的Python第三方库, 其设计简洁高效可以完美替代默认的urllib. 使用pip安装requests: pip install requests ...

  4. 微软BI 之SSRS 系列 - 巧用 RunningValue 函数在分组中排序并设置 RANK 排名

    开篇介绍 经常有像类似于这样的排序需求,以及设置分组下的排序序号.比如此图中要求城市 City 在省份下按照 Internet Sales Amount 总销售额进行排序,并标识在各省份下的排名. 实 ...

  5. 作业七:团队项目——Alpha版本冲刺阶段-01

    昨天进展:准备开发环境,安装软件. 今天安排:软件框架设计. 小组一共三人,陈芝航因家里有事,与我们进行了QQ视屏会议.

  6. VS2010 调试不会命中当前断点

    方法1.直接把整个文件格式化了一次,断点就可以用了Ctrl + A全选菜单:编辑-〉高级-〉设置选定内容的格式 (Ctrl+K, Ctrl+F)通过比较文件发现是由于制表符Tab(0x09)引起的,原 ...

  7. 拒绝低调,国内首家推出微软WP8.1移动开发全套免费课程

    活动类型:公开课 开始时间:2014-10-20 20:00 活动地点:YY频道:85155393 课程简介:学习本次公开课你将收获和体会到:      Windwos Phone8.1的推出正是微软 ...

  8. jenkins2 插件安装

    文章来自:http://www.ciandcd.com 文中的代码来自可以从github下载: https://github.com/ciandcd Jenkins的安装包和插件在7个国家有20多个镜 ...

  9. mysql where执行顺序

    where执行顺序是从左往右执行的,在数据量小的时候不用考虑,但数据量多的时候要考虑条件的先后顺序,此时应遵守一个原则:排除越多的条件放在第一个. 在用MySQL查询数据库的时候,连接了很多个过滤条件 ...

  10. 通过swap代码分析C语言指针在汇编级别的实现

    我们先用C语言写一个交换两个数的代码: void swap(int *a, int *b){ int temp = *a; *a = *b; *b = temp; } int main(void) { ...