当前位置: 首页 > 编程日记 > 正文

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版本号 状态码 原因叙述<CRLF>

举例: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

相关文章:

Python培训:Python有哪些函数?你了解几种?

本期小编要为大家带来的Python教程就是关于Python函数这方面的&#xff0c;我们都知道Python函数&#xff0c;一般是指组织好的、可重复使用的、用来实现单一或相关联功能的代码段&#xff0c;Python函数包含系统中自带的一些函数、第三方函数以及用户自定义的函数。那么Python…

BZOJ2331:[SCOI2011]地板——题解

http://www.lydsy.com/JudgeOnline/problem.php?id2331 题面复制于洛谷 题目描述 lxhgww的小名叫”小L“&#xff0c;这是因为他总是很喜欢L型的东西。小L家的客厅是一个R*C的矩形&#xff0c;现在他想用L型的地板来铺满整个客厅&#xff0c;客厅里有些位置有柱子&#xff0c;…

快速部署RDA Remote Diagnostic Agent

RDA Remote Diagnostic Agent远程诊断代理是Oracle Support售后服务使用的标准工具之一&#xff0c;当用户在Metalink上提交SR(TAR)时可能Oracle GCS(Global Customer Service)支持会需要让用户从MOS上下载RDA工具&#xff0c;通过RDA收集丰富的数据库环境信息(如包含OS、DB、C…

【青少年编程】【三级】计算成绩总和

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

哪些人适合学web前端培训呢

哪些人适合学web前端培训呢?经常会有人问到这个问题&#xff0c;因为互联网对于很多人来说是非常具有诱惑力的&#xff0c;前端便是其中的一种互联网技术&#xff0c;那么针对这个问题&#xff0c;我们来看看下面的详细介绍吧。 哪些人适合学web前端培训呢?首先什么是前端呢?…

ASM丢失disk header导致ORA-15032、ORA-15040、ORA-15042 Diskgroup无法mount

ASM丢失disk header导致ORA-15032、ORA-15040、ORA-15042 Diskgroup无法mount的案例不少&#xff0c;这里我们介绍下如何解决。 SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Databas…

jQuery学习(第一天)

js的回顾 遇到的问题1.window.onload只能使用一个(事件覆盖问题) 2.代码的容错性不强 3.浏览器兼容性问题 4.代码量较多,书写很繁琐 5.代码很乱到处都是 6.动画效果我们很难实现 jQuery的基本使用 image.pngmin&#xff1a;它是压缩过的版本 区别&#xff1a;我们开发过程中&am…

【组队学习】曹志宾:基于Python的会员数据化运营

分享人&#xff1a;曹志宾&#xff0c;Datawhale成员&#xff0c;香港科技大学硕士在读 分享内容&#xff1a; 案例描述与分析前期准备与数据预处理RFM模型使用与操作Excel中的RFM分析 组队学习&#xff1a; 红星&#xff1a;基于Python的会员数据化运营孙健坤&#xff1a;…

为什么要参加java培训?有哪些优势?

很多人都想要通过学习java技术进入到互联网行业&#xff0c;有一部分人是自学&#xff0c;有一部分是报Java培训班学习&#xff0c;报培训班的人比较多&#xff0c;那么为什么要参加java培训?有哪些优势?来看看下面的详细介绍。 为什么要参加java培训?有哪些优势?俗话说&am…

一、javaSE (二十三)多线程

1:多线程(理 (1)多线程:一个应用程序有多条执行路径 进程: 正在执行的应用程序 线程: 进程的执行单元,执行路径 单线程: 一个应用程序只有一条执行路径 多线程: 一个应用程序有多条执行路径 多进程的意义? 提高CpU的使用率 多线程的意义? 提高应用程序的使用案 (2)Java程序的…

【青少年编程】【二级】绘制图形

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

web前端培训分享:面向对象中类和对象的定义是什么?

在学习web前端技术的时候&#xff0c;我们接触的最多的便是面向对象这一块&#xff0c;其实很多编程技术都有用到这个现象&#xff0c;下面我们就为大家详细的介绍一下面向对象中类和对象的定义是什么? web前端培训分享&#xff1a;面向对象中类和对象的定义是什么?面向对象让…

无法嵌入互操作类型...请改用适用的接口 解决办法

http://blog.163.com/quan2006126/blog/static/1702286352010101810324232/背景&#xff1a;visual studio 2010、“添加引用”时出错&#xff1a; “无法嵌入互操作类型...请改用适用的接口” 解决方案&#xff1a; 选中项目中引入的dll&#xff0c; 鼠标右键&#xff0c; 选择…

宁彦吉:如何进行作业的评审?

如何进行作业的评审 由于 我们的组队学习是开放的&#xff0c;大家都可以一起学习&#xff0c;一起来做航海士&#xff0c;宁彦吉 把作业评选的教程总结出来&#xff0c;这样方便后面的航海士熟悉 任成森 开发的系统。 一、登录 1、登录流程 打开浏览器输入作业评审中心地址…

算法 - 时间复杂度

O(1) 常数阶 #include <stdio.h> #include <string.h>int main( ) {int i,sum 0,n 100000000000;sum (1 n) * (n /2);printf("%d",sum);return 0; }执行次数不随n的变化而变化。 O(n) 线性阶 #include <stdio.h> #include <string.h>int …

access百度翻译 get_百度AI攻略:智能上色

1.功能描述&#xff1a;想必大家家里都有很多黑白的老照片&#xff0c;里面有着满满的回忆。百度智能识别黑白图像内容并填充色彩&#xff0c;使黑白图像变得鲜活&#xff0c;让老照片重新焕发活力。说干就干&#xff0c;攻略和代码奉上。2.平台接入黑白图像上色接入网址&#…

sql语句中left join和inner join中的on与where的区别分析

原文:sql语句中left join和inner join中的on与where的区别分析关于SQL SERVER的表联接查询INNER JOIN 、LEFT JOIN和RIGHT JOIN&#xff0c;经常会用到ON和WHERE的条件查询&#xff0c;以前用的时候有时是凭感觉的&#xff0c;总是没有搞清楚&#xff0c;今日亲自测试了下&…

linux 笔记 一

查看apache是否开启pidof httpdps -aux | grep httpdps -ef| grep httpdpgrep httpd开启[停止|重启]/usr/sbin/apachectl start[stop|restart]/etc/init.d/httpd start[stop|restart]service httpd start[stop|restart]开机启动在/etc/rc.d/rc.local中增加启动apache的命令&…

【青少年编程】【三级】躲避恐龙

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100&#xff0c;小马老…

小数加分数怎样计算讲解_2020人教版三年级下册数学知识点汇总带视频讲解,让孩子在学习!...

小学生延期开学&#xff0c;孩子功课不能落下啊&#xff01;帝源教育网课推出1-6年级语文数学英语教材同步讲解视频&#xff0c;让孩子在假期也能提早预习课文知识&#xff01;手机用户访问&#xff1a;m.46344.com 即可观看学习哦&#xff01;随着疫情的蔓延&#xff0c;学校…

JUnit基础及第一个单元测试实例(JUnit3.8)

JUnit基础及第一个单元测试实例&#xff08;JUnit3.8&#xff09; 单元测试 单元测试&#xff08;unit testing&#xff09; &#xff0c;是指对软件中的最小可测试单元进行检查和验证。 单元测试不是为了证明您是对的&#xff0c;而是为了证明您没有错误。 单元测试主要是用来…

Scratch青少年编程能力等级测试模拟题(三级)

青少年编程竞赛交流群已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

Qt 程序在 Windows 下的发布

「博客搬家」 原地址: CSDN 原发表时间: 2016-06-04本文讨论在 Windows 平台下编译成功的 Qt 程序&#xff0c;如何在未配置 Qt 开发环境的 Windows 平台下独立运行的方法。 经过验证发现&#xff0c;在 Ubuntu 平台下编译成功的程序可在未安装 Qt 开发环境下的 Ubuntu16.04 中…

楷书书法规则_硬笔书法入门学习“三步法”,让练字不再难

生活中&#xff0c;常常有人肯于吃苦,坚持经常练习硬笔书法&#xff0c;但却进步不大&#xff0c;收获甚微。因此&#xff0c;凡有志学好硬笔书法的人&#xff0c;必须掌握一些学习硬笔书法的方法。硬笔书法学习的方法可以采用“三步法”。一、规范入门硬笔一般比较短小灵硬&am…

系统异常设计规范与原则

为什么80%的码农都做不了架构师&#xff1f;>>> 1.系统异常设计的出发点&#xff1a; 良好的异常信息展示&#xff0c;开发运维人员能快速定位问题。响应外部调用异常时&#xff0c;应能明确指明是内部异常还是调用条件不满足导至。响应用户操作异常时&#xff0c;…

陈长沙:学习者参考手册

学习者参考手册 组队学习的核心是“和一群有意思的人在一起学感兴趣的知识的过程&#xff0c;这个过程充满了人与人之间的交流互动&#xff0c;是融入社交属性和学习属性的过程”。作为参与组队学习活动的学习者&#xff0c;一定想了解有关该项活动的各种环节。于是&#xff0…

TC配置文件WCMD.INI详解,只能在ini重修改的配置

有*的项目扩展了功能&#xff0c;有★的项目是只能在INI中修改的配置。 ★Allowed 允许访问哪些驱动器&#xff08;\代表网络邻居&#xff09;。例如写为Allowedcde\&#xff0c;代表仅允许访问C、D、E和网络邻居&#xff0c;其余驱动器无法访问&#xff0c;也不会出现在驱动…

mapgis矢量化怎么打分数_mapgis矢量化的详细工作流程

感觉不错就麻烦评下分哦1、准备光栅文件&#xff0c;启动MAPGIS输入编辑子系统&#xff0c;新建工程、新建控制点、界址点、线层等项目文件&#xff0c;建立界址点文件和线层文件的属性结构&#xff1b;2、采集控制点&#xff0c;记录图幅左下角经纬度&#xff0c;保存项目、工…

AutoFac使用方法总结:Part I

utoFac是.net平台下的IOC容器产品&#xff0c;它可以管理类之间的复杂的依赖关系。在使用方面主要是register和resolve两类操作。 这篇文章用单元测试的形式列举了AutoFac的常用使用方法&#xff1a; 注册部分 使用RegisterType进行注册 [Fact]public void can_resolve_myclass…

canvas烟花锦集

canvas可以实现不同动画效果&#xff0c;本文主要记录几种不同节日烟花效果实现。 原文链接 实现一 效果地址 html <canvas id"canvas"></canvas>css body {background: #000;margin: 0; }canvas {cursor: crosshair;display: block; }js // when animat…