首页 > javaWeb -- HTTP协议

javaWeb -- HTTP协议

笔记摘要:

作为web开发的前奏,这里介绍了什么是HTTP协议,HTTP请求与HTTP响应信息的介绍



一、什么是HTTP协议

客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。

HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。

HTTP协议是学习JavaWEB开发的基石,不深入了解HTTP协议,就不能说掌握了WEB开发,更无法管理和维护一些复杂的WEB站点。



二、HTTP协议简介

HTTP使用请求-响应的方式进行传输,一个请求对应一个响应,并且请求只能是由客户端发起的。

HTTP协议的版本:HTTP/1.0、HTTP/1.1

在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。

HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。





三、HTTP请求



客户端连上服务器后,向服务器请求某个web资源,称之为客户端向服务器发送了一个HTTP请求。一个完整的HTTP请求包括如下内容:

一个请求行、若干请求头、以及实体内容,如下所示 :

HTTP请求行

(1)请求行:GET /books/java.html HTTP/1.1(请求方式  请求资源   所用协议)

(2)请求方式:GET、POST,默认情况下浏览器都是get方式的请求,只用表单的method设置为POST才是post请求

请求方式详细介绍

请求行中的GET称之为请求方式,请求方式有:

     POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT

常用的有: GET、 POST



用户如没有设置,默认情况下浏览器向服务器发送的都是GET请求,例如在浏览器直接输地址访问,点超链接访问等都是GET,用户如想把请求方式改为POST,可通过更改表单的提交方式实现。



不管POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表现在数据传递上:



如请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,

例如:GET /mail/1.html?name=abc&password=xyz HTTP/1.1



Getpost方式的区别:

Get:会将提交的数据显示在地址栏上。

Post:不会将数据显示在地址栏上



Get:提交数据的体积受地址栏的限制。

Post:可以提交大体积的数据

Get:对于敏感信息不安全。

Post:对于敏感信息安全

Get:会将提交信息封装在请求行,也就是http消息头之前

Post:会将提交信息封装在数据体中,也就是http消息头之后的空行后

对于服务端而言:

表单提交尽量用post,因为涉及到编码问题,因为tomcat服务端默认的解码是ISO8859-1

对于post提交的中文,在服务端可以直接使用setCharacterEncoding”gbk”)就可以解决

对于get提交的中文,在服务端只能通过IOS8859-1将数据解码一次,再通过指定的码表GBK解码



HTTP请求的细节——常见请求头

Accept: text/html,image/*    可以接受的数据格式

Accept-Charset: ISO-8859-1可以接受的字符集编码

Accept-Encoding: gzip,compress可以接受的压缩格式

Accept-Language: en-us,zh-cn 浏览器的语言环境

Host: www.it315.org:80所要访问的虚拟主机名

If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT   配合Last-Modified判断资源是否更新过

Referer: http://www.it315.org/index.jsp 表示当前请求来自哪个页面,防盗链用。

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) 浏览器所在环境信息

Cookie

Connection: close/Keep-Alive   是否保持连接

Date: Tue, 11 Jul 2000 18:23:51 GMT日期时间



五、HTTP响应

HTTP响应分为:状态行、若干响应头、一个空行、实体内容

一个HTTP响应代表服务器向客户端回送的数据,它包括:

一个状态行、若干响应头(消息头)、以及实体内容 





HTTP响应的细节——状态行



状态码用于表示服务器对请求的处理结果,它是一个三位的十进制数。响应状态码分为5类,如下所示:



1)状态行

格式: HTTP版本号 状态码 原因叙述

举例:HTTP/1.1 200 OK

HTTP/1.1 200 OK (需用协议版本 状态码 原因描述)

常用状态码

200 成功

302 请求重定向,配合Location头使用

304、307 使用缓存资源

404 请求资源未找到

500 服务器端错误

(2)常用响应头

Location: http://www.it315.org/index.jsp  配合302使用,重定向的地址

Server:apache tomcat服务器信息

Content-Encoding: gzip 传输数据所用的压缩格式

Content-Length: 80 数据长度

Content-Language: zh-cn 语言环境

Content-Type: text/html; charset=GB2312 传输数据的类型

Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT配合If-Modified-Since使用判断资源是否更新过

Refresh: 1;url=http://www.it315.org定时刷新,第一个参数表示隔多长时间刷新,第二个参数表明刷新到哪个URL,如果没有第二个参数就刷新当前页面

Content-Disposition: attachment;filename=aaa.zip下载相关头

Transfer-Encoding: chunked  传输数据的方式

Set-Cookie:SS=Q0=5Lb_nQ; path=/search

ETag: W/"83794-1208174400000"配合If-None-Match使用判断资源是否有过修改

Expires: -1 设置缓存时间,可以被设置为一个时间值,指定资源缓存到何时,如果设置为0或-1,则不缓存

Cache-Control: no-cache  设置不缓存

Pragma: no-cache   设置不缓存

* 以上三个头都是用来控制缓存的,是由于历史原因导致不同浏览器使用不同头,我们一般同时使用这三个。

Connection: close/Keep-Alive   是否保持连接

Date: Tue, 11 Jul 2000 18:23:51 GMT 日期时间



转载于:https://www.cnblogs.com/xushuai123/archive/2013/03/17/2978018.html

更多相关:

  • 限流器是后台服务中十分重要的组件,在实际的业务场景中使用居多,其设计在微服务、网关、和一些后台服务中会经常遇到。限流器的作用是用来限制其请求的速率,保护后台响应服务,以免服务过载导致服务不可用现象出现。限流器的实现方法有很多种,例如 Token Bucket、滑动窗口法、Leaky Bucket等。在 Golang 库中官方给我们提供...

  • HTTP和HTTPSHTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法。HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)简单讲是HTTP的安全版,在HTTP下加入SSL层。SSL(Secure...

  •     注意!!!(修改于2020年7月18日)   在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据 报错截图如下 报错内容: {"message": "Network Error","name": "Error","stack": "Err...

  • 一.  GET_POST与开发者工具 1.      浏览器的基本工作规则 浏览器请求访问服务器,服务器返回数据 (1)    请求的格式 GET:长度不能大于2k参数明文显示在地址栏,不保密,通常用在查询请求 POST:长度可以很大,参数写在请求体内,相对保密,通常用是提交内容的请求 上图中a.com是域名,x...

  • JSP相当于在HTML页面中加上Java代码,一般在标签中放入主要代码。 在JSP里用<%...%>把Java代码包含起来的。   Servlet的生命周期: ①被服务器实例化后,容器运行init方法。 ②当请求(Request)到达时,运行service方法,service方法会运行与请求对应的doXXX方法(d...

  • ng g s services/http  app.module.ts ... @NgModule({declarations: [...],imports: [...HttpClientModule,//这个很重紧要,没有就会报错],providers: [],bootstrap: [AppComponent] }) expor...

  • set-misc-nginx-module模块是标准的HttpRewriteModule指令的扩展,提供更多的功能,如URI转义与非转义、JSON引述、Hexadecimal/MD5/SHA1/Base32/Base64编码与解码、随机数等等。在后面的应用中,都将会接触使用到这个模块的。该模块是由章亦春先生开发的,他开发的其他模块应用...

  • 该源码包是MySQL-python-1.2.4b4.tar.gz 从2013-06-28以来一直没有更新,注意该网站可以区分访问的终端类型是Windows还是Linux之类的,从而返回的源码包格式不一样。 在CentOS上的安装方法是 http://www.cnblogs.com/jackluo/p/3559978.html...

  • ATS默认提供了对Referer头的http request的防盗链功能,主要应用于图片,对视频等会使用级别更高的防盗链功能,比如事先约定好key,采用md5或HMAC-Sha1算法加密等。 在remap.config中按如下格式设置: map_with_referer client-URL origin-server-URL re...

  • 测试大文件下载 curl -I "http://resource.tsk.erya100.com/TS/flv/TS180/5836/9.flv?t=1430796561727" 单条转发模式in per remap mode 在remap.config中添加一条 map http://resource.tsk.e...

  • 滑块式验证码用户通过拖动滑块行为来完成校验,支持PC端及移动端。可以将用户拖动行为的时间、精度,滑动轨迹等信息到服务器,然后进行后台算法验证。特别介绍Blazor 版本的滑块验证码 传送门在线演示效果图快速开始组件依赖 font-awesomeCSS将引入样式表的 标签复制并粘贴到 中,并放在所有其他样式表之前。JS将引入脚本的 用...

  • Ktor 是一个使用 Kotlin 以最小的成本快速创建 Web 应用程序的框架。Ktor 是一个用于在连接系统(connected systems)中构建异步服务器和客户端的 Kotlin 框架。它由 Kotlin 团队创建,因此,它充分利用了 Kotlin 的语言特性,为开发者提供出色的体验和运行时性能。import io.kto...

  • l VDI (Virtual Desktop Infrastructure)VDI构架采用的“集中存储、集中运算”构架,所有的桌面以虚拟机的方式运行在服务器硬件的虚拟化层上,桌面以图像传输的方式发送到客户端。l IDV (Intelligent Desktop Virtualization) 由于VDI方案对服务器资源、网络带宽要求比...

  • 受昨晚闰秒问题影响,今天内网和线上的ATS服务器都出现了CPU负载增高的问题,参见下面的截图 下面是tsar监控到负载异常记录,从今天(20150701)早上8:05分开始: 我们内网和线上的服务器Linux kernel内核版本都是 经过实践摸索,发现如下规律: 1.如果已经开启ntpd,如果昨晚没有关闭n...

  • 下面的安装假定是以root用户身份进行的,Linux服务器已经安装好系统,磁盘已经做好分区。 首先需要认识我们的Linux服务器的硬件配置和软件情况 硬件配置: DELL R720 2U服务器 CPU  8核 Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz 内存 32G 硬盘  系统盘 /...