1

I'm trying to connect to an http server that uses HTTP 1.1, my problem is that even thought the request is in HTTP 1.1 format and the server does actually use HTTP 1.1(I tried it in a browser) it only responds with HTTP 1.0. I'm using this modified example of the web client, I updated the Ethernet library yesterday and for my server I'm using Node 8.4.0, I'm testing with google first even though I know the server can respond with HTTP 1.1.

Ethernet shield model: Han Run HR911105A 16/02

Arduino: Mega 2560

 This sketch connects to a website (http://www.google.com)
 using an Arduino Wiznet Ethernet shield.

 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13

 created 18 Dec 2009
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe, based on work by Adrian McEwen

 */

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// if you don't want to use DNS (and reduce your sketch size)
// use the numeric IP instead of the name for the server:
//IPAddress server(74,125,232,128);  // numeric IP for Google (no DNS)
char server[] = "www.google.com";    // name address for Google (using DNS)

// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 0, 177);

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac, ip);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
  client.print("GET / HTTP/1.1\r\n");
  client.print("Host: www.google.com\r\n");
  client.print("Content-Type: application/x-www-form-urlencoded\r\n");
  client.print("Cache-Control: no-cache\r\n");
  client.print("\r\n");
  } else {
    // if you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop() {
  // if there are incoming bytes available
  // from the server, read them and print them:
  while (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
}

With this I get the following response: enter image description here

Thank you in advance

  • How does a 302 benefit from being HTTP 1.1? – Ignacio Vazquez-Abrams Aug 18 '17 at 16:23
  • It's just a test :P I don't really care about the result in this one, I just need an http 1.1 response so I can then connect the arduino to a socket.io server I've tried many times with the 2 other servers and the only type of response I get is 1.0---OP – user3474792 Aug 18 '17 at 16:26
  • Did you try using a URL that returns a 200? – Ignacio Vazquez-Abrams Aug 18 '17 at 16:26
  • Han Run HR911105A 16/02 -- I do love the way people keep quoting the model number of the RJ45 socket as the board model... – Majenko Aug 18 '17 at 16:27
  • Ignacio: I did try, the response is the following: The reason for the bad request is because the handshake in the socket.io library needs an http 1.1 response, for this it sends 2 get requests. The library is washo4evr's library for socket.io. i.imgur.com/qW2WVRH.png – user3474792 Aug 18 '17 at 16:31
0

The device sending the request has no bearing on if it is HTTP 1.0 or 1.1. Only the content has an effect.

That and what is in the path - and I suspect that may be your problem: your are going through a squid proxy - and an old version at that. It is most likely that the proxy is changing the request to be a 1.0 request instead of a 1.1 request.

|improve this answer|||||
  • Thank you: Turns out the local network where I was connected had an IP in this format: xxx.xxx.70.xxx And my IP was: xxx.xxx.80.xxx Therefore the proxy was making the response go from 1.1 to 1.0 – user3474792 Aug 18 '17 at 16:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.