tcp进程kmp

HTTP

2016-07-04  本文已影响49人  Spicy_Crayfish

HTTP:HyperText Transfer Protocol,超文本传输协议
该协议是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。
HTTP是一个客户端和服务器端请求和应答的标准。客户端通过使用Web浏览器、网络爬虫或者其它的工具发起一个HTTP请求到服务器上的指定端口(默认端口为80),应答的服务器上存储着资源,如HTML文件和图像,给予客户端资源的应答。

-特点:

  1. 支持客户/服务器模式
  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。常用的方法有GET、HEAD、POST。每种方法规定了客户和服务器联系的类型不同。HTTP服务器的程序规模小,因而通信速度很快
  3. 灵活:HTTP允许传输任意类型的数据对象,正则传输的类型由Content-Type加以标记
  4. 无连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可节省传输时间
  5. 无状态:指协议对于事物处理没有记忆功能,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快

-工作流程

(1)首先客户机与服务器需要建立连接,只要单击某个超链接,HTTP的工作开始
(2)建立连接后,客户机发送请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,MIME信息(包括请求修饰符、客户机信息和可能的内容)
(3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息(包括服务器信息、实体信息和可能的内容)
(4)客户端接收服务器所返回的信息通过浏览器显⽰示在用户的显示屏上,然后客户机与服务器断开连接。

HTTP协议通常承载在TCP协议上,有时也承载于TLS或SSL协议层上,这时就是常说的HTTPS;HTTP协议永远是客户端发起请求,服务器端回送响应;同一个客户端的本次请求和上次请求没有对应关系

-重要概念

-HTTP请求详解

HTTP请求由三部分组成:请求行、请求头、请求正文

HTTP的8种请求方式:

-请求内容:

HTTP协议规定:一个完整的由客户端发给服务器的HTTP请求中包含以下内容:

-响应内容

  1. Server: nginx // 服务器的类型 2.
  2. Content-Type: application/json; charset=utf-8 // 返回数据的类型
  3. Content-Length: 21670 // 返回数据的长度
  4. Date: Sat, 19 Sep 2015 05:02:56 GMT // 响应的时间

每个请求或响应消息中都包含着头域,每个头域由一个域名,冒号和域值三部分组成。域名大小写无关,域值前可以添加任何数量的空格符,头域可被扩展为多行,在每行开始处,使用至少一个空格或制表符。

下面举例构建HTTP的GET请求:
1.从NSURL中解析出服务器的IP地址

//1.通过url获取host
NSString *host = url.host;

//2.通过host解析ip地址
struct hostent *host_ip = gethostbyname([host UTF8String]);

//获取ip地址
struct in_addr **addrList = (struct in_addr **)host_ip->h_addr_list;
for (int i = 0; addrList[i]!=NULL; i++) {
    NSLog(@"ip is:%s",inet_ntoa(*addrList[i]));
}

NSString *ip = [NSString stringWithCString:inet_ntoa(*addrList[0]) encoding:NSUTF8StringEncoding];

//3.获取端口号
NSNumber *port = url.port;

2.构建HTTP的GET请求
例子:图片中内容即是GET请求行,我们要拼接出下面的内容

002WV0d1zy71abHquRGf8&690.jpeg

注意:

使用NSString拼接:

//拼接请求信息   \r\n == 换行
NSString *sendMsg = [NSString stringWithFormat:@"GET %@ HTTP/1.1\r\n",url.path];

sendMsg = [sendMsg stringByAppendingFormat:@"Host: %@\r\n",url.host];

sendMsg =[sendMsg stringByAppendingString:@"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n\r\n"];

sendMsg =[sendMsg stringByAppendingString:@"Content-Encoding: utf-8\r\n"];
sendMsg =[sendMsg stringByAppendingString:@"User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:25.0) Gecko/20100101 Firefox/25.0\r\n"];
sendMsg =[sendMsg stringByAppendingString:@"Connection: close\r\n"];
上一篇下一篇

猜你喜欢

热点阅读