http请求相关知识

 

请求

  1. 浏览器首先向服务器发送http请求,请求包括:

方法:get/post,get仅请求资源,post会附带用户数据;

路径:/html/path;

域名:由host头指定:Host:www.sina.com.cn;

其他header;

如果是post,请求还会包括一个body,包含用户数据。

    2、  服务器向浏览器返回HTTP响应,响应包括:

响应代码:200表示成功,3xx表示重定向,4xx表示客户端发送的请求有错误,5xx表示服务端处理时发生了错误;

响应类型:由content-type指定;

其他相关header;

响应内容:有一个body,包含响应的内容,网页的html源码就在body中。

    3、如果浏览器还要继续向服务器请求其他资源,比如图片,就再次发出http请求,重复步骤1和2;

Web采用的http协议采用了非常简单的请求-响应模式,从而大大简化了开发。当我们编写一个页面时,我们只需要在http请求中把html发送出去,不需要考虑如何附带图片、视频等,浏览器如果需要请求图片和视频,它会发送另一个http请求,因此,一个http请求只处理一个资源。

http协议同时具备极强的扩展性,虽然浏览器请求的是http://www.sina.com.cn的首页,但是新浪在html中可以链入其他服务器的资源,比如

<img src="http://i1.sinaimg.cn/home/2015/1008/U8455PxDT20131008135420.png">

从而将请求压力分散到各个服务器上,并且一个站点可以链接到其他站点,无数个站点互相链接起来,就形成了world wide web ,简称www.

http格式

每个http请求和响应都遵循相同的格式,一个http包含header和body两部分,其中body是可选的。

http协议是一种文本协议,所以,它的格式也非常简单。格式如下:

 

Get请求:

GET/test.jsp HTTP/1.1

Accept:image/test.image/jpeg,*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:222.35.232.103

User-Agent:Mozila/5.0(compatible;MSIE5.01;Window NT5.0)

Accept-Encoding:gzip,deflate

username=bingyue&password=bingyue

...

 

body data。。。

Post请求:

Post/test.jsp HTTP/1.1

Accept:image/test.image/jpeg,*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:222.35.232.103

User-Agent:Mozila/5.0(compatible;MSIE5.01;Window NT5.0)

Accept-Encoding:gzip,deflate

username=bingyue&password=bingyue

...

 

body dataHeader2:Value2

...

Body data

 

每个header一行一个,换行符是\r\n,当连续遇到两个换行符时,Header部分结束,后面的数据全部是body。

 

http响应格式示例:

HTTP/1.1 200 OK

Server:Apache Tomcat/7.0.1

Date:Mon,6Oct2014 13:23:42 GMT

Content-Length:102

 

<html>

<head>

<title>HTTP响应文件<title>

</head>

<body>

这是HTTP响应文件!

</body>

</html>

http响应如果包含body,也是通过两个分隔符来分割的。请再次注意:body的数据类型由content-Type头来确定,如果是网页,body就是文本,如果是图片,body就是图片的二级制数据。

当存在content-encoding时,body数据是被压缩的,最常见的压缩方式是gzip,所以,看到content-encoding:gizp时,需要将body数据先解压缩,才能得到真正的数据。压缩的目的在减少body的大小,加快网络传输。

设置压缩方式:response.setHeader("Content-Encoding","gzip"); 

请求压缩方式:Accept-Encoding: gzip, deflate, br

http协议的特点

  1. 基于B/S模式,即客户服务器模式。
  2. 通信开销小,简单快速,传输成本低
  3. 使用灵活:超文本协议,允许服务器和客户端传输任意类型或者任意数据结构的数据对象。
  4. 节省传输时间。
  5. 可能影响传输效率,无状态。
  6. https://www.cnblogs.com/binyue/p/4500578.html

doGet和doPost

1、生成方式

Get有四种:

A、直接在url地址栏中输入url

B、网页中的超链接

C、form中的method为get

D、form中的method为空时,模式是get提交

Post只知道有一种,form中method属性为post

2、数据传送方式

Get方式:表单数据存放在url地址后面,所有get方式提交时HTTP中没有消息体。

Post方式:表单数据存放在http协议体中以实体的方式传送到服务器。

 

3、服务器获取数据方式

Get方式:服务器采用request.QueryString来获取变量的值。

Post方式:服务器采用request.Form来获取数据。

4、传送的数据量

Get方式:数据量有长度限制,一般不超过2kb.因为是参数传递,且在地址栏中,所有数据量有限制。

Post方式:适合大规模的数据传送。因为是以实体的方式传送的。

5、安全性

Get方式:安全性差,因为是直接将数据显示在地址栏中,浏览器有缓存,可记录用户信息,所以安全性低。

Post方式:安全性高。因为post方式提交数据时是采用的http post机制,是将表单中的字段与值防止在http header内一起传送到action所指的url中,用户是看不见的。

6、在用户刷新时:

Get方式:不会有任何提示。

Post方式:会弹出提示框,问用户是否重新提交。

7、总结

  1. get是把参数数据队列加到提交表单的action属性所指的url中,post是通过http post机制,将表单内的各个字段与其内容放置在html header中一起传送到action属性所致的url地址。用户看不到这个过程。

  2. Get方式,服务器端用request.queryString获取变量的值,对于post方式,服务器端用request.form获取提交的数据。

  3. Get传送的数据量比较小,不能大于2kb,post传送的数据量比较大,一般默认为不受限制。但理论上IIS4为80k,IIS5为100k.

  4. Get安全性非常低,post安全性高,但是执行效率get比post好,建议:包含机密信息的话用post方式,数据添加、修改、删除用post方式,数据查询读取相关用get方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值