HTTP协议规定,客户端的编写
HTTP协议是网络应用层协议,建立在TCP/IP协议基础上。
HTTP协议基于客户/服务器模式,客户端主动发出HTTP请求,服务器接收HTTP请求,返回HTTP响应结果。HTTP协议对HTTP请求,以及响应的格式作了明确的规定。
HTTP客户程序和HTTP服务器分别由不同的软件开发商提供,它们都可以用任意的编程语言编写。用VC编写的HTTP客户程序能否与用java编写的HTTP服务器顺利通信呢?答案是肯定的。HTTP协议严格规定了HTTP请求和HTTP响应的数据格式,只要HTTP服务器与客户程序都遵守HTTP协议。
-------
HTTP请求格式:
HTTP协议规定,HTTP请求由3部分,分别是
1、请求方式、URI、HTTP协议的版本
2、请求头(Rquest Header)
3、请求正文(Reuqest Content)
如:
POST/hello.htm HTTP/1.1
Accept:image/gif,image/jpeg,*/*
Referer:http://locallost/login.htm
Accept-Language:en,zh-cn;q=0.5
Content-Type:application/x-www-form-rulencoded
Accept-Encoding:gzip,deflate
User-Agent:Mozila/4.0(compatible;MSIE6.0;Windows NT 5.0)
Host:localhost
Content-Length:43
Connection:Keep-Alive
Cache-Control:no-cache
空行
username=weiqin&password=123&submit=submit
-----
1、请求方式、URI、HTTP协议的版本
POST /hello.html HTTP/1.1
HEAD:客户程序和服务器之间交流一些颞部数据,服务器不会返回具体的文档。当使用GET和POST方法时,服务器最后都将特定的文档返回给客户程序。
2、请求头
请求头包含许多有关客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器的类型、所用的语言、请求正文,以及请求正文的长度等。
3、请求正文
HTTP协议规定,请求头和请求正文之间必须以空行分隔(z只有CRLF符号的行),
这个空行非常重要,它表示请求头已经结束,接下来时请求正文。请求正文可以包含客户以POST方式提交的表单数据:username=weiqin&password=123&submit=submit
注:CRLF是指回车符和行结束符"\r\n"
/**
* 使用Socket创建一个Htpp客户端
*
*/
public class SimpleHttpClient { public void sendReuqest(){
Socket socket = null;
try {
//连接HTTP服务器
socket = new Socket("127.0.0.1", 8088);
//拼接HTTP请求协议规格
StringBuffer sb = new StringBuffer(
"GET"+"/index.jsp"+"HTTP/1.1\r\n");
sb.append("Host:127.0.0.1\r\n");
sb.append("Accept:*/*\r\n");
sb.append("Accept-Language:zh-cn\r\n");
sb.append("Accept-Encoding:gzip,deflate\r\n");
sb.append("User-Agent:Mozila/4.0("
+ "compatible;MSIE 6.0;Windows NT 5.0)\r\n");
sb.append("Contenction:Keep-Alive\r\n\r\n");
//发送HTTP请求
OutputStream out = socket.getOutputStream();
out.write(sb.toString().getBytes());
socket.shutdownInput(); //接收HTTP响应结果
InputStream in = socket.getInputStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
byte[] buff = new byte[1024];
int len =-1;
while((len = in.read(buff)) != -1){
buffer.write(buff, 0, len);
}
System.out.println(new String(buffer.toByteArray()));
} catch (Exception e) {
// TODO: handle exception
} }
}
-------------
HTTP响应格式
与HTTP请求相似,HTTP响应也由3部分构成,分别是:
1、HTTP协议的版本、状态代码、描述
2、响应头
3、响应正文
如:
HTTP/1.1 200 OK
Server:nio/1.1
Content-Type:text/html;charset=GBK
Content-length:102
<html>
<head>
<title>helloapp</title>
</head>
<body>
<h1>hello</h1>
</body>
</html>
------
1、HTTP协议的版本、状态代码、描述
状态码:是一个3位整数,以1/2/3/4或5开头
1xx:信息提示,表示临时响应。
2xx:响应成功,表名服务器成功地接收了客户端请求
3xx:重定向
4xx:客户端错误,
5xx:服务器错误
2、响应头
响应头也和请求头一样包含许多有用的信息。例如:服务器类型、正文类型、正文长度等:
Server:nio/1.1
Content-Type:text/html;charset=GBK
Content-length:102
3、响应正文:
常见的是HTML网页
注:HTTP请求头与请求正文之间必须用空行分隔,同样,HTTP响应头与响应正文之间也必须空行分隔。
HTTP协议规定,客户端的编写的更多相关文章
- 基于TCP协议的客户端
基于TCP协议的客户端 此客户端能用于下一篇博客的单线程服务器和多线程服务器 import java.io.BufferedReader; import java.io.IOException; im ...
- python之模块ftplib(FTP协议的客户端)
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块ftplib(FTP协议的客户端) #需求:快速进行ftp上传 ,下载,查询文件 from ...
- 它是对 ACME(automated certificate management environment) 协议的实现,只要实现了 ACME 协议的客户端都可以跟它交互。
它是对 ACME(automated certificate management environment) 协议的实现,只要实现了 ACME 协议的客户端都可以跟它交互. https://mp.we ...
- yarn/mapreduce工作机制及mapreduce客户端代码编写
首先需要知道的就是在老版本的hadoop中是没有yarn的,mapreduce既负责资源分配又负责业务逻辑处理.为了解耦,把资源分配这块抽了出来,形成了yarn,这样不仅mapreudce可以用yar ...
- 一文彻底理解Redis序列化协议,你也可以编写Redis客户端
前提 最近学习Netty的时候想做一个基于Redis服务协议的编码解码模块,过程中顺便阅读了Redis服务序列化协议RESP,结合自己的理解对文档进行了翻译并且简单实现了RESP基于Java语言的解析 ...
- Android(java)学习笔记205:网易新闻RSS客户端应用编写逻辑过程
1.我们的项目需求是编写一个新闻RSS浏览器,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS目前广泛用于网上新闻频道,bl ...
- 二、网络编程-socket之TCP协议开发客户端和服务端通信
知识点:之前讲的udp协议传输数据是不安全的,不可靠不稳定的,tcp协议传输数据安全可靠,因为它们的通讯机制是不一样的.udp是用户数据报传输,也就是直接丢一个数据包给另外一个程序,就好比寄信给别人, ...
- Android(java)学习笔记148:网易新闻RSS客户端应用编写逻辑过程
1.我们的项目需求是编写一个新闻RSS浏览器,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS目前广泛用于网上新闻频道,bl ...
- HTTPS-HSTS协议(强制客户端使用HTTPS与服务器创建连接)
HSTS(HTTP Strict Transport Security)国际互联网工程组织IETE正在推行一种新的Web安全协议 HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接. ...
随机推荐
- linux安装mysql图文教程
---恢复内容开始--- 1.下载mysql [root@localhost ~]# yum install mysql mysql-server 输入y 输入y 输入y 下载完成 接下来我们要使用w ...
- element-ui Select 清空model,页面没有清空选中项的问题
业务场景: 在dialog 每次打开时, 选择应用程序要初始化为空. 最初的做法为: 监听dialog的show状态,当show为false时,设置selectApp为空这样写时,虽然selectAp ...
- s21day09 python笔记
s21day09 python笔记 一.三元运算(三目运算) 用途:用于简单的if条件语句 基本结构 v = 前面 if 条件 else 后面 #如果条件为真,v = 前面,否则,v = 后面 &qu ...
- Android SDK的下载与安装
一.Android SDK简介 Android SDK(Software Development Kit,软件开发工具包)被软件开发工程师用于为特定的软件包.软件框架.硬件平台.操作系统等建立应用软件 ...
- ESP8266EX资料
https://github.com/esp8266/Arduino http://espressif.com/zh-hans/support/explore/faq 电路资料图如下: 介绍功能: 参 ...
- Python3 Flask+nginx+Gunicorn部署(上)
前言:一般在本地运行flask项目通常是直接python3 文件名.py,然后打开:http://127.0.0.1:5000 查看代码结果 这次主要是记录flask在python3 环境结合ngin ...
- PythonStudy——字符编码 Character Encoding
测试一下学习字符编码的问题:解决乱码问题 数据 从 硬盘 => 内存 => cpu应用程序打开文本文件的三步骤1.打开应用程序2.将数据加载到内存中3.cpu将内存中的数据直接翻译成字符显 ...
- js+css jQuery实现页面后退执行 & 遮罩弹框
JS部分 <script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script> < ...
- CSS 社区的解决方案,对比
在众多解决方案中,没有绝对的优劣.还是要结合自己的场景来决定. 我们团队在使用过 scss 和 css modules 后,仍然又重新选择了使用 scss.css modules 虽然有效解决了样式冲 ...
- OpenStack上搭建Q版的公共环境准备(step1)
vmware14 centos7.5minimal版 controller1节点虚拟硬件配置: CPU:1颗2核 Memory:2G 硬盘:20G 网卡: VMnet1(仅主机模式):关闭DHCP,手 ...