http协议

2021-04-10  本文已影响0人  灏玮

HTTP简介

主要特点

HTTP之URL

HTTP使用统一资源表示符(Uniform Resource Identifiers,URI)来传输数据和建立连接。URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息
URL,全称是UniformResourceLocator,中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。以下面这个URL为例,介绍下普通URL的各部分组成:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

从上面的URL可以看出,一个完整的URL包括以下及部分:

URI和URL的区别

URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
WEB上可用的美中资源如HTML文档、图像、视频片段、程序等都是一个URL来定位的
URI一般由三部分组成:

URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部分组成:

URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如maito:java-net@java.sun.com
URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。笼统地说,每个URL都是URI,但不一定每个URI都是URL。这事因为URI还包括一个子类,即统一资源名称(URN),它命名资源但不制定如何定位资源。上面的mailto、news和isbn URI都是URN的示例。

在java的URI中,一个URI示例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而uRL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的。
在java类库中,URI类不包含任何访问资源的方法,它唯一的作用就是解析。
相反的,URL类可以打开一个到达资源的流。

HTTP特性:

HTTP报文:

HTTP请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法:GET,POST和HEAD方法
HTTP1.1新增了五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法

请求报文

四部分:状态行、请求头、空行、消息主体

1. GET用于信息获取,而且应该是安全的和幂等的
2. POST表示可能修改服务器上的资源的请求
3. 注意:
* GET可提交的数据量受到URL长度的限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制
* 理论上讲,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,处于安全考虑,服务器软件在实现时会做一定限制
* GET和POST数据内容一摸一样,知识位置不同,一个在URL里,一个在HTTP包的包体里

响应报文

四部分:状态行,消息报头,空行,响应正文

状态行由协议版本、数字形式的状态代码、及响应的状态描述,各元素之间以空格分隔。
常见的状态码有如下几种:

HTTP工作原理

HTTP协议定义WEB客户端如何从WEB服务器请求WEB页面,以及服务器如何把WEB页面传送给客户端。HTTP协议采用了请求/响应模型。客户端想服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行为作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
以下是HTTP请求/响应的步骤:

1. 客户端链接到WEB服务器
一个HTTP客户端,通常是浏览器,与WEB服务器的HTTP端口(默认为80)建立一个TCP套接字链接
2. 发送HTTP请求
通过TCP套接字,客户端想WEB服务器发送一个文本的请求报文,一个请求报文由请求请求行、请求头部、空行和请求数据4部分组成。
3. 服务器接受请求并返回HTTP响应
WEB服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4. 释放链接TCP连接
若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求
5. 客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法进行格式化,并在浏览器窗口中显示。

例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:
1. 浏览器向DNS服务器请求解析该URL中的域名所对应的IP地址
2. 解析出IP地址后,根据该IP地址和默认端口80,和服务器建立TCP连接
3. 浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求包围作为TCP三次握手的第三个报文的数据发送给服务器
4. 服务器对浏览器请求做出响应,并把对应的html文本发送给浏览器
5. 释放TCP连接
6. 浏览器将该html文本解析并显示内容

GET和POST请求的区别

1. get:请求参数是作为一个key/value对的序列(查询字符串)附加到URL上的
查询字符串的长度收到web浏览器和web服务器的限制,不适合传输大型数据集,同时它很不安全
2. post:请求参数是在http标题的一个不同部分(名为 entity body——传输的,这一部分用来传输表单信息,因此必须进行Content-type设置。post设计用来支持web窗体上的用户字段,其参数也是作为key/value对传输。但是,它不支持复杂数据类型,因为post没有定义传输数据结构的语义和规则
3. soap:是http post的一个专用版本,遵循一种特殊的xml消息格式
Content-type设置为:text/xml 任意数据都可以xml化
http协议定义了很多与服务器交互的方法,最基本的有4中,分别是GET、POST、PUT、DELETE。

GET和POST的区别:

跨站攻击

CSRF(Cross-site request forgery,跨站请求伪造)
如何防范CSRF攻击:

XSS(Cross Site Scripting,跨站脚本攻击)
如何防御XSS攻击:

上一篇 下一篇

猜你喜欢

热点阅读