原文链接: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. JQuery学习(表单对象属性)---checked

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  2. 从DB灌值到DataTable时,字段值为NULL时报错相关信息;

    报错信息: 1.  2.  3.  4.  5.  6.  解决方法: 1. Data Layer SQL 语句取数据时,把其列值有为null的字段用0.00替换,(ISNULL的用法): 2. #r ...

  3. 从分析SQLSERVER ERRORLOG查找错误折射出的工作效率问题

    从分析SQLSERVER ERRORLOG查找错误折射出的工作效率问题 前几天,在备份某一台服务器上的某一个库的时候遇到问题,数据库80G+,在完整备份的时候,SQLSERVER报错 消息 ,级别 , ...

  4. JS DOM操作

    一.DOM基础 1.节点(node)层次 Document--最顶层的节点,所有的其他节点都是附属于它的. DocumentType--DTD引用(使用<!DOCTYPE>语法)的对象表现 ...

  5. Android中px和dip的区别

    在Android手机的诞生之初,由于Android系统是开源的,一开始便有众多的OEM厂商对Android手机进行深度定制,于是乎Android手机的皮肤和屏幕大小都变得百花齐放,这可苦逼了我们这群开 ...

  6. Server Develop (九) Simple Web Server

    Simple Web Server web服务器hello world!-----简单的socket通信实现. HTTP HTTP是Web浏览器与Web服务器之间通信的标准协议,HTTP指明了客户端如 ...

  7. EditPlus不能着色显示SQl语句的问题

    说明:今天重装了系统后,从网上安装下载了一个EditPlus阅读代码,发现sql语句是灰色的,不和以前的带有颜色的看着美观了,顿时心里别扭了起来.以为下错了版本,可是换了好几个,都是这样,网上查了一下 ...

  8. 【原】关于使用jieba分词+PyInstaller进行打包时出现的一些问题的解决方法

    错误现象: 最近在做一个小项目,在Python中使用了jieba分词,感觉非常简洁方便.在Python端进行调试的时候没有任何问题,使用PyInstaller打包成exe文件后,就会报错: 错误原因分 ...

  9. paip.hql的调试故障排查流程总结

    paip.hql的调试故障排查流程总结 环境.myeclipse7.0 1 Hql的调试工具myeclipxe默认工具.../Hibernate8IDE 1 故障的排除方法overview 1 Hql ...

  10. js脚本语言基础和数组

    js和PHP中,字符串赋值:要使用"双引号"或"单引号"引起来:例如:var c="你好"不同类型进行数学运算,要转换,类型转换:强制转换p ...